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}")