Spaces:
Running
Running
Update example for Flar 0.12.2
Browse files
app.py
CHANGED
|
@@ -11,6 +11,7 @@ st.set_page_config(layout="centered")
|
|
| 11 |
model_map = {
|
| 12 |
"find Entities (default)": "ner-large",
|
| 13 |
"find Entities (18-class)": "ner-ontonotes-large",
|
|
|
|
| 14 |
"find Parts-of-Speech": "pos-multi",
|
| 15 |
}
|
| 16 |
|
|
@@ -25,7 +26,7 @@ selected_model_id = st.selectbox("This is a check box",
|
|
| 25 |
st.subheader("Input your text here")
|
| 26 |
input_text = st.text_area('Write or Paste Text Below',
|
| 27 |
value='May visited the Eiffel Tower in Paris last May.\n\n'
|
| 28 |
-
'There she
|
| 29 |
height=128,
|
| 30 |
max_chars=None,
|
| 31 |
label_visibility="collapsed")
|
|
@@ -36,6 +37,16 @@ def get_model(model_name):
|
|
| 36 |
return SequenceTagger.load(model_map[model_name])
|
| 37 |
|
| 38 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
def get_html(html: str):
|
| 40 |
WRAPPER = """<div style="overflow-x: auto; border: 1px solid #e6e9ef; border-radius: 0.25rem; padding: 1rem; margin-bottom: 2.5rem">{}</div>"""
|
| 41 |
html = html.replace("\n", " ")
|
|
@@ -60,6 +71,9 @@ button_clicked = st.button("**Click here** to tag the input text", key=None)
|
|
| 60 |
|
| 61 |
if button_clicked:
|
| 62 |
|
|
|
|
|
|
|
|
|
|
| 63 |
# get a sentence splitter and split text into sentences
|
| 64 |
splitter = SegtokSentenceSplitter()
|
| 65 |
sentences = splitter.split(input_text)
|
|
@@ -73,11 +87,20 @@ if button_clicked:
|
|
| 73 |
predicted_labels = set()
|
| 74 |
for sentence in sentences:
|
| 75 |
for prediction in sentence.get_labels():
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 81 |
|
| 82 |
# create colors for each label
|
| 83 |
colors = {}
|
|
@@ -94,5 +117,5 @@ if button_clicked:
|
|
| 94 |
},
|
| 95 |
)
|
| 96 |
style = "<style>mark.entity { display: inline-block }</style>"
|
| 97 |
-
st.subheader("
|
| 98 |
st.write(f"{style}{get_html(html)}", unsafe_allow_html=True)
|
|
|
|
| 11 |
model_map = {
|
| 12 |
"find Entities (default)": "ner-large",
|
| 13 |
"find Entities (18-class)": "ner-ontonotes-large",
|
| 14 |
+
"find Frames": "frame-large",
|
| 15 |
"find Parts-of-Speech": "pos-multi",
|
| 16 |
}
|
| 17 |
|
|
|
|
| 26 |
st.subheader("Input your text here")
|
| 27 |
input_text = st.text_area('Write or Paste Text Below',
|
| 28 |
value='May visited the Eiffel Tower in Paris last May.\n\n'
|
| 29 |
+
'There she ran across a sign in German that read: "Dirk liebt den Eiffelturm"',
|
| 30 |
height=128,
|
| 31 |
max_chars=None,
|
| 32 |
label_visibility="collapsed")
|
|
|
|
| 37 |
return SequenceTagger.load(model_map[model_name])
|
| 38 |
|
| 39 |
|
| 40 |
+
@st.cache(allow_output_mutation=True)
|
| 41 |
+
def get_frame_definitions():
|
| 42 |
+
frame_definition_map = {}
|
| 43 |
+
with open('propbank_frames_3.1.txt') as infile:
|
| 44 |
+
for line in infile:
|
| 45 |
+
frame_definition_map[line.split('\t')[0]] = line.split('\t')[1]
|
| 46 |
+
|
| 47 |
+
return frame_definition_map
|
| 48 |
+
|
| 49 |
+
|
| 50 |
def get_html(html: str):
|
| 51 |
WRAPPER = """<div style="overflow-x: auto; border: 1px solid #e6e9ef; border-radius: 0.25rem; padding: 1rem; margin-bottom: 2.5rem">{}</div>"""
|
| 52 |
html = html.replace("\n", " ")
|
|
|
|
| 71 |
|
| 72 |
if button_clicked:
|
| 73 |
|
| 74 |
+
if 'frame' in selected_model_id.lower():
|
| 75 |
+
frame_definition_map = get_frame_definitions()
|
| 76 |
+
|
| 77 |
# get a sentence splitter and split text into sentences
|
| 78 |
splitter = SegtokSentenceSplitter()
|
| 79 |
sentences = splitter.split(input_text)
|
|
|
|
| 87 |
predicted_labels = set()
|
| 88 |
for sentence in sentences:
|
| 89 |
for prediction in sentence.get_labels():
|
| 90 |
+
entity_fields = {
|
| 91 |
+
"start": prediction.data_point.start_position + sentence.start_position,
|
| 92 |
+
"end": prediction.data_point.end_position + sentence.start_position,
|
| 93 |
+
"label": prediction.value,
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
if 'frame' in selected_model_id.lower():
|
| 97 |
+
id = prediction.value.split('.')[-1]
|
| 98 |
+
verb = ''.join(prediction.value.split('.')[:-1])
|
| 99 |
+
kb_url = f"https://propbank.github.io/v3.4.0/frames/{verb}.html#{verb}.{id}"
|
| 100 |
+
entity_fields["label"] = f'<a style="text-decoration: underline; text-decoration-style: dotted; color: inherit; font-weight: bold" href="{kb_url}">{prediction.value}</a>'
|
| 101 |
+
|
| 102 |
+
spacy_display["ents"].append(entity_fields)
|
| 103 |
+
predicted_labels.add(entity_fields["label"])
|
| 104 |
|
| 105 |
# create colors for each label
|
| 106 |
colors = {}
|
|
|
|
| 117 |
},
|
| 118 |
)
|
| 119 |
style = "<style>mark.entity { display: inline-block }</style>"
|
| 120 |
+
st.subheader("Tagged text")
|
| 121 |
st.write(f"{style}{get_html(html)}", unsafe_allow_html=True)
|