#python #spacy #named-entity-recognition #spacy-3
Вопрос:
Я новичок в spaCy и Python и хочу визуализировать NER с помощью этой библиотеки. Это примерный пример, который я нашел:
import spacy
from spacy import displacy
NER = spacy.load("en_core_web_sm")
raw_text="The Indian Space Research Organisation or is the national space agency of India, headquartered in Bengaluru. It operates under Department of Space which is directly overseen by the Prime Minister of India while Chairman of ISRO acts as executive of DOS as well."
text1= NER(raw_text)
displacy.render(text1,style="ent",jupyter=True)
Тем не менее, у меня уже есть список настраиваемых тегов и их позиций:
[812, 834, "POS"], [838, 853, "ORG"], [870, 888, "POS"], [892, 920, "ORG"], [925, 929, "ENGLEVEL"], [987, 1002, "SKILL"],...
Я хочу, чтобы мой текст визуализировался с помощью моих собственных настраиваемых тегов и сущностей, а не параметров spaCy по умолчанию. Как я могу этого достичь?
Ответ №1:
Вам нужно будет добавить промежутки символов, обозначающие сущности, и прикрепить их к вашему объекту doc. Что-то вроде этого:
import spacy
from spacy import displacy
nlp = spacy.blank('en')
raw_text = "The Indian Space Research Organisation or is the national space agency of India, headquartered in Bengaluru. It operates under Department of Space which is directly overseen by the Prime Minister of India while Chairman of ISRO acts as executive of DOS as well."
doc = nlp.make_doc(raw_text)
spans = [[812, 834, "POS"], [838, 853, "ORG"], [870, 888, "POS"], [892, 920, "ORG"], [925, 929, "ENGLEVEL"],
[987, 1002, "SKILL"]]
ents = []
for span_start, span_end, label in spans:
ent = doc.char_span(span_start, span_end, label=label)
if ent is None:
continue
ents.append(ent)
doc.ents = ents
displacy.render(doc, style="ent", jupyter=True)
Измените свое raw_text
и spans
соответственно. Если вы даете промежуток, который начинается или заканчивается за пределами длины вашего текста doc.char_span()
, возвращается None
, поэтому вам нужно обработать это соответствующим образом.