【发布时间】:2012-10-28 22:58:23
【问题描述】:
我正在使用 Python sklearn 库。 我有 150,000 多个句子。
我需要一个类似数组的对象,其中每一行代表一个句子,每一列对应一个单词,每个元素是该句子中单词的数量。
例如:如果这两个句子是“狗跑了”和“男孩跑了”,我需要
[ [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__'
我查看了首席运营官的documentation,但对以下内容非常困惑:
稀疏矩阵可用于算术运算 ...
COO格式的缺点... 不直接支持: 算术运算
我使用了 dok_matrix,效果很好,但我不知道这在这种情况下是否表现最好。
提前致谢。
【问题讨论】:
标签: python nlp scipy sparse-matrix scikit-learn