我正在尝试运行一个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)
如果您对这段代码可能有什么问题有一个想法,请与我分享,我将非常高兴。谢谢!
答案 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
参数。