|
import gradio as gr |
|
import model_wrapper |
|
|
|
|
|
model = model_wrapper.PredictionModel() |
|
|
|
|
|
def pretty_print_opinion(opinion_dict): |
|
res = [] |
|
maxlen = max([len(key) for key in opinion_dict.keys()]) + 2 |
|
maxlen = 0 |
|
for key, value in opinion_dict.items(): |
|
if key == 'Polarity': |
|
res.append(f'{(key + ":").ljust(maxlen)} {value}') |
|
else: |
|
res.append(f'{(key + ":").ljust(maxlen)} \'{" ".join(value[0])}\'') |
|
return '\n'.join(res) + '\n' |
|
|
|
|
|
def predict(text): |
|
print(f'Input message "{text}"') |
|
try: |
|
predictions = model.predict([text]) |
|
prediction = predictions[0] |
|
results = [] |
|
if not prediction['opinions']: |
|
return 'No opinions detected' |
|
for opinion in prediction['opinions']: |
|
results.append(pretty_print_opinion(opinion)) |
|
print(f'Successfully predicted SA for input message "{text}": {results}') |
|
return '\n'.join(results) |
|
except Exception as e: |
|
print(f'Error for input message "{text}": {e}') |
|
raise e |
|
|
|
|
|
|
|
markdown_text = ''' |
|
<h1>Structured Sentiment Analysis for Norwegian</h1> |
|
<p align="left"> |
|
This space provides a gradio demo of a <a href="https://huggingface.co/ltg/ssa-perin">pretrained model</a> for structured sentiment analysis (SSA) of Norwegian text, trained on the <a href="https://github.com/ltgoslo/norec_fine">NoReC_fine</a> dataset by the <a href"https://www.mn.uio.no/ifi/english/research/groups/ltg/">Language Technology Group</a> at the University of Oslo. It implements a method described in the paper <a href="https://aclanthology.org/2022.acl-short.51/">Direct parsing to sentiment graphs</a> by Samuel et al. 2022. |
|
<br> |
|
For a given sentence, the model will attempt to identify the following components if it is found to be sentiment-bearing: |
|
<ul> |
|
<li> <i>source expressions</i> (the opinion holder), </li> |
|
<li> <i>target expressions</i> (what the opinion is directed towards), </li> |
|
<li> <i>polar expressions</i> (the part of the text indicating that an opinion is expressed), </li> |
|
<li> and finally the <i>polarity</i> (positive or negative). </li> |
|
</ul> |
|
<br> |
|
To download the model and find more in-depth documentation, please see <a href="https://huggingface.co/ltg/ssa-perin">https://huggingface.co/ltg/ssa-perin</a> |
|
</p> |
|
''' |
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown(markdown_text) |
|
with gr.Row() as row: |
|
text_input = gr.Textbox(label="input") |
|
text_output = gr.Textbox(label="output") |
|
with gr.Row() as row: |
|
text_button = gr.Button("submit") |
|
|
|
text_button.click(fn=predict, inputs=text_input, outputs=text_output) |
|
|
|
|
|
demo.launch() |
|
|