使用Python计算文本中的词频,忽略停用词

4 投票
4 回答
5654 浏览
提问于 2025-04-16 00:47

这段代码可以让我知道文本中每个单词出现的频率:

 fullWords = re.findall(r'\w+', allText)

 d = defaultdict(int)

 for word in fullWords :
          d[word] += 1

 finalFreq = sorted(d.iteritems(), key = operator.itemgetter(1), reverse=True)

 self.response.out.write(finalFreq)

不过,它也会给我一些没用的单词,比如“the”、“an”、“a”等等。

我想问的是,Python里有没有可以去掉这些常见单词的工具库?我想在谷歌应用引擎上运行这个。

4 个回答

2

我知道NLTK有一个包,里面包含了很多语言的语料库和停用词,包括英语。想了解更多信息可以查看这里。NLTK还有一个单词频率计数器,这是一个很不错的自然语言处理模块,值得你考虑使用。

3

处理这个问题其实很简单,只需要稍微修改一下你现有的代码(根据约翰的评论进行了编辑):

stopWords = set(['a', 'an', 'the', ...])
fullWords = re.findall(r'\w+', allText)
d = defaultdict(int)
for word in fullWords:
    if word not in stopWords:
        d[word] += 1
finalFreq = sorted(d.iteritems(), key=lambda t: t[1], reverse=True)
self.response.out.write(finalFreq)

这个方法分两步来生成排序后的列表:第一步是把你想要过滤掉的“停用词”去掉(这些停用词已经被转换成了一个set,这样处理起来更高效),然后第二步是对剩下的内容进行排序。

5

你可以从不同的地方下载停用词列表,这些列表有各种格式,比如你可以从这里找到。Python只需要做的就是读取这个文件(这些文件是csv格式的,可以很方便地用csv模块来读取),然后把它们放进一个集合里,接着用这个集合来判断哪些词是停用词(可能还需要做一些处理,比如把字母变成小写),这样就可以在统计时排除这些词了。

撰写回答