这给了我一个文字中的单词频率:
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中是否有一个停用词库可以删除所有这些常用词?我想在谷歌应用引擎上运行这个
答案 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
设置中的所有密钥。