Pythonsklearnライブラリを使用しています。私は150,000以上の文を持っています。
配列のようなオブジェクトが必要です。各行は文用で、各列は単語に対応し、各要素はその文の単語数です。
例:2つの文が「犬が走った」と「少年が走った」だった場合、私は必要です
[ [1, 1, 1, 0]
, [0, 1, 1, 1] ]
(列の順序は関係なく、どの列がどの単語に割り当てられているかによって異なります)
私の配列はスパースになります(各文には可能な単語の一部が含まれます)ので、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)
どのスパース行列が最適か知りたいです。
coo_matrixを使用しようとしましたが、エラーが発生しました:
TypeError:'coo_matrix'オブジェクトに属性'__getitem__'がありません
COOのドキュメントを見ましたが、次の点で非常に混乱していました。
スパース行列は算術演算で使用できます
...COO形式の欠点...直接サポートされていません:算術演算
私はdok_matrixを使用しましたが、それは機能しましたが、この場合にこれが最適に機能するかどうかはわかりません。
前もって感謝します。