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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:05:29