我正在尝试在特定文本文件中创建一个包含最常见的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 :(得分: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内置函数)。