test1 / app.py
soufyane's picture
Update app.py
be49472 verified
raw
history blame
2.04 kB
import gradio as gr
import pandas as pd
from transformers import AutoTokenizer, AutoModelForSequenceClassification, pipeline
import matplotlib.pyplot as plt
# Load model and tokenizer
model_name = "ac0hik/Sentiment_Analysis_French"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
# Create sentiment analysis pipeline
classifier = pipeline('sentiment-analysis', model=model, tokenizer=tokenizer)
# Function to process a single text input
def analyze_text(text):
result = classifier(text)[0]
return result
# Function to process a CSV file
def analyze_csv(file):
df = pd.read_csv(file)
texts = df['text'].tolist()
results = classifier(texts)
sentiments = [result['label'] for result in results]
df['sentiment'] = sentiments
pos_count = sentiments.count('positive')
neg_count = sentiments.count('negative')
neu_count = sentiments.count('neutral')
# Create a pie chart
labels = 'Positive', 'Negative', 'Neutral'
sizes = [pos_count, neg_count, neu_count]
colors = ['#ff9999','#66b3ff','#99ff99']
fig, ax = plt.subplots()
ax.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90)
ax.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
return df, fig
# Gradio interface
with gr.Blocks() as demo:
gr.Markdown("## Sentiment Analysis")
text_input = gr.Textbox(label="Enter Text")
text_output = gr.JSON(label="Sentiment Analysis Result")
text_button = gr.Button("Analyze Text")
csv_input = gr.File(label="Upload CSV", file_types=['csv'])
csv_output = gr.Dataframe(label="Sentiment Analysis Results")
csv_chart = gr.Plot(label="Sentiment Distribution")
csv_button = gr.Button("Analyze CSV")
text_button.click(analyze_text, inputs=text_input, outputs=text_output)
csv_button.click(analyze_csv, inputs=csv_input, outputs=[csv_output, csv_chart])
# Launch the Gradio app
demo.launch()