Ich benutze die Python sklearn Bibliotheken. Ich habe 150.000+ Sätze.Zählen mit scipy.sparse
Ich brauche ein array-ähnliches Objekt, wobei jede Zeile für einen Satz ist, jede Spalte einem Wort entspricht und jedes Element die Anzahl der Wörter in diesem Satz ist.
Zum Beispiel: Wenn die beiden Sätze waren „Der Hund lief“ und „Der Junge lief“, ich brauche
[ [1, 1, 1, 0]
, [0, 1, 1, 1] ]
(die Reihenfolge der Spalten ist irrelevant, und hängt davon ab, welche Spalte zugeordnet ist welches Wort)
Mein Array wird spärlich (jeder Satz wird einen Bruchteil der möglichen Wörter haben), und so verwende ich scipy.sparse.
def word_counts(texts, word_map):
w_counts = sp.???_matrix((len(texts),len(word_map)))
for n in range(0,len(texts)-1):
for word in re.findall(r"[\w']+", texts[n]):
index = word_map.get(word)
if index != None:
w_counts[n,index] += 1
return w_counts
...
nb = MultinomialNB() #from sklearn
words = features.word_list(texts)
nb.fit(features.word_counts(texts,words), classes)
Ich möchte wissen, welche spärliche Matrix am besten wäre.
Ich versuchte coo_matrix mit bekam aber einen Fehler:
TypeError: 'coo_matrix' object has no attribute '__getitem__'
ich am documentation für COO aussehen, aber wurde sehr verwirrt durch die folgenden:
Sparse matrices can be used in arithmetic operations ...
Disadvantages of the COO format ... does not directly support: arithmetic operations
I dok_matrix verwendet wird, und dass gearbeitet, aber ich weiß nicht, ob dies in diesem Fall am besten funktioniert.
Vielen Dank im Voraus.
+1 ich wollte nur CountVectorizer vorschlagen –
+1 für CountVectorizer –
Akzeptierte Antwort, weil CountVectorizer die echte Antwort hier war. (Vielleicht DictVectorizer auch, aber ich habe es noch nicht ausprobiert.) –