【问题标题】:What is the right way to use NLTK stopwords?使用 NLTK 停用词的正确方法是什么?
【发布时间】:2016-11-08 16:14:45
【问题描述】:

我正在处理一个词袋项目,我想从 NLTK 停用词列表中删除停用词。目前,我正在这样做:

words.difference_update(set(stopwords.words("english")))

(words 是包含语料库中所有单词的集合)

但是,当我查看stopwords.words("english") 的内容时,我看到了诸如“couldn”和“doesn”之类的词。我假设这些是诸如“couldn't”和“doesn't”之类的词的词前缀,也许还有其他词。

所以,我假设有一种方法可以检查一个单词是否在停用词列表中,它比纯字符串相等更复杂,但我无法弄清楚它是什么。任何帮助表示赞赏。

【问题讨论】:

  • 您也可以下载整个语料库here 并在闲暇时阅读/修改。这个question 也介绍了如何修改 NLTK 列表。

标签: python nltk stop-words


【解决方案1】:

没有正确的方法来使用停用词。这取决于你想完成什么任务。但是,根据您提供的信息,NLTK 似乎假设您正在通过空格和标点符号拆分文档。但是,我可以猜测停用词列表中还会包含could 和does 等词。我的方法是使用 NLTK 的 tokenize 包首先创建语料库的令牌,然后运行您的 difference_update:

words = set(nltk.word_tokenize(document))

请注意,根据标记化模型,该函数可以将couldn't 等否定词拆分为['could',"n't"]。因此,如果停用词列表不包含 n't 字符串,您也必须将其从您的集合中删除。

我做的另一个假设是你的语料库只包含小写单词。

希望有帮助!

【讨论】:

  • 你如何检测一个标记是否是一个单词的后半部分(除了循环遍历空间分割的单词和标记并进行比较)。
  • 对不起,我明白你的意思了。通过使用标记化,我得到了停用词列表所期望的标记。
猜你喜欢
  • 2021-07-26
  • 1970-01-01
  • 2021-11-24
  • 2021-09-23
  • 2017-04-07
  • 2013-01-09
  • 2013-03-19
  • 2019-05-11
  • 2018-02-17
相关资源
最近更新 更多