4

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

 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

4 回答 4

5

您可以将停用词列表下载为各种格式的文件,例如从这里下载——所有 Python 需要做的就是读取文件(这些是csv格式的,可​​以使用csv模块轻松读取),创建一个集合,并使用其中的成员资格设置(可能带有一些规范化,例如小写)以从计数中排除单词。

于 2010-07-04T03:25:20.887 回答
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为了提高效率,它已转换为 a),然后对剩余的条目进行排序。

于 2010-07-04T03:19:14.297 回答
2

我知道 NLTK 有一个包含语料库和多种语言(包括英语)的停用词的包,请参阅此处了解更多信息。NLTK 还有一个词频计数器,它是一个很好的自然语言处理模块,您应该考虑使用它。

于 2010-07-04T03:45:50.633 回答
0
stopwords = set(['an', 'a', 'the']) # etc...
finalFreq = sorted((k,v) for k,v in d.iteritems() if k not in stopwords,
                      key = operator.itemgetter(1), reverse=True)

这将过滤掉stopwords集合中的任何键。

于 2010-07-04T03:19:05.860 回答