Добавление функций в визуализатор Spacy NER

#python #nlp #spacy #named-entity-recognition #visualizer

Вопрос:

Я использую Spacy для визуализации NERs в блокноте следующим образом:

 import spacy
from spacy import displacy

text = "When Sebastian Thrun started working on self-driving cars at Google in 2007, few people outside of the company took him seriously."

nlp = spacy.load("en_core_web_sm")
doc = nlp(text)
displacy.render(doc, style="ent")
 

(Это пример в документации spacy)

Результат: введите описание изображения здесь

Пока все хорошо.

Вопрос в том, можно ли получить доступ к самому HTML-объекту, а не просто к его визуализации, чтобы добавить к нему функциональность с помощью HTML. Точнее, то, что я ищу, — это способ запуска функции при нажатии каждой из этих «кнопок». эта работа, которую я ищу, предназначена для работы в концентраторе jupyter, то есть в лаборатории Jupyter, поэтому решения, использующие любой веб-фрейм, такой как streamlit или flask, или что-то еще, что может быть запущено на локальном сервере, выходят за рамки.

Спасибо.

ПРАВКА 1: Если вы используете следующий код в лаборатории Jupyter, вы можете получить простой HTML:

 displacy.render(doc, style="ent", jupyter'False'))
 

вы бы получили:

 '<div class="entities" style="line-height: 2.5; direction: ltr">When n<mark class="entity" style="background: ....... etc....</div>'
 

Идея заключается в преобразовании кнопок:

введите описание изображения здесь

…в кликабельные кнопки.

Я предполагаю, что путь состоит в том, чтобы проанализировать кнопку добавления HTML и сделать «что-то» с помощью ipywidgets jslink или около того.

Ответ №1:

Вы можете использовать ipywidgets:

 from ipywidgets import interact_manual
  
@interact_manual  
def html():
    path="file_name.html"
    Html_file= open(path,"w")
    Html_file.write(displacy.render(doc, style="ent"))
    Html_file.close()
 

Это сохранит вывод в виде файла html при нажатии кнопки.

Комментарии:

1. Спасибо @NicolasPeruchot, но я имел в виду кое-что другое. Я хотел бы преобразовать любую из пометок NER в отображаемом тексте в кнопку.