sklearn的关键字计数频率仅产生零计数

时间:2018-12-14 15:33:49

标签: python machine-learning scikit-learn nlp

我正在尝试运行一个Python代码,该代码计算文本中某些预定义关键字的出现频率。但是,运行下面发布的脚本时,我只会得到零(,即该脚本不计算目标文本中关键字的任何出现情况

似乎错误被卡在“ X = vectorizer.fit_transform(text)” 行中,因为它始终返回空变量X。

在这个简短的示例中,我试图获得的结果是一个表格,该表格在单独的列中列出了每种冰淇淋的计数,然后是各个计数的总和。

import pandas as pd
from collections import Counter
from sklearn.feature_extraction.text import CountVectorizer

icecream = ['Vanilla', 'Strawberry', 'Chocolate', 'Peach']
vectorizer = CountVectorizer(vocabulary=icecream, encoding='utf8', lowercase=True, analyzer='word', decode_error='ignore', ngram_range=(1, 1))
dq = pd.DataFrame(columns=icecream)

vendor = 'Franks Store'
text = ['We offer Vanilla with Hazelnut, Vanilla with Coconut, Chocolate and Strawberry']
X = vectorizer.fit_transform(text)
vocab = vectorizer.get_feature_names()
counts = X.sum(axis=0).A1
freq_distribution = Counter(dict(zip(vocab, counts)))
allwords = dict(freq_distribution)
totalnum = sum(allwords.values())
allwords.update({'totalnum': totalnum})

dy = pd.DataFrame.from_dict(allwords, orient='index')
dy.columns = [vendor]
dy = dy.transpose()
dq = dy.append(dq, sort=False)

print(dq)

如果您对这段代码可能有什么问题有一个想法,请与我分享,我将非常高兴。谢谢!

1 个答案:

答案 0 :(得分:1)

由于您在参数中使用了lowercase=True,因此所有找到的单词都将小写。但是你的词汇是这样的:

icecream = ['Vanilla', 'Strawberry', 'Chocolate', 'Peach']

此处的术语与小写字母不匹配,因此所有内容均为0。您也应该更改它们:

icecream = ['vanilla', 'strawberry', 'chocolate', 'peach']

之后的输出是:

                vanilla    strawberry    chocolate    peach    totalnum
Franks Store       2            1            1          0        4.0

现在看到vanilla的计数为2,因为它在文本中出现了两次。如果只想了解特定风味的存在或不存在,则可以在binary=True中使用CountVectorizer参数。