You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将cant、wont添加为SpaCy停用词并解决分词异常问题

解决SpaCy中cant/wont类词的停用词设置问题

为什么"cant"会被拆分为"ca"和"nt"

这是因为SpaCy的英文分词器基于标准英语拼写训练,"cant"不属于规范的缩写形式(正确写法是带撇号的can't),所以分词器无法将其识别为完整词汇单元,进而拆分出无意义的子串。这是分词阶段的行为,并非停用词逻辑的设计问题。

如何将cant/wont设为停用词

需要分两步处理:先让分词器将这类词识别为单个token,再将其加入停用词列表。

步骤1:添加自定义分词规则

使用Tokenizer.add_special_case方法,指定"cant"、"wont"等词的分词规则,强制分词器将它们作为单个token保留。

步骤2:添加到停用词集合

直接将目标词添加到STOP_WORDS集合中,SpaCy会自动识别这些词为停用词。

修改后的示例代码

import spacy
from spacy.lang.en.stop_words import STOP_WORDS
from spacy.symbols import ORTH

nlp = spacy.load("en_core_web_sm")

# 添加自定义分词规则,避免cant/wont被拆分
special_cases = {
    "cant": [{ORTH: "cant"}],
    "wont": [{ORTH: "wont"}]
}
for word, rule in special_cases.items():
    nlp.tokenizer.add_special_case(word, rule)

# 将cant/wont添加到停用词集合
STOP_WORDS.add("cant")
STOP_WORDS.add("wont")

text = "cant can't cannot wont won't will not"
doc = nlp(text)

for word in doc:
    print(word, ":", word.is_stop)

运行结果

cant : True
ca : True
n't : True
can : True
not : True
wont : True
wo : True
n't : True
will : True
not : True

内容的提问来源于stack exchange,提问作者jmich738

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 04:15:37