import gradio as gr from dataclasses import dataclass from pytorch_ie.annotations import LabeledSpan from pytorch_ie.auto import AutoPipeline from pytorch_ie.core import AnnotationList, annotation_field from pytorch_ie.documents import TextDocument from spacy import displacy @dataclass class ExampleDocument(TextDocument): entities: AnnotationList[LabeledSpan] = annotation_field(target="text") model_name_or_path = "pie/example-ner-spanclf-conll03" ner_pipeline = AutoPipeline.from_pretrained(model_name_or_path, device=-1, num_workers=0) def predict(text): document = ExampleDocument(text) ner_pipeline(document) doc = { "text": document.text, "ents": [{ "start": entity.start, "end": entity.end, "label": entity.label } for entity in sorted(document.entities.predictions, key=lambda e: e.start)], "title": None } html = displacy.render(doc, style="ent", page=True, manual=True, minify=True) html = ( "
" + html + "
" ) return html iface = gr.Interface( fn=predict, inputs=gr.inputs.Textbox( lines=5, default="There is still some uncertainty that Musk - also chief executive of electric car maker Tesla and rocket company SpaceX - will pull off his planned buyout.", ), outputs="html", ) iface.launch()