消除文本中的停用词,同时不删除重复的常规词

时间:2016-09-21 21:45:25

标签: python nltk

我正在尝试在特定文本文件中创建一个包含最常见的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)....]

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

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内置函数)。