Python字频计数程序

时间:2014-02-19 07:12:35

标签: python-2.7 word-frequency

我在python中创建了一个简单的字数统计程序,它读取文本文件,计算字频率并将结果写入另一个文件。问题是当单词重复出现时,程序会写入同一个单词的初始计数和最终计数。例如,如果重复单词“hello”3次,程序会在输出中写入3个hello实例:

单词 - 频率计数

你好 - 1

你好 - 2

你好 - 3

代码是:

counts ={}
for w in words:
 counts[w] = counts.get(w,0) + 1
 outfile.write(w+','+str(counts[w])+'\n')'

任何帮助将不胜感激。我是python中的新手。

3 个答案:

答案 0 :(得分:5)

解决此问题的实际方法是使用Counter,如下所示:

>>> from collections import Counter
>>> words = ['b','b','the','the','the','c']
>>> Counter(words).most_common()
[('the', 3), ('b', 2), ('c', 1)]

解决问题的另一种方法是使用defaultdict,它就像上面的Counter示例一样:

>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> for word in words:
...    d[word] += 1
...
>>> d
defaultdict(<type 'int'>, {'the': 3, 'b': 2, 'c': 1})

无论你如何计算单词,只有在计算完所有单词后才能写入文件;否则你为每个“计数”写了一次,一旦这个词出现不止一次,你的输出就会翻倍。

所以,首先收集计数,然后把它们写出来。

答案 1 :(得分:1)

使代码有效的方法:

counts ={}
for w in words:
    counts[w] = counts.get(w,0) + 1

for w in counts:
    outfile.write(w+','+str(counts[w])+'\n')

但我认为Burhan Khalid建议使用Counter是解决问题的更好方法。

答案 2 :(得分:0)

您是否考虑过首先在您的程序中存储频率计数,然后在结束时全部写入?它肯定比为每个计数重写输出文件更简单。