Python中字母频率返回的词频分析
我在看其他关于Python中词频分析的StackOverflow帖子时,发现我的程序返回的是字母频率分析,而不是实际的单词频率。
我现在是从一个文本文件中读取我的数据,代码如下所示。
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)]
我想要的输出应该是实际的单词,同时还要有一组被忽略的词,比如空格和引号之类的。
3 个回答
0
你可以用正则表达式来找到所有的单词,而不是像现在这样一个字符一个字符地找:
import re
...
commonWords = Counter(m.group(1) for m in re.finditer(r'\b(\w+)\b', contents))
你可以用 contents.split()
来根据空格把文本分开,但这样做不能把单词和标点符号分开。比如,word
、word,
和 word.
这些会被当成不同的计数,而用正则表达式就能解决这个问题。
0
contents
是一个字符串,而在Python中,字符串是可以逐个字符遍历的(也就是说,在这个情况下,字符串就像是一个字母的列表),所以你的计数器在数的是字母。
你需要给计数器传递一个单词的列表,而不是一个字母的字符串。
Joran的回答展示了如何使用 split()
来做到这一点。
3
Counter(contents.split())
应该用文字来代替...