2016-09-21 63 views
0

我试图用特定文本文件中最常见的50个单词创建列表,但是我想消除该列表中的停用词。我已经使用这个代码做了。从文本中消除停用词,同时不删除重复的常规词

from nltk.corpus import gutenberg 
carroll = nltk.Text(nltk.corpus.gutenberg.words('carroll-alice.txt')) 
carroll_list = FreqDist(carroll) 
stops = set(stopwords.words("english")) 
filtered_words = [word for word in carroll_list if word not in stops] 

但是,这是删除我想要的单词的重复。就像当我这样做:

fdist = FreqDist(filtered_words) 
fdist.most_common(50) 

我得到的输出:

[('right', 1), ('certain', 1), ('delighted', 1), ('adding', 1), 
('work', 1),  ('young', 1), ('Up', 1), ('soon', 1), ('use', 1),  
('submitted', 1), ('remedies', 1), ('tis', 1), ('uncomfortable', 1)....] 

跟它有每个单词的一个实例,显然这消除了重复。我想保留重复的内容,以便我可以看到哪个单词最常见。任何帮助将不胜感激。

+0

请发布[最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)。没有原始列表和其他支持项目,我们无法重现您的问题。看起来你只有一次过滤过的单词,而不是原始文本的全部频率。 – Prune

回答

1

正如你现在写的,list已经包含单词作为键和发生次数作为值分布:

>>> list 
FreqDist({u',': 1993, u"'": 1731, u'the': 1527, u'and': 802, u'.': 764, u'to': 725, u'a': 615, u'I': 543, u'it': 527, u'she': 509, ...}) 

然后遍历键这意味着每个字仅出现一次。我相信你真的想创建filtered_words这样的:

filtered_words = [word for word in carroll if word not in stops] 

此外,你应该尽量避免使用Python的搭配内建函数(list是一个Python内建函数)的变量名。