Python - 统计文本字符串中的重复单词并输出每个单词及其出现次数
我有一个名为 words.txt 的文件,里面有很多重复的单词。
我想把这些单词排序,并统计每个单词出现的频率。
理论上,我可以通过在 Excel 中排序和使用 COUNTIF 函数来做到这一点,但我的文件有超过 10,000 行,所以用 Excel 来处理不太实际。
我在一个名为 count.py 的文件中做了一些工作,然后通过输入 python count.py words.txt
来运行它:
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])))
但是,这段代码给我返回的是每个字符的计数,而我想要的是每个单词的计数。我哪里出错了呢?
更新:感谢 mhlester 指出我需要通过 txt.split() 来把文本分割成单词。
这是我更新后的代码:
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])))
1 个回答
4
这一行代码的意思是:
txt = open(filename).read()
txt
是一个字符串,也就是说它是一串文字。所以
Counter(txt)
这段代码会计算字符串中的每一个字符。
如果你想要计算字符串中的每一个 单词,你需要先把它分割成单词,然后再用 Counter
来计算:
Counter(txt.split())
这里没有给 split
传递任何参数,它会把所有的空白字符都当作分隔符。