Spacy - 自定义停用词不起作用
Posted
技术标签:
【中文标题】Spacy - 自定义停用词不起作用【英文标题】:Spacy - custom stop words are not working 【发布时间】:2019-03-13 12:49:59 【问题描述】:我正在尝试将自定义 STOP_WORDS 添加到 spacy。 以下代码应将自定义 STOP_WORD“Bestellung”添加到标准 STOP_WORDS 集中。 我遇到的问题是,添加有效,即该集合在添加后包含“Bestellung”,但在使用 .is_stop 测试自定义停用词“Bestellung”时,python 返回 FALSE。
另一个具有默认 STOP_WORD 的测试(即它是 STOP_WORDS 中的标准)“darunter”返回 TRUE。我不明白,因为“Bestellung”和“darunter”这两个词都在同一组 STOP_WORDS 中。
有人知道它为什么会这样吗?
谢谢
import spacy
from spacy.lang.de.stop_words import STOP_WORDS
STOP_WORDS.add("Bestellung")
print(STOP_WORDS) #Printing STOP_WORDS proofs, that "Bestellung" is part of the Set "STOP_WORDS". Both tested words "darunter" and "Bestellung" are part of it.
nlp=spacy.load("de_core_news_sm")
print(nlp.vocab["Bestellung"].is_stop) # return: FALSE
print(nlp.vocab["darunter"].is_stop) # return: TRUE
谢谢
【问题讨论】:
【参考方案1】:这与以前的 spaCy 模型中的错误有关。在最新的 spaCy 中运行良好。 英文模型示例:
>>> import spacy
>>> nlp = spacy.load('en')
>>> from spacy.lang.en.stop_words import STOP_WORDS
>>> STOP_WORDS.add("Bestellung")
>>> print(nlp.vocab["Bestellung"].is_stop)
True
如果您想在现有 spaCy 上解决此问题,可以使用此解决方法,它会更改 STOP_WORDS 中存在的单词的 is_stop 属性。
nlp.vocab.add_flag(lambda s: s.lower() in spacy.lang.en.stop_words.STOP_WORDS, spacy.attrs.IS_STOP)
Github 上的 spaCy issue 中提到了这一点
【讨论】:
亲爱的 DhruPathak,这没有成功。但是 nlp.vocab[„String“].is_stop=true 效果很好。我将它与我的自定义停用词列表的 for 循环结合使用。谢谢以上是关于Spacy - 自定义停用词不起作用的主要内容,如果未能解决你的问题,请参考以下文章