Spaces:
Sleeping
Sleeping
import streamlit as st | |
from streamlit.logger import get_logger | |
import pandas as pd | |
from transformers import pipeline | |
from setfit import AbsaModel | |
import translators as ts | |
from config import base_model, senti_map, absa_model, senti_color | |
from annotated_text import annotated_text | |
LOGGER = get_logger(__name__) | |
#ts.preaccelerate_and_speedtest() | |
senti_task = pipeline("sentiment-analysis", model=base_model, tokenizer=base_model) | |
absa = AbsaModel.from_pretrained(absa_model[0], absa_model[1]) | |
def run(): | |
st.write('Copy and paste comment into below text box.') | |
txt = st.text_area('customer review') | |
if len(txt.strip()) > 0: | |
lang = st.selectbox('pick output language', ['en', 'hi', 'zh'], index=0) | |
with st.spinner(f'translate to {lang}'): | |
txt_en = ts.translate_text(txt, to_language=lang, translator='google') | |
with st.spinner('working on comment sentiment, please wait...'): | |
sentiment = senti_task(txt_en) | |
st.write(f"it's {senti_map[sentiment[0]['label']]} feedback with a confidence of {sentiment[0]['score']:.1%}") | |
with st.spinner('detecting aspect sentiment...'): | |
preds = absa(txt_en) | |
st.write(f"the comment talks about: {','.join([t['span'] for t in preds])}, detailed sentiments as follow:") | |
#st.write(f'Customer says: {txt_en}') | |
preds = {p['span']: p['polarity'] for p in preds} | |
annotated_text( | |
[(t + ' ', preds[t], senti_color[preds[t]]) if t in preds else t+' ' for t in txt_en.split(' ')] | |
) | |
if __name__ == "__main__": | |
run() |