Spaces:
Runtime error
Runtime error
File size: 5,408 Bytes
ba99ac9 4d544f0 ba99ac9 6862fa0 f2a57c9 6862fa0 c82c4d3 6862fa0 ba99ac9 4d544f0 ba99ac9 af1d567 ba99ac9 ff08140 543d322 ff08140 af1d567 ff08140 ba99ac9 543d322 ba99ac9 543d322 f3f70d0 ba99ac9 f3f70d0 ff08140 f3f70d0 13c6076 f2a57c9 f3f70d0 ba99ac9 f3f70d0 ba99ac9 f3f70d0 ba99ac9 13c6076 9f3b863 859d258 13c6076 9f3b863 13c6076 ba99ac9 ff08140 f3f70d0 f2a57c9 f3f70d0 ba9d20e cbfdb50 af1d567 ba9d20e f3f70d0 ba99ac9 f3f70d0 |
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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
import sentencepiece
import streamlit as st
import pandas as pd
import spacy
import roner
example_list = [
"George merge cu trenul Cluj - Timișoara de ora 6:20.",
"Președintele Statelor Unite, Joe Biden, a spus, vineri, că va trimite un număr de militari americani în Europa de Est „în curând”, ca urmare a situației tot mai tensionate din Ucraina. Președintele american a spus că „nu va trimite foarte mult” și a exclus din nou posibilitatea desfășurării de trupe în Ucraina, care nu face parte din Alianța Nord-Atlantică.",
"Deficitul bugetar a crescut semnificativ în ultima lună a anului trecut, cu 24,02 miliarde de lei, după ce, în noiembrie, Finanţele raportau un sold negativ de 4,7% din PIB, respectiv 55,98 miliarde de lei. Pe de altă parte, faţă de 2020, deficitul bugetar a consemnat o scădere importantă, de la 9,61% din PIB, respectiv 101,8 miliarde de lei.",
"Din anul 2050, doar 10 din cele 21 de locații care au găzduit Jocurile Olimpice de iarnă din 1924 și până în prezent vor avea zăpada naturală.",
"Al Doilea Război Mondial a fost un război global care a durat între anii 1939 - 1945.",
]
st.set_page_config(layout="wide")
st.title("Demo for Romanian NER")
model_list = ['dumitrescustefan/bert-base-romanian-ner']
st.sidebar.header("Select NER Model")
model_checkpoint = st.sidebar.radio("", model_list)
st.sidebar.header("Select type of PERSON detection")
named_persons_only_radio = st.sidebar.radio("", ('Proper nouns only', 'All nouns'))
st.sidebar.write("This demo is based on RoNER: 'https://github.com/dumitrescustefan/roner'")
st.sidebar.write("")
st.sidebar.write("The NER corpus used is: 'https://github.com/dumitrescustefan/ronec'")
st.sidebar.write("Types of entities detected: 'PERSON', 'ORG', 'GPE', 'LOC', 'NAT_REL_POL', 'EVENT', 'LANGUAGE', 'WORK_OF_ART', 'DATETIME', 'PERIOD', 'MONEY', 'QUANTITY', 'NUMERIC', 'ORDINAL', 'FACILITY'")
st.subheader("Select Text Input Method")
input_method = st.radio("", ('Select from Examples', 'Write or Paste New Text'))
if input_method == 'Select from Examples':
selected_text = st.selectbox('Select Text from List', example_list, index=0, key=1)
st.subheader("Text to Run")
input_text = st.text_area("Selected Text", selected_text, height=128, max_chars=None, key=2)
elif input_method == "Write or Paste New Text":
st.subheader("Text to Run")
input_text = st.text_area('Write or Paste Text Below', value="", height=128, max_chars=None, key=2)
@st.cache(allow_output_mutation=True)
def setModel(named_persons_only):
ner = roner.NER(named_persons_only=named_persons_only)
return ner
@st.cache(allow_output_mutation=True)
def get_html(html: str):
WRAPPER = """<div style="overflow-x: auto; border: 1px solid #e6e9ef; border-radius: 0.25rem; padding: 1rem; margin-bottom: 2.5rem">{}</div>"""
html = html.replace("\n", " ")
return WRAPPER.format(html)
Run_Button = st.button("Run", key=None)
if Run_Button == True:
ner = setModel(named_persons_only = True if named_persons_only_radio.startswith("Proper") else False)
output = ner(input_text)[0] # only one sentence
# tabular form
data = []
for word in output["words"]:
if word["tag"]!="O":
data.append({
"word": word["text"],
"entity": word["tag"],
"start_char": word["start_char"],
"end_char": word["end_char"],
"multi_word_entity (cont.)": word["multi_word_entity"]
})
df = pd.DataFrame.from_dict(data)
st.subheader("Recognized Entities")
st.dataframe(df)
st.subheader("Spacy Style Display")
spacy_display = {}
spacy_display["ents"] = []
spacy_display["text"] = output["text"]
spacy_display["title"] = None
i = 0
words = output["words"]
while i < len(words):
if words[i]["tag"]!="O":
start = words[i]["start_char"]
end = words[i]["end_char"]
label = words[i]["tag"]
for j in range(i+1,len(words)):
if words[j]["tag"] == words[i]["tag"] and words[j]["multi_word_entity"] is True:
end = words[j]["end_char"]
i = j
else:
break
spacy_display["ents"].append({"start": start, "end": end, "label": label})
#print(f"ADD ENTITY: {spacy_display['ents'][-1]}")
i += 1
entity_list = ['PERSON', 'ORG', 'GPE', 'LOC', 'NAT_REL_POL',
'EVENT', 'LANGUAGE', 'WORK_OF_ART', 'DATETIME',
'PERIOD', 'MONEY', 'QUANTITY', 'NUMERIC',
'ORDINAL', 'FACILITY']
colors = {
'PERSON': '#E08989',
'ORG': '#8477AC',
'GPE': '#4C89AA',
'LOC': '#34ABF8',
'NAT_REL_POL': '#FADAD9',
'EVENT': '#98654C',
'LANGUAGE': '#F29E4C',
'WORK_OF_ART': '#3ADAD9',
'DATETIME': '#0DB39E',
'PERIOD': '#83E377',
'MONEY': '#16DB93',
'QUANTITY': '#EFEA5A',
'NUMERIC': '#B9E769',
'ORDINAL': '#F1C453',
'FACILITY': '#E0DADA',
}
html = spacy.displacy.render(spacy_display, style="ent", minify=True, manual=True, options={"ents": entity_list, "colors": colors})
style = "<style>mark.entity { display: inline-block }</style>"
st.write(f"{style}{get_html(html)}", unsafe_allow_html=True) |