如何通过字典为spaCy命名实体识别手动添加自定义实体标签?
spaCy手动修正实体标签的实现方法
完全可以实现自定义实体标签的需求,常用两种方案,根据你的使用场景选择即可:
方案1:单次推理临时修正
仅针对当前处理的文本修改实体标注,适合单文本调整场景:
你可以直接修改spaCy Doc对象的ents属性,先移除原有错误标注,再添加自定义标签的实体即可,代码示例如下:
import spacy from spacy.tokens import Span nlp = spacy.load("en_core_web_sm") raw_text='''To determine the adulticidal and repellent activities of different solvent leafextracts of Rhinacanthus nasutus against Aedes aegypti and Culex quinquefasciatus.''' doc = nlp(raw_text) # 保留除错误标注外的原有实体 filtered_ents = [ent for ent in doc.ents if not (ent.text == "Aedes" and ent.label_ == "ORG")] # 查找Aedes的token位置,添加新实体 for idx, token in enumerate(doc): if token.text == "Aedes": custom_ent = Span(doc, idx, idx+1, label="PERSON") filtered_ents.append(custom_ent) break # 替换实体列表 doc.ents = filtered_ents # 输出验证 for ent in doc.ents: print(ent.text, ent.label_)
运行后输出结果中Aedes的标签会改为PERSON。
方案2:规则匹配永久生效
如果需要所有处理的文本都自动把Aedes标注为PERSON,可以使用spaCy的EntityRuler组件,把自定义规则加入管道,优先级高于默认NER模型,会自动覆盖原有标注结果,相当于用字典形式批量配置自定义实体映射,代码示例如下:
import spacy nlp = spacy.load("en_core_web_sm") # 新增实体规则匹配组件,优先级高于默认NER ruler = nlp.add_pipe("entity_ruler", before="ner") # 配置自定义实体规则,可批量添加多条 patterns = [ {"label": "PERSON", "pattern": "Aedes"} ] ruler.add_patterns(patterns) # 后续正常调用管道即可自动应用规则 raw_text='''To determine the adulticidal and repellent activities of different solvent leafextracts of Rhinacanthus nasutus against Aedes aegypti and Culex quinquefasciatus.''' doc = nlp(raw_text) for ent in doc.ents: print(ent.text, ent.label_)
内容的提问来源于stack exchange,提问作者Shruti
相关产品推荐
相关产品推荐

