spaCy自定义分句规则报错[E966]:nlp.add_pipe使用问题求助
解决spaCy自定义分句规则的报错问题
spaCy 3.x版本起,nlp.add_pipe()要求传入已注册组件的字符串名称,不能直接传递函数,这是触发ValueError [E966]的原因。以下是修正后的实现方案:
修正后的完整代码
import spacy from spacy.language import Language # 加载预训练模型 nlp = spacy.load('en_core_web_sm') # 注册自定义分句组件 @Language.component("custom_boundaries") def set_custom_boundaries(doc): for token in doc[:-1]: if token.text == ";": doc[token.i + 1].is_sent_start = True return doc # 将组件插入流水线,位置在parser之前(确保自定义规则优先生效) nlp.add_pipe("custom_boundaries", before="parser") # 测试分句效果 doc2 = nlp(u'"Management is doing the right things; leadership is doing the right things." -Peter Drucker') for sent in doc2.sents: print(sent.text)
核心说明
- 用
@Language.component("组件名称")装饰自定义函数,完成组件注册,让spaCy能够识别并调用它 - 添加组件时传入注册的名称
"custom_boundaries",并指定before="parser"——因为spaCy的parser组件负责默认分句逻辑,我们需要在它执行前设置自定义分句标记,确保规则生效 - 运行后会输出两个分句:
"Management is doing the right things; leadership is doing the right things." -Peter Drucker
内容的提问来源于stack exchange,提问作者Seydou GORO
相关产品推荐
相关产品推荐

