【问题标题】:Eliminating stop words from a text, while NOT deleting duplicate regular words从文本中消除停用词,而不是删除重复的常规词
【发布时间】:2016-09-22 06:45:41
【问题描述】:

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

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

【问题讨论】:

  • 请发帖Minimal, complete, verifiable example。没有原始列表和其他支持项目,我们无法重现您的问题。您似乎每个过滤词只有一次,而不是原始文本的全部频率。

标签: python nltk


【解决方案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 内置函数)。

【讨论】:

    猜你喜欢
    • 2015-04-11
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 2017-06-21
    相关资源
    最近更新 更多