我正在使用 Python sklearn 库。我有 150,000 多个句子。
我需要一个类似数组的对象,其中每一行代表一个句子,每一列对应一个单词,每个元素是该句子中单词的数量。
例如:如果这两个句子是“The dog ran”和“The boy ran”,我需要
[ [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,效果很好,但我不知道这在这种情况下是否表现最好。
提前致谢。