Word中使用Python的文本频率,但忽略了停用词

时间:2010-07-04 03:06:56

标签: python google-app-engine frequency-analysis word-frequency

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

 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 个答案:

答案 0 :(得分:5)

您可以将停用词列表下载为各种格式的文件,例如:来自here - 所有Python需要做的就是读取文件(这些文件是csv格式,可以使用csv模块轻松阅读),制作一个文件,并使用成员资格设置(可能有一些规范化,例如小写)以从计数中排除单词。

答案 1 :(得分:3)

通过稍微修改您的代码(编辑以反映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),然后对其余条目进行排序

答案 2 :(得分:2)

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

答案 3 :(得分: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设置中的所有密钥。