我有一个包含大量重复单词的words.txt文件。
我想对列表进行排序并计算每个单词出现的频率。
理论上我可以通过在Excel中对COUNTIF进行排序和使用来实现这一点,但是我有一个大于< 10K行的文件,所以使用Excel是不实际的。
到目前为止,我通过输入python count.py words.txt
运行的count.py文件中完成了什么:
import re
from sys import argv
from collections import Counter, defaultdict
script, filename = argv
cnt = Counter()
txt = open(filename).read()
freqword = defaultdict(list)
for word, freq in Counter(txt).items():
freqword[freq].append(word)
for freq in sorted(freqword):
print('count {}: {}'.format(freq, sorted(freqword[freq])))
但是,当我想要教授单词时,这会让每个角色都重新计算。我做错了什么?
更新:谢谢我指出我需要通过执行txt.split()将txt拆分为单词。
这是我更新的代码:
from sys import argv
from collections import Counter, defaultdict
script, filename = argv
txt = open(filename).read()
cnt = Counter(txt.split())
freqword = defaultdict(list)
for word, freq in cnt.items():
freqword[freq].append(word)
for freq in sorted(freqword):
print('count {}: {}'.format(freq, sorted(freqword[freq])))
答案 0 :(得分:4)
这一行:
txt = open(filename).read()
txt
是一个字符串。所以
Counter(txt)
计算字符串的每个字符。
为了计算字符串的每个单词,您需要在Counter
之前将其拆分为单词:
Counter(txt.split())
没有传递给split的参数使用所有空格