import gradio as gr import pandas as pd from transformers import pipeline from collections import Counter import re # 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 all_words = [] 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 # Procesar palabras del texto words = re.findall(r'\w+', text.lower()) all_words.extend(words) total = len(texts) positive_percent = round((positive / total) * 100, 1) negative_percent = round((negative / total) * 100, 1) neutral_percent = round((neutral / total) * 100, 1) # Contar las palabras más comunes word_counts = Counter(all_words) most_common_words = word_counts.most_common(10) # Obtener las 10 palabras más comunes return f"{positive_percent}%", f"{negative_percent}%", f"{neutral_percent}%", most_common_words # 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"), gr.Textbox(label="Palabras Más Usadas") ], title="Analizador de Sentimientos V.2", description="Porcentaje de comentarios positivos, negativos y neutrales, y palabras más usadas" ) demo.launch(share=True)