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

1 投票
3 回答
798 浏览
提问于 2025-04-18 00:56

我在看其他关于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() 来根据空格把文本分开,但这样做不能把单词和标点符号分开。比如,wordword,word. 这些会被当成不同的计数,而用正则表达式就能解决这个问题。

0

contents 是一个字符串,而在Python中,字符串是可以逐个字符遍历的(也就是说,在这个情况下,字符串就像是一个字母的列表),所以你的计数器在数的是字母。

你需要给计数器传递一个单词的列表,而不是一个字母的字符串。

Joran的回答展示了如何使用 split() 来做到这一点。

3
Counter(contents.split())

应该用文字来代替...

撰写回答