返回CountVectorizer中特定特征非零条目的行索引

3 投票
1 回答
1886 浏览
提问于 2025-04-18 03:20

我一直在查找关于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)

撰写回答