File size: 2,541 Bytes
6e9b9b9
70cda52
 
 
 
 
 
 
fee7a69
70cda52
3e8d135
 
 
 
 
 
 
 
 
70cda52
3e8d135
70cda52
3e8d135
 
 
70cda52
3e8d135
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70cda52
3e8d135
 
 
 
 
 
 
 
 
 
70cda52
3e8d135
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62

import gradio as gr
import spacy
from spacy.pipeline import EntityRuler
from spacy.language import Language
from spacy.matcher import PhraseMatcher
from spacy.tokens import Span

nlp = spacy.load("en_core_web_md")

def load(txt1, txt2, txt3, txt4):
    user_input = str(txt1.strip())
    doc1 = nlp(user_input)
    entities = [(ent.text, ent.label_) for ent in doc1.ents]
        
        
    pattern_list = []
    for i in txt2.strip().split():
        pattern_list.append(i)
    
    patterns = list(nlp.pipe(pattern_list))
    
    matcher = PhraseMatcher(nlp.vocab)
    user_named = str(txt3.strip()) 
    matcher.add(user_named, patterns)
    
    @Language.component("added_component")
    def component_function(doc):
        matches = matcher(doc)
        spans = [Span(doc, start, end, label=user_named) for match_id, start, end in matches]
        doc.ents = spans
        return doc

    if "added_component" not in nlp.pipe_names:
        nlp.add_pipe(("added_component"), after="ner")
    
    user_input4 = str(txt4.strip())
    apply_doc = nlp(user_input4)
    entities2 = [(ent.text, ent.label_) for ent in apply_doc.ents]
   
    from collections import Counter
    labels = [ent.label_ for ent in apply_doc.ents]
    lab_counts = Counter(labels)

    return(entities, entities2, lab_counts)
    
    
    
description = "Use this space to produce and test your own customized NER"


iface = gr.Interface(
    title = "Customized Named Entity Recognition",
    description = description,
    fn = load,
    inputs = [gr.inputs.Textbox(lines=10, default="The coronavirus disease 2019 (COVID-19) pandemic is the result of widespread infection with severe acute respiratory syndrome coronavirus 2 (SARS-CoV-2).", label="Text to Run through Entity Recognition"), gr.inputs.Textbox(lines=3, default= "Coronavirus, coronavirus, COVID-19, SARS-CoV-2, SARS‐CoV‐2", label="Enter entity references"), gr.inputs.Textbox(lines=1, default="COVID", label="Enter entity label"), gr.inputs.Textbox(lines=10, default="The tissue distribution of the virus-targeted receptor protein, angiotensin converting enzyme II (ACE2), determines which organs will be attacked by SARS‐CoV‐2.", label="Enter new sentence containing named entity")],
    outputs = [gr.outputs.Textbox(type="str", label="Entities recognized before"),
              gr.outputs.Textbox(type="str", label="Entites recognized after"), 
              gr.outputs.Textbox(type="str", label="Count of entities captured for new label")],
    theme = "dark"
)
iface.launch()