这是我的问题:
我希望在可能的情况下将自定义的entity_ruler标签与spacy的标准统计实体标签集成。我认为(但不确定)在所有情况下,除了完全重叠之外,两个标签都应该出现。
希望是,自定义标尺标签与给定跨度的统计标签精确重叠时,entity_ruler标签将覆盖统计标签,否则所有标准统计标签也将出现。
现在,解析器仅返回entity_ruler标签(和关联的令牌)或统计标签(和关联的令牌),而不是两者的组合。
我已经尝试插入“ enter_ruler”,它们分别为before =“ ner”和after =“ ner”,并带有overwrite = True和overwrite = False。我什至尝试在管道中的其他位置(例如在解析器,标记器等之前)插入entity_ruler。
这是该指令执行此操作的方式,据我所知(尽管我尝试了我能想到的所有其他可能的变化,但没有其他效果):
from spacy.pipeline import EntityRuler
import en_core_web_lg
nlp = spacy.load("en_core_web_lg")
ruler = EntityRuler(nlp)
patterns = [
{"label": "CEO", "pattern": "John Doe0"},
{"label": "COO", "pattern": "John Doe1"},
{"label": "INVESTOR", "pattern": "John Doe2"},
{"label": "CURRENTCO", "pattern": "Newco0"},
{"label": "PASTCO", "pattern": "Newco1"},
]
ruler.add_patterns(patterns)
nlp.add_pipe(ruler, before="ner")
print(nlp.pipe_names)
ruler.to_disk("/home/user/anaconda3/envs/SPACY/lib/python3.7/site- packages/spacy/patterns.jsonl")
ruler = EntityRuler(nlp).from_disk("/home/km/anaconda3/envs/SPACY/lib/python3.7/site-packages/spacy/patterns.jsonl")
text = open(u'/home/user/anaconda3/envs/SPACY/RAW_DATA/snippet.csv').read()
doc = nlp(text)
for ent in doc.ents:
print(ent.text, ent.start_char, ent.end_char, ent.label_)
返回:
John Doe0 0 12首席执行官
John Doe1 130 142 COO
Newco0 169175 CURRENTCO
John Doe1 2997 3012投资者