CountVectorizer为单词提供错误的计数?

时间:2017-07-14 14:03:15

标签: python scikit-learn nlp nltk countvectorizer

假设我的文本文件包含以下文本:

  

快速的棕色狐狸跳过懒狗。时间缝合节省   九。快速的棕色针脚在懒惰时间跳了起来。狐狸在   时间可以节省一只狗。

我想使用sk-learn的CountVectorizer来获取文件中所有单词的字数。 (我知道还有其他方法可以做到这一点,但我想使用CountVectorizer有几个原因。)这是我的代码:

from nltk.corpus import stopwords
from sklearn.feature_extraction.text import CountVectorizer

text = input('Please enter the filepath for the text: ') 
text = open(text, 'r', encoding = 'utf-8')
tokens = CountVectorizer(analyzer = 'word', stop_words = 'english')


X = tokens.fit_transform(text)
dictionary = tokens.vocabulary_

除非我致电dictionary时,它给了我错误的计数:

>>> dictionary
{'time': 9, 'dog': 1, 'stitch': 8, 'quick': 6, 'lazy': 5, 'brown': 0, 'saves': 7, 'jumped': 4, 'fox': 3, 'dogs': 2}

有人可以就我在这里犯下的(无疑是明显的)错误提出建议吗?

1 个答案:

答案 0 :(得分:4)

vocabulary_是文档术语矩阵中术语与其索引的映射/映射,而不是计数:

  

vocabulary_:术语与特征索引的映射。

X实际上为您提供了特征索引和相应计数的矩阵。

>>> for i in X:
...    print(i)
... 
  (0, 1)    1
  (0, 7)    2
  (0, 9)    3
  (0, 8)    2
  (0, 2)    1
  (0, 5)    2
  (0, 4)    2
  (0, 3)    2
  (0, 0)    2
  (0, 6)    2

e.g。 9 -> 'time'的计数为3。