关于Python中与词频分析相关的其他Stackoverflow帖子的示例,我的程序正在返回字母频率分析,而不是实际的单词。
我目前正在从我的代码中所示的文本文件中阅读我的corpa。
from collections import Counter
def word_frequency_counter():
contents = ""
with open("file.txt") as f:
contents += str(f.readlines())
commonWords = Counter(contents)#= Counter(str(contents.lower())).most_common()
print "The top three words are: ", str(commonWords.most_common(3))
输出是这样的:
The top three words are: [(' ', 1126), ("'", 538), ('n', 528)]
我想要的输出是实际的单词,同时还有一组被忽略的单词,如空白字符和引号。
答案 0 :(得分:3)
Counter(contents.split())
应该使用单词代替......
答案 1 :(得分:0)
contents
是一个字符串,Python中的字符串是可迭代的(即字符串在此上下文中的行为类似于字母列表),因此您的计数器正在计算字母。
你需要传递一个单词列表,而不是一串字母。
Joran的回答显示了如何使用split()
执行此操作。
答案 2 :(得分:0)
您可以使用正则表达式查找所有单词(vs您现在获得的字符):
import re
...
commonWords = Counter(m.group(1) for m in re.finditer(r'\b(\w+)\b', contents))
您可以使用contents.split()
拆分空格上的文字,但不会将单词与标点符号分开。您还将使用正则表达式修复word
和word,
以及word.
等单独计数。