Spaces:
Build error
Build error
| # app.py | |
| import streamlit as st | |
| import pandas as pd | |
| import re | |
| from transformers import BertTokenizer, BertForSequenceClassification | |
| import torch | |
| import matplotlib.pyplot as plt | |
| import numpy as np | |
| # Load the model and tokenizer | |
| def load_model(): | |
| tokenizer = BertTokenizer.from_pretrained("bert-base-uncased") | |
| model = BertForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=8) | |
| return tokenizer, model | |
| tokenizer, model = load_model() | |
| # Custom sentiments | |
| sentiments = ["happy", "motivated", "growth", "optimistic", "jealousy", "frustrated", "decline", "angry"] | |
| # Define the preprocessing function | |
| def preprocess_text(text): | |
| text = re.sub(r'[^\w\s]', '', text.lower()) # Remove punctuation and lowercase | |
| text = re.sub(r'\d+', '', text) # Remove numbers | |
| return text | |
| # Title and instructions | |
| st.title("Sentiment Analysis of Financial News") | |
| st.write("Enter a sentence to analyze its sentiment across predefined categories.") | |
| # Input text from user | |
| text = st.text_input("Enter a sentence:", "") | |
| if text: | |
| # Preprocess and tokenize | |
| cleaned_text = preprocess_text(text) | |
| inputs = tokenizer(cleaned_text, return_tensors="pt", truncation=True, padding=True) | |
| # Get model predictions | |
| with torch.no_grad(): | |
| outputs = model(**inputs) | |
| sentiment_score = outputs.logits.softmax(dim=1) | |
| # Convert tensor to list for plotting | |
| score_list = sentiment_score.tolist()[0] | |
| # Display sentiment scores as a table | |
| st.subheader("Sentiment Scores") | |
| score_df = pd.DataFrame({"Sentiment": sentiments, "Score": score_list}) | |
| st.dataframe(score_df) | |
| # Plot the sentiment scores | |
| st.subheader("Sentiment Score Chart") | |
| fig, ax = plt.subplots(figsize=(10, 6)) | |
| mustard_yellow = "#FFDB58" | |
| # Plot bars with spacing and color | |
| ax.bar(np.arange(len(sentiments)) * 1.5, score_list, color=mustard_yellow, edgecolor="black", width=0.8) | |
| # Customize the plot | |
| ax.set_xlabel("Sentiments", color="black", fontsize=12) | |
| ax.set_ylabel("Scores", color="black", fontsize=12) | |
| ax.set_title("Sentiment Analysis of Financial News", color="black", fontsize=14) | |
| ax.set_xticks(np.arange(len(sentiments)) * 1.5) | |
| ax.set_xticklabels(sentiments, color="black", fontsize=10, rotation=45) | |
| ax.tick_params(axis="y", colors="black") | |
| # Display the plot in Streamlit | |
| st.pyplot(fig) | |