Python中最常见的单词

时间:2018-03-03 21:54:21

标签: python

我试图实现一个代码,允许我在文本中找到10个最常用的单词。我是python的新手,更习惯于C#,java甚至C ++等语言。这是我做的:

f = open("bigtext.txt","r")

word_count = {}

基本上,我的想法是创建一个字典,其中包含每个单词在我的文本中出现的次数。如果单词不存在,我会将其添加到字典中,值为1.如果字典中已存在世界,我将其值增加1.

for x in f.read().split():
    if x not in word_count:
        word_count[x] = 1
    else:
        word_count[x] += 1

sorted(word_count.values)

在这里,我将按价值对字典进行排序(因为我正在寻找10个最常见的世界,我需要10个具有最大值的字词)。

for keys,values in word_count.items():
    values = values + 1
    print(word_count[-values])
    if values == 10:
        break

这部分都失败了。我现在肯定知道了(因为我按照值的值对字典进行了排序)。我最常用的10个单词是我词典的最后10个元素。我想展示那些。所以我决定初始化values at 1并向后显示我的字典values = 10,这样我就不需要显示超出我需要的内容了。但不幸的是,我得到以下错误:

File "<ipython-input-19-f5241b4c239c>", line 13
    for keys,values in word_count.items()
                                         ^
SyntaxError: invalid syntax

我知道我的错误是我没有正确地向后显示我的字典。但我不知道如何前往其他地方。因此,如果有人能告诉我如何在我的字典中正确显示我的最后10个元素,我将非常感激。谢谢。

2 个答案:

答案 0 :(得分:0)

如果您不想使用collections.Counter,可以执行以下操作:

for word, count in sorted(word_count.items(), key=lambda x: -x[1])[:10]:
    print(word, count)

这将字典中的所有单词及其计数都添加到元组列表中;按每个元组中的第二个项目(计数)降序排序,然后只打印第一个(即最高)10个。

答案 1 :(得分:0)

我想非常感谢Ben,他告诉我,我无法对这样的词典进行排序。

所以这是我的最终解决方案(希望能帮助其他人);

my_words = []

for keys, values in word_count.items():
    my_words.append((values,keys))

我创建了一个列表,并在其中添加了我在字典中的值,每个值都包含以下单词。

my_words.sort(reverse = True)

然后我根据反向的值对我的列表进行排序(这样我的10个最常见的世界将成为我列表中的第10个元素)

print("The 10 most frequent words in this text are:")
print()

for key, val in my_words[:10]:
    print (key, val)

然后我只是显示了我列表中的10个第一个元素。

我还要感谢所有告诉我NLTK的人。我稍后会尝试更好,更准确的解决方案。

非常感谢你的帮助。