Python - 统计文本字符串中的重复单词并输出每个单词及其出现次数

0 投票
1 回答
1392 浏览
提问于 2025-04-18 07:07

我有一个名为 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 传递任何参数,它会把所有的空白字符都当作分隔符。

撰写回答