Python返回字母频率的词频分析

时间:2014-04-01 21:58:56

标签: python

关于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)]

我想要的输出是实际的单词,同时还有一组被忽略的单词,如空白字符和引号。

3 个答案:

答案 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()拆分空格上的文字,但不会将单词与标点符号分开。您还将使用正则表达式修复wordword,以及word.等单独计数。