使用Python但忽略停止词的文本中的词频

2024-10-01 13:36:33 发布

您现在位置:Python中文网/ 问答频道 /正文

这给了我一个文本中单词的频率:

 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)

这也给了我一些无用的词,比如“an”“a”

我的问题是,python中是否有一个停止词库可以删除所有这些常用词?我想在谷歌应用引擎上运行这个


Tags: in文本refor单词wordint频率
3条回答

我知道NLTK有一个包含语料库和许多语言的停止词的包,包括英语,更多信息请参见here。NLTK还有一个词频计数器,这是一个很好的自然语言处理模块,您应该考虑使用它。在

有一种简单的方法来处理这个问题,只需稍微修改一下您已经编写的代码(编辑以反映John的评论):

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),然后对其余条目进行排序。在

您可以下载各种格式的停止字列表作为文件,例如从here下载——Python需要做的就是读取文件(这些文件是csv格式的,很容易用csv模块读取),创建一个集合,并使用该集合中的成员身份(可能有一些规范化,例如小写)将单词从计数中排除。在

相关问题 更多 >