Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from transformers import pipeline | |
| import pandas as pd | |
| import numpy as np | |
| # Cargar el modelo de análisis de sentimientos | |
| pipeline_classification = pipeline( | |
| "text-classification", | |
| model="pysentimiento/robertuito-sentiment-analysis" | |
| ) | |
| def analyze_sentiment(text): | |
| """ | |
| Analiza el sentimiento del texto ingresado | |
| """ | |
| if not text.strip(): | |
| return "Por favor ingresa un texto para analizar." | |
| # Realizar el análisis de sentimientos | |
| result = pipeline_classification(text) | |
| # Formatear la respuesta | |
| sentiment = result[0]['label'] | |
| confidence = result[0]['score'] | |
| # Traducir las etiquetas al español | |
| sentiment_map = { | |
| 'POS': 'Positivo', | |
| 'NEG': 'Negativo', | |
| 'NEU': 'Neutral' | |
| } | |
| sentiment_spanish = sentiment_map.get(sentiment, sentiment) | |
| return f"**Sentimiento:** {sentiment_spanish}\n**Confianza:** {confidence:.4f}" | |
| def analyze_batch(file): | |
| """ | |
| Analiza sentimientos de un archivo CSV | |
| """ | |
| if file is None: | |
| return "Por favor sube un archivo CSV." | |
| try: | |
| # Leer el archivo CSV | |
| df = pd.read_csv(file.name) | |
| # Verificar que tenga una columna 'text' | |
| if 'text' not in df.columns: | |
| return "El archivo CSV debe tener una columna llamada 'text'." | |
| # Analizar cada texto | |
| results = [] | |
| for text in df['text']: | |
| if pd.isna(text): | |
| results.append({'sentiment': 'N/A', 'confidence': 0}) | |
| else: | |
| result = pipeline_classification(str(text)) | |
| results.append({ | |
| 'sentiment': result[0]['label'], | |
| 'confidence': result[0]['score'] | |
| }) | |
| # Agregar resultados al DataFrame | |
| df['sentiment'] = [r['sentiment'] for r in results] | |
| df['confidence'] = [r['confidence'] for r in results] | |
| # Guardar el resultado | |
| output_file = "sentiment_analysis_results.csv" | |
| df.to_csv(output_file, index=False) | |
| return output_file | |
| except Exception as e: | |
| return f"Error procesando el archivo: {str(e)}" | |
| # Crear la interfaz de Gradio | |
| with gr.Blocks(title="Análisis de Sentimientos") as demo: | |
| gr.Markdown(""" | |
| # 🎭 Análisis de Sentimientos en Español | |
| Esta aplicación utiliza el modelo **RoBERTuito** de pysentimiento para analizar el sentimiento de textos en español. | |
| ## Características: | |
| - ✨ Análisis individual de textos | |
| - 📄 Análisis en lote desde archivos CSV | |
| - 🎯 Optimizado para español e idiomas de América Latina | |
| """) | |
| with gr.Tabs(): | |
| with gr.TabItem("📝 Análisis Individual"): | |
| gr.Markdown("### Ingresa un texto para analizar su sentimiento:") | |
| with gr.Row(): | |
| with gr.Column(): | |
| text_input = gr.Textbox( | |
| label="Texto a analizar", | |
| placeholder="Ejemplo: Tengo un nuevo empleo :D", | |
| lines=3 | |
| ) | |
| analyze_btn = gr.Button("🔍 Analizar Sentimiento", variant="primary") | |
| with gr.Column(): | |
| result_output = gr.Markdown(label="Resultado") | |
| # Ejemplos predefinidos | |
| gr.Examples( | |
| examples=[ | |
| ["Tengo un nuevo empleo :D"], | |
| ["Estoy muy triste porque perdí mi trabajo"], | |
| ["El clima está bien hoy"], | |
| ["¡Qué hermoso día para salir!"], | |
| ["No me gusta esta comida para nada"] | |
| ], | |
| inputs=text_input, | |
| outputs=result_output, | |
| fn=analyze_sentiment | |
| ) | |
| with gr.TabItem("📊 Análisis en Lote"): | |
| gr.Markdown(""" | |
| ### Sube un archivo CSV para analizar múltiples textos | |
| **Formato requerido:** El archivo CSV debe tener una columna llamada `text` con los textos a analizar. | |
| """) | |
| with gr.Row(): | |
| file_input = gr.File( | |
| label="Subir archivo CSV", | |
| file_types=[".csv"] | |
| ) | |
| batch_btn = gr.Button("📈 Analizar Archivo", variant="primary") | |
| file_output = gr.File(label="Descargar resultados") | |
| # Conectar eventos | |
| analyze_btn.click( | |
| fn=analyze_sentiment, | |
| inputs=text_input, | |
| outputs=result_output | |
| ) | |
| batch_btn.click( | |
| fn=analyze_batch, | |
| inputs=file_input, | |
| outputs=file_output | |
| ) | |
| gr.Markdown(""" | |
| --- | |
| ### 📖 Acerca del Modelo | |
| Este análisis utiliza **RoBERTuito**, un modelo basado en RoBERTa entrenado específicamente en datos de redes sociales | |
| en español y portugués. Es especialmente efectivo para: | |
| - Textos informales y de redes sociales | |
| - Contenido en español de América Latina | |
| - Detección de ironía y sarcasmo | |
| **Etiquetas de sentimiento:** | |
| - **POS**: Sentimiento positivo | |
| - **NEG**: Sentimiento negativo | |
| - **NEU**: Sentimiento neutral | |
| *Modelo: pysentimiento/robertuito-sentiment-analysis* | |
| """) | |
| # Lanzar la aplicación | |
| if __name__ == "__main__": | |
| demo.launch() |