我试图实现一个代码,允许我在文本中找到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个元素,我将非常感激。谢谢。
答案 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的人。我稍后会尝试更好,更准确的解决方案。
非常感谢你的帮助。