Muhammad Anas Akhtar
Update app.py
0052338 verified
import torch
import gradio as gr
import pandas as pd
import matplotlib.pyplot as plt
from transformers import pipeline
analyzer = pipeline("text-classification",
model="distilbert/distilbert-base-uncased-finetuned-sst-2-english")
def sentiment_analyzer(review):
# Check if the review is a valid string
if pd.isna(review) or not isinstance(review, str):
return "NEUTRAL" # Return neutral for invalid inputs
try:
sentiment = analyzer(review)
return sentiment[0]['label']
except:
return "NEUTRAL" # Return neutral for any errors
def sentiment_bar_chart(df):
sentiment_counts = df['Sentiment'].value_counts()
# Create a bar chart
plt.figure(figsize=(10, 6))
plt.pie(sentiment_counts.values, labels=sentiment_counts.index, autopct='%1.1f%%',
colors=['lightgreen', 'lightcoral', 'lightgray'])
plt.title('Review Sentiment Distribution')
return plt.gcf()
def read_reviews_and_analyze_sentiment(file_object):
try:
# Load the Excel file into a DataFrame
df = pd.read_excel(file_object)
# Check if 'Review' column is in the DataFrame
if 'Review' not in df.columns:
raise ValueError("Excel file must contain a 'Review' column.")
# Convert Review column to string type and handle NaN values
df['Review'] = df['Review'].astype(str)
# Apply the sentiment_analyzer function to each review
df['Sentiment'] = df['Review'].apply(sentiment_analyzer)
# Create the chart
chart_object = sentiment_bar_chart(df)
return df, chart_object
except Exception as e:
raise gr.Error(f"Error processing file: {str(e)}")
# Create the Gradio interface
demo = gr.Interface(
fn=read_reviews_and_analyze_sentiment,
inputs=[gr.File(file_types=["xlsx"], label="Upload your review comment file")],
outputs=[
gr.Dataframe(label="Sentiments"),
gr.Plot(label="Sentiment Analysis")
],
title="Sentiment Analyzer",
description="THIS APPLICATION WILL BE USED TO ANALYZE THE SENTIMENT BASED ON FILE UPLOADED."
)
if __name__ == "__main__":
demo.launch()