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