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 - 自定义停用词不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 WordPress 可视化编辑器不起作用?

使用 spacy 添加/删除自定义停用词

即使停用词列表为空,如果包含停用词,全文搜索也不起作用

Dynamics 365 业务规则停用不起作用的原因

Dynamics 365 业务规则停用不起作用的原因

为啥我的自定义 cookiejar 不起作用?