19 Stimmen

So finden Sie die Anzahl der Wörter in einer Zeichenkette

Ich habe eine Zeichenkette " Hello I am going to I with hello am ". Ich möchte herausfinden, wie oft ein Wort in der Zeichenkette vorkommt. Beispiel: "Hallo" kommt 2 Mal vor. Ich habe diesen Ansatz versucht, der nur Zeichen ausgibt -

def countWord(input_string):
    d = {}
    for word in input_string:
        try:
            d[word] += 1
        except:
            d[word] = 1

    for k in d.keys():
        print "%s: %d" % (k, d[k])
print countWord("Hello I am going to I with Hello am")

Ich möchte lernen, wie man die Wortzahl ermittelt.

45voto

Joel Cornett Punkte 23066

Wenn Sie die Anzahl eines einzelnen Wortes ermitteln wollen, verwenden Sie einfach count :

input_string.count("Hello")

使用する collections.Counter y split() um alle Wörter zusammenzuzählen:

from collections import Counter

words = input_string.split()
wordCount = Counter(words)

6voto

ninjagecko Punkte 82995
from collections import *
import re

Counter(re.findall(r"[\w']+", text.lower()))

Verwendung von re.findall ist vielseitiger als split denn sonst können Sie Kontraktionen wie "don't" und "I'll" usw. nicht berücksichtigen.

Demo (anhand Ihres Beispiels):

>>> countWords("Hello I am going to I with hello am")
Counter({'i': 2, 'am': 2, 'hello': 2, 'to': 1, 'going': 1, 'with': 1})

Wenn Sie erwarten, dass Sie viele dieser Abfragen machen werden, wird dies nur einmal O(N) Arbeit machen, anstatt O(N*#Abfragen) Arbeit.

6voto

Martijn Pieters Punkte 953257

Counter aus Sammlungen ist Ihr Freund:

>>> from collections import Counter
>>> counts = Counter(sentence.lower().split())

4voto

Franck Dernoncourt Punkte 68647

Der Vektor der Anzahl der Vorkommen von Wörtern wird als bag-of-words .

Scikit-learn bietet ein schönes Modul, um es zu berechnen, sklearn.feature_extraction.text.CountVectorizer . Beispiel:

import numpy as np
from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer(analyzer = "word",   \
                             tokenizer = None,    \
                             preprocessor = None, \
                             stop_words = None,   \
                             min_df = 0,          \
                             max_features = 50) 

text = ["Hello I am going to I with hello am"]

# Count
train_data_features = vectorizer.fit_transform(text)
vocab = vectorizer.get_feature_names()

# Sum up the counts of each vocabulary word
dist = np.sum(train_data_features.toarray(), axis=0)

# For each, print the vocabulary word and the number of times it 
# appears in the training set
for tag, count in zip(vocab, dist):
    print count, tag

Sortie :

2 am
1 going
2 hello
1 to
1 with

Ein Teil des Codes wurde von dieser Seite übernommen Kaggle-Tutorial zu Bag-of-Words .

ZU IHRER INFORMATION: Wie kann man die Funktion CountVectorizerand() von sklearn verwenden, um Ngramme zu erhalten, die Satzzeichen als separate Token enthalten?

3voto

Levon Punkte 134187

Hier ist ein alternativer Ansatz, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird

sum(1 for w in s.lower().split() if w == 'Hello'.lower())
2

Bei der Übereinstimmung werden die Zeichenfolge und das Ziel in Kleinbuchstaben umgewandelt.

ps: Kümmert sich um die "am ham".count("am") == 2 Problem mit str.count() darauf hat auch @DSM unten hingewiesen :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X