如何让SpaCy
将“cant”和“wont”等词设置为停用词?
例如,即使有了标记化,它也会将“can't”识别为停用词,而不是“cant”。
当它看到“cant”时,它去掉“ca”,但留下“nt”。这是设计好的吗?我猜“nt”实际上不是一个词。
下面是一个示例代码:
import spacy
from spacy.lang.en.stop_words import STOP_WORDS
nlp = spacy.load("en_core_web_sm")
text = "cant can't cannot"
doc = nlp(text)
for word in doc:
print(word,":",word.is_stop)
ca : True
nt : False
ca : True
n't : True
can : True
not : True
2条答案
按热度按时间hgqdbh6s1#
标记器将"cant"拆分为"ca"和"nt"。将"cant"添加到列表中不会产生任何效果,因为将不会匹配任何标记。相反,应该像示例(第3行代码)中那样添加"nt"。
另外,在加载模型之前更新停止词也很重要,否则不会选择更改。
示例:
5ktev3wc2#
正如Spacy文档中所述,标记器不能向文本添加或删除信息,因此您总是能够重构相同的输入文本(使用存储在
Token
中的空白信息),这也意味着如果文本包含拼写错误,它们将被保留。因此,在标记化过程中不会出现错误,因为Spacy将 * can 't * 或 * don 't * 这样的结构拆分为两个不同的标记:例如,“做”和“不做”。
如果拆分适合您的用例,则可以手动将 wo 和 nt 添加到停用词列表中。
如果出于某种原因,你需要对文本中的停用词做一些处理,你希望使用 wont 和 cant,而不是 wo,nt 和 ca,nt,你可以考虑通过检查尾部空格是否为空(意味着标记附加在原始文本中)来连接连续的停用词:
希望这对你有所帮助。你也可以实现自定义的Spacy组件,如果你需要添加特殊的标记化情况,请在这里检查。