Spaces:
Sleeping
Sleeping
import streamlit as st | |
from transformers import AutoModelForSequenceClassification, AutoTokenizer, pipeline | |
from keybert import KeyBERT | |
import numpy as np | |
import torch | |
from evaluate import load | |
# Load sentiment analysis model and word divider | |
try: | |
model = AutoModelForSequenceClassification.from_pretrained( | |
"tabularisai/multilingual-sentiment-analysis", | |
num_labels=5 | |
) | |
tokenizer = AutoTokenizer.from_pretrained( | |
"tabularisai/multilingual-sentiment-analysis" | |
) | |
sentiment_pipeline = pipeline( | |
"text-classification", | |
model=model, | |
tokenizer=tokenizer | |
) | |
except Exception as e: | |
st.error(f"Error loading sentiment analysis model: {e}") | |
# Load keyword extraction model | |
try: | |
kw_model = KeyBERT() | |
except Exception as e: | |
st.error(f"Error loading sentiment analysis model: {e}") | |
# Define tag mapping | |
label_map = { | |
"Very Negative": 0, | |
"Negative": 1, | |
"Neutral": 2, | |
"Positive": 3, | |
"Very Positive": 4 | |
} | |
# Streamlit | |
st.title("Text emotion and keyword analysis") | |
# Create a text entry box | |
input_text = st.text_area("Please enter user feedback", "") | |
if input_text: | |
try: | |
# sentiment analysis | |
result = sentiment_pipeline(input_text) | |
predicted_label = label_map[result[0]['label']] | |
rating = predicted_label + 1 | |
confidence = result[0]['score'] | |
# ketwords extraction | |
keywords = kw_model.extract_keywords( | |
input_text, | |
keyphrase_ngram_range=(1, 2), | |
stop_words="english", | |
top_n=3 | |
) | |
keyword_text = [kw[0] for kw in keywords] | |
# result showing | |
st.write(f"Rating: {rating}/5") | |
st.write(f"Confidence: {confidence:.2f}") | |
st.write(f"Key words: {', '.join(keyword_text)}") | |
except Exception as e: | |
st.error(f"Error while analyzing text: {e}") | |