import gradio as gr import pandas as pd from transformers import AutoTokenizer, AutoModelForSequenceClassification, pipeline import matplotlib.pyplot as plt import spaces # 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 @spaces.GPU def analyze_text(text): result = classifier(text)[0] return result # Function to process a CSV file and update results live @spaces.GPU # Function to process a single text input def analyze_text(text): result = classifier(text)[0] return result # Function to process a CSV file and update results live 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 # 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') # Update results live yield pd.DataFrame(results), fig, pos_count, neg_count, neu_count # Function to save the DataFrame to a CSV file def save_csv(df): file_path = "/mnt/data/sentiment_analysis_results.csv" df.to_csv(file_path, index=False) return file_path # Gradio interface 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]) # Launch the Gradio app demo.launch()