|
import gradio as gr |
|
import pandas as pd |
|
from transformers import AutoTokenizer, AutoModelForSequenceClassification, pipeline |
|
import matplotlib.pyplot as plt |
|
import spaces |
|
|
|
|
|
model_name = "ac0hik/Sentiment_Analysis_French" |
|
tokenizer = AutoTokenizer.from_pretrained(model_name) |
|
model = AutoModelForSequenceClassification.from_pretrained(model_name) |
|
|
|
|
|
classifier = pipeline('sentiment-analysis', model=model, tokenizer=tokenizer) |
|
|
|
|
|
|
|
|
|
@spaces.GPU |
|
def analyze_text(text): |
|
result = classifier(text)[0] |
|
return result |
|
|
|
|
|
@spaces.GPU |
|
|
|
|
|
def analyze_text(text): |
|
result = classifier(text)[0] |
|
return result |
|
|
|
|
|
def analyze_csv(file): |
|
df = pd.read_csv(file.name) |
|
texts = df['text'].tolist() |
|
|
|
results = [] |
|
pos_count = neg_count = neu_count = 0 |
|
|
|
for text in texts: |
|
result = classifier(text)[0] |
|
results.append({'text': text, 'sentiment': result['label']}) |
|
|
|
if result['label'] == 'positive': |
|
pos_count += 1 |
|
elif result['label'] == 'negative': |
|
neg_count += 1 |
|
else: |
|
neu_count += 1 |
|
|
|
|
|
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') |
|
|
|
|
|
yield pd.DataFrame(results), fig, pos_count, neg_count, neu_count |
|
|
|
|
|
def save_csv(df): |
|
file_path = "/mnt/data/sentiment_analysis_results.csv" |
|
df.to_csv(file_path, index=False) |
|
return file_path |
|
|
|
|
|
with gr.Blocks() as demo: |
|
with gr.Row(): |
|
with gr.Column(): |
|
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_button = gr.Button("Analyze CSV") |
|
|
|
with gr.Column(): |
|
gr.Markdown("## csv Result") |
|
pos_count_output = gr.Number(label="Positive Count", value=0) |
|
neg_count_output = gr.Number(label="Negative Count", value=0) |
|
neu_count_output = gr.Number(label="Neutral Count", value=0) |
|
csv_chart = gr.Plot(label="Sentiment Distribution") |
|
|
|
text_button.click(analyze_text, inputs=text_input, outputs=text_output) |
|
csv_button.click(analyze_csv, inputs=csv_input, outputs=[csv_output, csv_chart, pos_count_output, neg_count_output, neu_count_output]) |
|
|
|
|
|
demo.launch() |