import gradio as gr import pandas as pd from transformers import pipeline # Configurar el clasificador de sentimientos multilingüe classifier = pipeline(task="zero-shot-classification", model="facebook/bart-large-mnli") # Función para analizar los sentimientos de una lista de textos def analyze_sentiments(texts): if not texts: return "0.0%", "0.0%", "0.0%" # Manejar el caso donde no hay textos para analizar positive, negative, neutral = 0, 0, 0 for text in texts: results = classifier(text, ["positive", "negative", "neutral"], multi_label=True) mx = max(results['scores']) ind = results['scores'].index(mx) result = results['labels'][ind] if result == "positive": positive += 1 elif result == "negative": negative += 1 else: neutral += 1 total = len(texts) positive_percent = round((positive / total) * 100, 1) negative_percent = round((negative / total) * 100, 1) neutral_percent = round((neutral / total) * 100, 1) return f"{positive_percent}%", f"{negative_percent}%", f"{neutral_percent}%" # Función para cargar el archivo CSV y analizar los primeros 100 comentarios def analyze_sentiment_from_csv(file): try: df = pd.read_csv(file.name) if 'content' not in df.columns: raise ValueError("El archivo CSV no contiene una columna 'content'") texts = df['content'].head(100).tolist() # Tomar solo los primeros 100 comentarios return analyze_sentiments(texts) except pd.errors.ParserError as e: return f"Error al analizar el archivo CSV: {e}", "", "" except Exception as e: return f"Error inesperado: {e}", "", "" # Configurar la interfaz de Gradio demo = gr.Interface( fn=analyze_sentiment_from_csv, inputs=gr.File(file_count="single", label="Sube tu archivo CSV"), # Permitir la carga del archivo CSV outputs=[ gr.Textbox(label="Porcentaje Positivo"), gr.Textbox(label="Porcentaje Negativo"), gr.Textbox(label="Porcentaje Neutro") ], title="Analizador de Sentimientos V.2", description="Porcentaje de comentarios positivos, negativos y neutrales" ) demo.launch(share=True)