import transformers from flask import Flask, request, jsonify from transformers import RobertaTokenizerFast, TFRobertaForSequenceClassification, pipeline import gradio as gr import pandas as pd import numpy as np import matplotlib.pyplot as plt import io from io import BytesIO # Import BytesIO for image generation # Load model and tokenizer tokenizer = RobertaTokenizerFast.from_pretrained("arpanghoshal/EmoRoBERTa") model = TFRobertaForSequenceClassification.from_pretrained("arpanghoshal/EmoROBERTa") emotion = pipeline("sentiment-analysis", model="arpanghoshal/EmoROBERTa") def analyze_csv(file): try: # Print file content for debugging file_content = file.read() print("File content:", file_content) # Reset file position to the beginning file.seek(0) # Read the CSV file into a DataFrame df = pd.read_csv(io.BytesIO(file_content))`` print("DataFrame shape:", df.shape) # Print DataFrame shape for debugging print("DataFrame columns:", df.columns) # Print DataFrame columns for debugging # Check if the DataFrame is empty if df.empty: return "Empty file. Please upload a CSV file with data.", None # Check if the expected column "phrase" is present in the DataFrame if "phrase" not in df.columns: return "Column 'phrase' not found in the CSV file. Please check the file format.", None phrases = df["phrase"] # Analyze sentiment for each phrase emotion_labels = emotion(phrases) # Create summary statistics summary_df = pd.DataFrame(emotion_labels).describe() # Create a bar chart of emotion distribution plt.figure() emotion_counts = emotion_labels.get("labels").value_counts() emotion_counts.plot(kind="bar") plt.title("Emotion Distribution") plt.xlabel("Emotion") plt.ylabel("Count") # Generate PNG image of the chart chart_img = BytesIO() plt.savefig(chart_img, format="png") chart_img.seek(0) return summary_df.to_json(), chart_img.read() except Exception as e: error_message = f"Error processing the CSV file: {str(e)}" print(error_message) # Print the error message for debugging return error_message, None iface = gr.Interface( fn=analyze_csv, inputs=[gr.File(label="Upload CSV File")], outputs=["dataframe", "image"], title="Emotion Analyzer with CSV", description="Analyzes sentiment and creates charts/tables from a CSV file.", ) iface.launch()