Python 如何从CountVectorizer输出中获取特定单词?
我已使用Sklearn CountVectorizer方法对文本数据集进行编码,例如:Python 如何从CountVectorizer输出中获取特定单词?,python,scikit-learn,Python,Scikit Learn,我已使用Sklearn CountVectorizer方法对文本数据集进行编码,例如: c\u vec=countvectorier(停止字=stopwords) 其中停止字由nltk生成 我使用output=c_vec.fit_transform(data)对数据集进行编码。然后我想检查编码器正在做什么,然后运行print(output),得到一个如下所示的打印输出: (03744)3 (0, 4511) 2 (0, 4071) 2 (0, 1831) 1 (0, 4321) 2 (0, 8
c\u vec=countvectorier(停止字=stopwords)
其中停止字由nltk
生成
我使用output=c_vec.fit_transform(data)
对数据集进行编码。然后我想检查编码器正在做什么,然后运行print(output)
,得到一个如下所示的打印输出:
(03744)3
(0, 4511) 2
(0, 4071) 2
(0, 1831) 1
(0, 4321) 2
(0, 8156) 2
(0, 7982) 1
(0, 2714) 1
(0, 2505) 1
...
(2394, 6070) 1
(2394, 8559) 2
(2394, 8087) 1
(2394, 7997) 8
(2394, 7827) 1
(2394, 5159) 5
(2394, 5396) 1
我的理解是,对于(03744)3
是数据集中字符串的行号0
是单词的编码3744
是字符串中该单词的计数3
但是,我希望能够看到哪个单词与
3744
相关。我已经阅读了Sklearn的文档,但看不到我在寻找什么。有什么建议吗?TL;DR:c_vec.get_feature_names()[3744]
将完成您的工作;请阅读下面的详细信息
您的出发点是
.词汇表
属性[请参见末尾的编辑以获得更简单的方法],根据,该属性提供了一个具有
术语到特征索引的映射
改编文档中的示例:
from sklearn.feature_extraction.text import CountVectorizer
corpus = [
'This is the first document.',
'This document is the second document.',
'And this is the third one.',
'Is this the first document?',
]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
我们得到
print(X)
(0, 8) 1
(0, 3) 1
(0, 6) 1
(0, 2) 1
(0, 1) 1
(1, 8) 1
(1, 3) 1
(1, 6) 1
(1, 1) 2
(1, 5) 1
(2, 8) 1
(2, 3) 1
(2, 6) 1
(2, 0) 1
(2, 7) 1
(2, 4) 1
(3, 8) 1
(3, 3) 1
(3, 6) 1
(3, 2) 1
(3, 1) 1
及
因此,现在的问题是如何找到具有给定值的字典键
从中修改method3
(因为它似乎不适用于Python 3):
我们得到:
get_term(vectorizer.vocabulary_, 8)
# 'this'
get_term(vectorizer.vocabulary_, 5)
# 'second'
i、 这正是你想要的
请注意,get_term()
函数将仅返回具有给定值的第一个键;然而,在这里的特定情况下,词典是一个词汇表,这不是一个问题,因为根据定义,值是唯一的,通过简单的检查可以很容易地确认
还要注意的是,尽管在上面链接的SO答案中有一些方法3的替代方法,但对于大型词典来说,上述方法是迄今为止速度最快的(就像现实世界语料库中的NLP应用程序一样)
编辑
正如Ben Reiniger在下面的评论中正确指出的那样,获取与文档术语矩阵X
的k
列相对应的词汇术语的更直接的方法是get\u feature\u names()的k
元素:
TL;DR:c_vec.get_feature_names()[3744]
将完成您的工作;请阅读下面的详细信息
您的出发点是.词汇表
属性[请参见末尾的编辑以获得更简单的方法],根据,该属性提供了一个具有
术语到特征索引的映射
改编文档中的示例:
from sklearn.feature_extraction.text import CountVectorizer
corpus = [
'This is the first document.',
'This document is the second document.',
'And this is the third one.',
'Is this the first document?',
]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
我们得到
print(X)
(0, 8) 1
(0, 3) 1
(0, 6) 1
(0, 2) 1
(0, 1) 1
(1, 8) 1
(1, 3) 1
(1, 6) 1
(1, 1) 2
(1, 5) 1
(2, 8) 1
(2, 3) 1
(2, 6) 1
(2, 0) 1
(2, 7) 1
(2, 4) 1
(3, 8) 1
(3, 3) 1
(3, 6) 1
(3, 2) 1
(3, 1) 1
及
因此,现在的问题是如何找到具有给定值的字典键
从中修改method3
(因为它似乎不适用于Python 3):
我们得到:
get_term(vectorizer.vocabulary_, 8)
# 'this'
get_term(vectorizer.vocabulary_, 5)
# 'second'
i、 这正是你想要的
请注意,get_term()
函数将仅返回具有给定值的第一个键;然而,在这里的特定情况下,词典是一个词汇表,这不是一个问题,因为根据定义,值是唯一的,通过简单的检查可以很容易地确认
还要注意的是,尽管在上面链接的SO答案中有一些方法3
的替代方法,但对于大型词典来说,上述方法是迄今为止速度最快的(就像现实世界语料库中的NLP应用程序一样)
编辑
正如Ben Reiniger在下面的评论中正确指出的那样,获取与文档术语矩阵X
的k
列相对应的词汇术语的更直接的方法是get\u feature\u names()的k
元素:
get\u feature\u names
已经在内部反转了词汇表
,尽管它可能没有使用最有效的方法?..@BenReiniger似乎也正确,而且肯定更简单;没有检查效率,但如果效率较低,我会感到惊讶。您将发布一个答案,或者我将更新我的答案以包含这种可能性?get\u feature\u names
已经在内部反转了词汇表,尽管它可能没有使用最有效的方法?..@BenReiniger似乎也正确,而且肯定更简单;没有检查效率,但如果效率较低,我会感到惊讶。你会发布一个答案,或者我会更新我的答案以包含这种可能性?