如何将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
相关产品推荐
相关产品推荐

