返回CountVectorizer中特定特征非零条目的行索引
我一直在查找关于Python的sklearn库的文档。
我创建了一个CountVectorizer对象,并用我的文本数据进行了拟合和转换。
我想找一个函数,可以返回某一特定列中所有非零条目的行索引。
比如说,如果我的CountVectorizer的行是音乐评论,列是一些特征(例如,有一列是“歌词”这个词的出现次数),那么在scikit-learn中有没有函数可以返回包含这个词的音乐评论的索引呢?
我查看了inverse_transform(X)
这个函数,但它并没有实现这个功能。
我怀疑我并不是第一个对这个功能感兴趣的人。
在sklearn中有没有这样的功能?如果没有,有没有其他人对类似的操作感兴趣,并找到好的实现方法呢?
提前谢谢你们。
更新:
我找到的最好解决方案是遍历列的数量(在我的情况下,我有100个特征):
for i in range(99):
print X.indices[X.indptr[i]:X.indptr[i+1]]
但这样看起来有点浪费,因为它是逐个遍历的,而且范围必须硬编码,对于稀疏的列还会返回空列表。
1 个回答
2
我在文档里也没找到一个完全符合这个需求的函数,不过这个方法应该能帮到你:
def lookUpWord(vec,dtm,word):
i = vec.get_feature_names().index(word)
return dtm[:,i].nonzero()[0]
这里有一个简单的例子:
>>> from sklearn.feature_extraction.text import CountVectorizer
>>>
>>> corpus = [
... 'This is the first document.',
... 'This is the second second document.',
... 'And the third one.',
... 'Is this the first document?'
... ]
>>>
>>> X = CountVectorizer()
>>> Y = X.fit_transform(corpus)
>>> lookUpWord(X,Y,'first')
array([0, 3], dtype=int32)