Python 计数器()是嵌套列表中项目的三倍计数
我想搜索特定的关键字,然后创建一个字典,其中包含每个关键字的绝对计数和相对频率。我在嵌套循环中使用Counter(),该循环应该查找列表中的每个关键字,然后计算每个关键字在文档中出现的频率。但是,虽然计数器正确计算每个关键字的数量,但它会将此计数乘以关键字总数。我认为我的嵌套循环设置不正确Python 计数器()是嵌套列表中项目的三倍计数,python,nested,nltk,counter,Python,Nested,Nltk,Counter,我想搜索特定的关键字,然后创建一个字典,其中包含每个关键字的绝对计数和相对频率。我在嵌套循环中使用Counter(),该循环应该查找列表中的每个关键字,然后计算每个关键字在文档中出现的频率。但是,虽然计数器正确计算每个关键字的数量,但它会将此计数乘以关键字总数。我认为我的嵌套循环设置不正确 from nltk.tokenize import word_tokenize from nltk.corpus import stopwords from nltk import FreqDist impo
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk import FreqDist
import io
from collections import Counter
with io.open('copy.txt','r', encoding='utf-8') as tempFile:
rawText = tempFile.read()
rawText = rawText.lower()
cnt = Counter()
tokens = word_tokenize(rawText)
keywords = ['kingdom', 'phylum', 'class', 'status']
for keyword in keywords:
for keyword in tokens:
cnt[keyword] += 1
for keyword in keywords:
d = {'Keyword': keyword, 'Count': cnt[keyword], 'Frequency':cnt[keyword]/float(len(tokens))}
print(d)
我应该看到:
{'Count': 2, 'Frequency': 0.000882223202470225, 'Keyword': 'kingdom'}
{'Count': 6, 'Frequency': 0.002646669607410675, 'Keyword': 'phylum'}
{'Count': 14, 'Frequency': 0.0061755624172915745, 'Keyword': 'class'}
{'Count': 2, 'Frequency': 0.000882223202470225, 'Keyword': 'status'}
但我看到的是:
{'Count': 8, 'Frequency': 0.000882223202470225, 'Keyword': 'kingdom'}
{'Count': 24, 'Frequency': 0.002646669607410675, 'Keyword': 'phylum'}
{'Count': 56, 'Frequency': 0.0061755624172915745, 'Keyword': 'class'}
{'Count': 8, 'Frequency': 0.000882223202470225, 'Keyword': 'status'}
问题就在这里
for keyword in keywords:
for keyword in tokens:
cnt[keyword] += 1
您正在一次又一次地计算关键字的长度
如果您可以发布您的
原始文本
,我可能能够提供完整的解决方案。我想我的for循环顺序颠倒了。这似乎有效:
for token in tokens:
if token in keywords:
cnt[token] += 1
关键字中的第一个外部“for关键字:”循环对我来说没有意义。我上传了我正在分析的文件(只是维基百科的一个样本副本/粘贴)。谢谢你的帮助。