使用spacy添加/删除停用词

E.K*_*.K. 34 python nlp stop-words spacy

使用spacy添加/删除停用词的最佳方法是什么?我正在使用token.is_stop函数,并希望对集合进行一些自定义更改.我正在查看文档,但找不到关于停用词的任何内容.谢谢!

Rom*_*ain 29

使用Spacy 2.0.11,您可以使用以下方法之一更新其停用词集:

要添加单个停用词:

import spacy    
nlp = spacy.load("en")
nlp.Defaults.stop_words.add("my_new_stopword")
Run Code Online (Sandbox Code Playgroud)

要一次添加几个停用词:

import spacy    
nlp = spacy.load("en")
nlp.Defaults.stop_words |= {"my_new_stopword1","my_new_stopword2",}
Run Code Online (Sandbox Code Playgroud)

删除单个停用词:

import spacy    
nlp = spacy.load("en")
nlp.Defaults.stop_words.remove("whatever")
Run Code Online (Sandbox Code Playgroud)

要一次删除几个停用词:

import spacy    
nlp = spacy.load("en")
nlp.Defaults.stop_words -= {"whatever", "whenever"}
Run Code Online (Sandbox Code Playgroud)

注意:要查看当前的一组停用词,请使用:

print(nlp.Defaults.stop_words)
Run Code Online (Sandbox Code Playgroud)

  • @AustinT获得两组联合是语法糖,`a | = b`等同于'a = a.union(b)`.类似地,运算符` - =`允许执行设定差异.大括号语法允许以简单的方式创建集合,`a = {1,2,3}`等同于'a = set(1,2,3)`. (6认同)
  • 这实际上并不影响模型。 (2认同)
  • 我的意思是,它实际上似乎也不影响当前的执行。(也许我正在运行一些不正常的东西。)另一种方法似乎是万无一失的。 (2认同)
  • 我同意@fny。虽然这会将停用词添加到 nlp.Defaults.stop_word,但如果您使用 token.is_stop 检查该单词,您仍然会得到 False。 (2认同)

dan*_*ton 27

您可以在处理文本之前编辑它们(请参阅此文章):

>>> import spacy
>>> nlp = spacy.load("en")
>>> nlp.vocab["the"].is_stop = False
>>> nlp.vocab["definitelynotastopword"].is_stop = True
>>> sentence = nlp("the word is definitelynotastopword")
>>> sentence[0].is_stop
False
>>> sentence[3].is_stop
True
Run Code Online (Sandbox Code Playgroud)

注意:这似乎有效<= v1.8.对于较新的版本,请参阅其他答案.


pet*_*ich 11

对于2.0版,我使用了这个:

from spacy.lang.en.stop_words import STOP_WORDS

print(STOP_WORDS) # <- set of Spacy's default stop words

STOP_WORDS.add("your_additional_stop_word_here")

for word in STOP_WORDS:
    lexeme = nlp.vocab[word]
    lexeme.is_stop = True
Run Code Online (Sandbox Code Playgroud)

这会将所有停用词加载到一个集合中.

您可以首先修改您的停用词STOP_WORDS或使用您自己的列表.

  • 用版本2.0做了那个并得到了"ImportError:没有名为en.stop_words的模块"......建议? (3认同)
  • `spacy.lang.en.stop_words`也给出错误。 (2认同)

har*_*orn 5

对于 2.0,请使用以下内容:

for word in nlp.Defaults.stop_words:
    lex = nlp.vocab[word]
    lex.is_stop = True
Run Code Online (Sandbox Code Playgroud)

  • 您正在展示如何根据[此错误/解决方法](https://archive.is/HI5ZQ#selection-1231.0-1263.4)修复损坏的模型。虽然很容易根据 OP 需求进行调整,但您可以扩展为什么要这样编写代码:由于错误,目前需要它,但这是一个多余的步骤,因为“les.is_stop”应该已经是无错误的未来中的“真”。 (2认同)