Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer | |
| from textblob import TextBlob | |
| from transformers import pipeline | |
| import matplotlib.pyplot as plt | |
| import base64 | |
| import os | |
| from wordcloud import WordCloud | |
| # Function to perform sentiment analysis using Hugging Face model | |
| hf_sentiment_analyzer = pipeline( | |
| "sentiment-analysis", "Dmyadav2001/Sentimental-Analysis" | |
| ) | |
| def analyze_hf_sentiment(text): | |
| if len(text) > 512: | |
| text = text[:511] | |
| result = hf_sentiment_analyzer(text) | |
| label = result[0]["label"] | |
| if label == "LABEL_1": | |
| return "Positive" | |
| elif label == "LABEL_0": | |
| return "Negative" | |
| elif label == "LABEL_2": | |
| return "Neutral" | |
| # Function to perform sentiment analysis using VADER | |
| def analyze_vader_sentiment(text): | |
| analyzer = SentimentIntensityAnalyzer() | |
| vader_score = analyzer.polarity_scores(text)["compound"] | |
| if vader_score > 0: | |
| return "Positive" | |
| elif vader_score == 0: | |
| return "Neutral" | |
| else: | |
| return "Negative" | |
| # Function to perform sentiment analysis using TextBlob | |
| def analyze_textblob_sentiment(text): | |
| analysis = TextBlob(text) | |
| sentiment_score = analysis.sentiment.polarity | |
| if sentiment_score > 0: | |
| return "Positive" | |
| elif sentiment_score == 0: | |
| return "Neutral" | |
| else: | |
| return "Negative" | |
| # Function to display DataFrame with updated sentiment column | |
| def display_dataframe(df): | |
| st.write(df) | |
| # Function to display pie chart for sentiment distribution | |
| def display_pie_chart(df, column): | |
| sentiment_counts = df[column].value_counts() | |
| fig, ax = plt.subplots() | |
| ax.pie( | |
| sentiment_counts, | |
| labels=sentiment_counts.index, | |
| autopct="%1.1f%%", | |
| startangle=140, | |
| ) | |
| ax.axis("equal") | |
| st.pyplot(fig) | |
| # Function to display word cloud | |
| def display_wordcloud(text_data): | |
| wordcloud = WordCloud(width=800, height=400, background_color="white").generate( | |
| text_data | |
| ) | |
| fig, ax = plt.subplots(figsize=(10, 5)) | |
| ax.imshow(wordcloud, interpolation="bilinear") | |
| ax.axis("off") | |
| st.pyplot(fig) | |
| # Streamlit UI | |
| st.set_page_config(page_title="Sentiment Analysis App", page_icon=":smiley:") | |
| st.title("Sentiment Analysis App") | |
| # Sidebar | |
| st.sidebar.title("Options") | |
| input_option = st.sidebar.selectbox("Select Input Option", ["Free Text", "CSV Files"]) | |
| selected_model = st.sidebar.selectbox( | |
| "Select Sentiment Analysis Model", ["VADER", "TextBlob", "Hugging Face"] | |
| ) | |
| result_option = st.sidebar.selectbox( | |
| "Select Result Display Option", | |
| ["DataFrame", "Pie Chart", "Bar Chart", "Keyword Frequency", "Word Cloud", "Comparative Sentiment Analysis"], | |
| ) | |
| # Main content | |
| if input_option == "Free Text": | |
| st.subheader("Enter review for sentiment analysis:") | |
| user_input = st.text_input("", placeholder="Enter your text here") | |
| if st.button('Analyze'): | |
| if user_input: | |
| with st.spinner("Analyzing..."): | |
| if selected_model == "Hugging Face": | |
| result = analyze_hf_sentiment(user_input) | |
| elif selected_model == "VADER": | |
| result = analyze_vader_sentiment(user_input) | |
| elif selected_model == "TextBlob": | |
| result = analyze_textblob_sentiment(user_input) | |
| st.write("Sentiment:", result) | |
| else: | |
| st.error("Please enter some text to analyze.") | |
| if input_option == "CSV Files": | |
| st.subheader("Upload CSV files for sentiment analysis:") | |
| uploaded_files = st.file_uploader("Choose a CSV file", accept_multiple_files=True) | |
| if st.button('Start Analysis'): | |
| if uploaded_files: | |
| for uploaded_file in uploaded_files: | |
| df = pd.read_csv(uploaded_file) | |
| if 'review_text' in df.columns: | |
| df['Sentiment'] = df['review_text'].apply(lambda x: analyze_hf_sentiment(x) if selected_model == "Hugging Face" else (analyze_vader_sentiment(x) if selected_model == "VADER" else analyze_textblob_sentiment(x))) | |
| if result_option == "DataFrame": | |
| display_dataframe(df) | |
| elif result_option == "Pie Chart": | |
| display_pie_chart(df, 'Sentiment') | |
| elif result_option == "Word Cloud": | |
| combined_text = ' '.join(df['review_text']) | |
| display_wordcloud(combined_text) | |
| else: | |
| st.error("CSV must contain 'review_text' column.") | |
| else: | |
| st.error("Please upload a CSV file.") | |