hetshah2708's picture
Update app.py
66b94e2 verified
Raw
History Blame Contribute Delete
4.03 kB
import torch
import gradio as gr
import pandas as pd
import matplotlib.pyplot as plt
from transformers import pipeline
import tempfile
import os
# ---------------- LOAD MODEL ----------------
print("Loading sentiment model...")
# model_path = (
# "../Models/models--distilbert--distilbert-base-uncased-finetuned-sst-2-english"
# "/snapshots/714eb0fa89d2f80546fda750413ed43d93601a13"
# )
analyzer = pipeline(
"text-classification",
model= "distilbert/distilbert-base-uncased-finetuned-sst-2-english",
device = -1 # CPU
)
print("Model loaded.")
# ---------------- SINGLE REVIEW ----------------
def sentiment_analyzer(review):
result = analyzer(review)[0]
return f"{result['label']} (Confidence: {round(result['score'], 4)})"
# ---------------- EXCEL + VISUALIZATION ----------------
def analyze_excel(file):
df = pd.read_excel(file.name)
if "review" not in df.columns:
return None, None, None, None
sentiments = []
scores = []
for review in df["review"]:
result = analyzer(review)[0]
sentiments.append(result["label"])
scores.append(round(result["score"], 4))
df["sentiment"] = sentiments
df["confidence_score"] = scores
# ---- Sentiment counts ----
counts = df["sentiment"].value_counts()
# ---- Bar Chart ----
fig_bar = plt.figure()
counts.plot(
kind="bar",
color=["#22c55e", "#ef4444"],
xlabel="Sentiment",
ylabel="Number of Reviews",
title="Sentiment Distribution (Bar Chart)"
)
plt.xticks(rotation=0)
plt.tight_layout()
# ---- Pie Chart ----
fig_pie = plt.figure()
counts.plot(
kind="pie",
autopct="%1.1f%%",
startangle=90,
colors=["#22c55e", "#ef4444"],
ylabel="",
title="Sentiment Distribution (Pie Chart)"
)
plt.tight_layout()
# ---- Save Excel for download ----
tmp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".xlsx")
df.to_excel(tmp_file.name, index=False)
return df, fig_bar, fig_pie, tmp_file.name
# ---------------- GRADIO UI ----------------
with gr.Blocks(theme=gr.themes.Soft(), title="Gen AI Project 3: Sentiment Analyzer") as demo:
gr.Markdown("""
Gen AI Project 3: Sentiment Analyzer
Analyze **individual reviews** or **bulk Excel reviews** using a fine-tuned **DistilBERT** model.
Get **AI insights + visual analytics + downloadable results**.
""")
with gr.Tabs():
# -------- SINGLE REVIEW TAB --------
with gr.Tab("πŸ“ Single Review"):
with gr.Row():
review_input = gr.Textbox(
label="Enter Review Text",
placeholder="e.g. I absolutely loved this product!",
lines=4
)
sentiment_output = gr.Textbox(label="Predicted Sentiment")
gr.Button("Analyze Sentiment πŸš€").click(
fn=sentiment_analyzer,
inputs=review_input,
outputs=sentiment_output
)
# -------- EXCEL TAB --------
with gr.Tab("πŸ“Š Excel Upload & Analysis"):
file_input = gr.File(
label="Upload Excel File (.xlsx)",
file_types=[".xlsx"]
)
analyze_btn = gr.Button("Analyze Excel πŸ“ˆ")
df_output = gr.Dataframe(label="Sentiment Results Table")
bar_output = gr.Plot(label="Bar Chart")
pie_output = gr.Plot(label="Pie Chart")
download_output = gr.File(label="Download Analyzed Excel")
analyze_btn.click(
fn=analyze_excel,
inputs=file_input,
outputs=[df_output, bar_output, pie_output, download_output]
)
gr.Markdown("""
---
βœ… **Tech Stack:** Python, Transformers, DistilBERT, Pandas, Matplotlib, Gradio
πŸš€ **Use Case:** Product reviews, customer feedback, social media sentiment
""")
demo.launch()