计算txt文件中最常用的单词

时间:2017-08-22 16:29:26

标签: python count

我试图获取txt文件中10个最常用单词的列表,其最终目标是构建单词云。我打印时,以下代码不会产生任何内容。

>>> import collections
>>> from collections import Counter
>>> file = open('/Users/Desktop/word_cloud/98-0.txt')
>>> wordcount={}
>>> d = collections.Counter(wordcount)
>>> for word, count in d.most_common(10):
    print(word, ": ", count)

2 个答案:

答案 0 :(得分:3)

实际上,我建议您继续使用Counter。它是一个非常有用的工具,用于计算事物,但它具有非常富有表现力的语法,因此您不必担心sort任何事情。使用它,您可以:

from collections import Counter

#opens the file. the with statement here will automatically close it afterwards.
with open("input.txt") as input_file:
    #build a counter from each word in the file
    count = Counter(word for line in input_file
                         for word in line.split())

print(count.most_common(10))

使用我的input.txt,其输出为

[('THE', 27643), ('AND', 26728), ('I', 20681), ('TO', 19198), ('OF', 18173), ('A', 14613), ('YOU', 13649), ('MY', 12480), ('THAT', 11121), ('IN', 10967)]

我稍微改了一下,所以不必将整个文件读入内存。我的input.txt是我对莎士比亚作品的无标点版本,以证明此代码。我的机器大约需要0.2秒。

你的代码有点随意 - 看起来你已经尝试将几种方法结合在一起,保持每个方法的位置。我的代码已经注释了一些解释功能。希望它应该相对简单,但如果你仍然对任何事情感到困惑,请告诉我。

答案 1 :(得分:1)

你还没有从.txt文件中提取任何内容。文本文件的内部是什么样的?如果要将单词分类为由空格分隔的字符组,则可以获得单词列表:

with open('path/to/file.txt', 'r') as f:
    words = ' '.split(f.read())

然后获得10个最常见的(可能更有效的方法,但这是我先找到的):

word_counter = {}
for word in words:
    if word in word_counter:
        word_counter[word] += 1
    else:
        word_counter[word] = 1

popular_words = sorted(word_counter, key = word_counter.get, reverse = True)

print popular_words[:10]