Python 如何从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

我已使用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, 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似乎也正确,而且肯定更简单;没有检查效率,但如果效率较低,我会感到惊讶。你会发布一个答案,或者我会更新我的答案以包含这种可能性?