如何在 spaCy v3 中创建自定义 ner 组件

How to create custom ner components in spaCy v3

我正在尝试添加一个 entityRuler,但我一直收到此错误:[E002] 无法找到 'ruler' 的工厂以使用法语 (fr),我不知道如何创建自定义V3 的组件,我只找到了旧版本的示例,文档有点让我困惑。

pattern = [{"label": "ORG", "pattern": "Neoledge"}]
ruler.add_patterns(pattern)
nlp.add_pipe('ruler')
编辑:

@Language.component('rulerORG') 
def rulerORG(doc):     
    ORG = ["...",]     
    ruler= EntityRuler(nlp, overwrite_ents=True)     
    for O in ORG:        
        ruler.add_patterns([{"label": "ORG", "pattern": O}])     
        return doc    

nlp.add_pipe('rulerORG')

我猜您正在尝试创建 EntityRuler?如果是这样,您应该这样编写代码:

import spacy
nlp = spacy.blank("en")
pattern = [{"label": "ORG", "pattern": "Neoledge"}]
ruler = nlp.add_pipe('entity_ruler', config={"overwrite_ents":True})
ruler.add_patterns(pattern)

EntityRuler 和 NER 管道不同 - NER 是统计的,EntityRuler 是基于规则的。

组件添加到管道的方式在 v2 和 v3 之间发生了变化,看起来您有混合代码。

您可以在 this part of the docs 中查看我概述的方法示例。