|
import gradio as gr |
|
from tner import TransformersNER |
|
from spacy import displacy |
|
|
|
model = TransformersNER("tner/roberta-large-ontonotes5") |
|
|
|
|
|
examples = [ |
|
"Jacob Collier is a Grammy awarded artist from England.", |
|
"When Sebastian Thrun started working on self-driving cars at Google in 2007 , few people outside of the company took him seriously.", |
|
"But Google is starting from behind. The company made a late push into hardware, and Apple’s Siri, available on iPhones, and Amazon’s Alexa software, which runs on its Echo and Dot devices, have clear leads in consumer adoption." |
|
] |
|
|
|
|
|
def predict(text): |
|
output = model.predict([text]) |
|
tokens = output['input'][0] |
|
|
|
def retain_char_position(p): |
|
if p == 0: |
|
return 0 |
|
return len(' '.join(tokens[:p])) + 1 |
|
|
|
doc = { |
|
"text": text, |
|
"ents": [{ |
|
"start": retain_char_position(entity['position'][0]), |
|
"end": retain_char_position(entity['position'][-1]) + len(entity['entity'][-1]), |
|
"label": entity['type'] |
|
} for entity in output['entity_prediction'][0]], |
|
"title": None |
|
} |
|
|
|
html = displacy.render(doc, style="ent", page=True, manual=True, minify=True) |
|
html = ( |
|
"<div style='max-width:100%; max-height:360px; overflow:auto'>" |
|
+ html |
|
+ "</div>" |
|
) |
|
|
|
return html |
|
|
|
|
|
demo = gr.Interface( |
|
fn=predict, |
|
inputs=gr.inputs.Textbox( |
|
lines=5, |
|
placeholder="Input sentence...", |
|
), |
|
outputs="html", |
|
examples=examples |
|
) |
|
demo.launch() |
|
|