python–NLTK停用词删除问题

python–NLTK停用词删除问题,第1张

概述我正在尝试做一个document classification, as described in NLTK Chapter 6,而我在删除用词时遇到了麻烦.当我添加all_words = (w for w in all_words if w not in nltk.corpus.stopwords.words('english')) 它返回Tracebac

我正在尝试做一个document classification,as described in NLTK Chapter 6,而我在删除停用词时遇到了麻烦.当我添加

all_words = (w for w in all_words if w not in nltk.corpus.stopwords.words('english'))

它返回

Traceback (most recent call last):  file "fiction.py",line 8,in 

我猜测停用词代码改变了用于’all_words’的对象类型,使得它们.key()函数无用.如何在使用键功能之前删除停用词而不更改其类型?完整代码如下:

import nltk from nltk.corpus import PlaintextCorpusReadercorpus_root = './nltk_data/corpora/fiction'fiction = PlaintextCorpusReader(corpus_root,'.*')all_words=nltk.Freqdist(w.lower() for w in fiction.words())all_words = (w for w in all_words if w not in nltk.corpus.stopwords.words('english'))word_features = all_words.keys()[:100]def document_features(document): # [_document-classify-extractor]    document_words = set(document) # [_document-classify-set]    features = {}    for word in word_features:        features['contains(%s)' % word] = (word in document_words)    return featuresprint document_features(fiction.words('fic/11.txt'))
最佳答案我会通过避免首先将它们添加到Freqdist实例来实现这一点:

all_words=nltk.Freqdist(w.lower() for w in fiction.words() if w.lower() not in nltk.corpus.stopwords.words('english'))

根据你的语料库的大小,我认为你可能会在创建一个停用词集之前获得性能提升:

stopword_set = froZenset(ntlk.corpus.stopwords.words('english'))

如果这不适合您的情况,看起来您可以利用Freqdist继承自dict的事实:

for stopword in nltk.corpus.stopwords.words('english'):    if stopword in all_words:        del all_words[stopword]
总结

以上是内存溢出为你收集整理的python – NLTK停用词删除问题全部内容,希望文章能够帮你解决python – NLTK停用词删除问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1205194.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)