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

spaCy EntityRuler通过add_pipe添加后无法新增模式的问题

问题解决:spaCy EntityRuler 模式添加与管道集成问题

第一个场景:nlp.get_pipe 获取的 ruler 无 add_patterns 方法

你通过nlp.add_pipe("entity_ruler")添加并获取的ruler本身是有add_patterns()方法的,出现该问题大概率是以下原因:

  1. spaCy版本过低:EntityRuler的add_patterns方法在v2.3+才稳定支持,若你使用v2.0以下版本会存在API差异,建议升级到v3.x稳定版。
  2. 代码冗余导致的误判:你的add_rule_patterns函数里存在无效代码(比如单独定义的pattern = [...]未使用,循环打印时ref始终是最后一个迭代值),可能掩盖了实际报错信息,建议先简化函数再测试。

修正后的add_rule_patterns函数:

def add_rule_patterns(input_references):
    ref_patterns = []
    print("Adding new patterns")
    for ref in input_references.iloc[:,0]:
        ref_patterns.append({"label":"SYS", "pattern": {"TEXT": {"FUZZY": ref}}})
        print(f"Prepared pattern for: {ref}")
    
    return ref_patterns    

第二个场景:单独实例化的 EntityRuler 无法加入管道

直接实例化EntityRuler后,你遗漏了将其添加到nlp管道的步骤,导致模式无法在文本处理时生效。正确流程如下:

from spacy.pipeline import EntityRuler
import spacy

nlp = spacy.blank('fr')
nlp.add_pipe("ner")

# 实例化ruler并添加模式
ruler = EntityRuler(nlp, overwrite_ents=True)
patterns = add_rule_patterns(df_sys)
ruler.add_patterns(patterns)

# 关键步骤:将ruler加入nlp管道
nlp.add_pipe(ruler, before="ner")

完整可运行示例

import spacy
import pandas as pd

# 模拟输入数据
df_sys = pd.DataFrame(["SystemeA", "SystemeB", "SystemeC"], columns=["sys_names"])

def add_rule_patterns(input_references):
    ref_patterns = []
    for ref in input_references.iloc[:,0]:
        ref_patterns.append({"label":"SYS", "pattern": {"TEXT": {"FUZZY": ref}}})
    return ref_patterns

# 初始化nlp与管道
nlp = spacy.blank('fr')
nlp.add_pipe("ner")

config = {
   "phrase_matcher_attr": None,
   "validate": True,
   "overwrite_ents": True,
   "ent_id_sep": "||",
}
nlp.add_pipe("entity_ruler", before="ner", config=config)
ruler = nlp.get_pipe("entity_ruler")

# 添加模式并测试
patterns = add_rule_patterns(df_sys)
ruler.add_patterns(patterns)

doc = nlp("Je utilise SystemeA et SystemeX")
for ent in doc.ents:
    print(f"实体: {ent.text}, 标签: {ent.label_}")

额外注意事项

  • 避免重复调用ruler.add_patterns(patterns):你的原代码中add_rule_patterns内部调用了一次,外部又调用一次,会导致模式重复添加。
  • FUZZY匹配兼容性:v3.x版本支持该语法,默认编辑距离为2,若需调整可在FUZZY参数后指定(如{"FUZZY": [ref, 1]})。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:07:37