disilbert / app.py
ghostai1's picture
Create app.py
386a1d7 verified
import gradio as gr
from transformers import pipeline
import matplotlib.pyplot as plt
from collections import Counter
import threading
# Initialize sentiment pipeline
sentiment_analyzer = pipeline(
"sentiment-analysis",
model="distilbert-base-uncased-finetuned-sst-2-english"
)
# Thread-safe log storage
log_lock = threading.Lock()
sentiment_log = []
def analyze_and_log(text):
result = sentiment_analyzer(text)[0]
label = result['label']
score = round(result['score'], 3)
entry = f"Input: {text} --> Sentiment: {label} (Confidence: {score})"
with log_lock:
sentiment_log.append((text, label))
return label, score, entry, update_chart()
def update_chart():
with log_lock:
labels = [label for _, label in sentiment_log]
counts = Counter(labels)
fig, ax = plt.subplots(figsize=(4, 3))
ax.bar(counts.keys(), counts.values(), color=['#4CAF50', '#F44336'])
ax.set_title("Sentiment Distribution")
ax.set_xlabel("Sentiment")
ax.set_ylabel("Count")
plt.tight_layout()
return fig
with gr.Blocks() as demo:
gr.Markdown("# DistilBERT Sentiment Analysis with Live Logs & Visualization")
gr.Markdown("Enter your salon feedback or product review below and get instant sentiment analysis, logging, and sentiment summary visualization.")
with gr.Row():
with gr.Column(scale=3):
input_text = gr.Textbox(lines=3, placeholder="Type your text here...")
analyze_btn = gr.Button("Analyze Sentiment")
sentiment_label = gr.Textbox(label="Sentiment Label", interactive=False)
confidence_score = gr.Textbox(label="Confidence Score", interactive=False)
log_output = gr.Textbox(label="Analysis Log", interactive=False, lines=10)
with gr.Column(scale=2):
sentiment_chart = gr.Plot(label="Sentiment Distribution Chart")
analyze_btn.click(
analyze_and_log,
inputs=input_text,
outputs=[sentiment_label, confidence_score, log_output, sentiment_chart]
)
if __name__ == "__main__":
demo.launch()