Spaces:
Sleeping
Sleeping
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import pandas as pd
|
3 |
+
from transformers import pipeline
|
4 |
+
|
5 |
+
# Configurar el clasificador de sentimientos multilingüe
|
6 |
+
classifier = pipeline(task="zero-shot-classification", model="facebook/bart-large-mnli")
|
7 |
+
|
8 |
+
# Función para analizar los sentimientos de una lista de textos
|
9 |
+
def analyze_sentiments(texts):
|
10 |
+
if not texts:
|
11 |
+
return 0.0, 0.0, 0.0 # Manejar el caso donde no hay textos para analizar
|
12 |
+
|
13 |
+
positive, negative, neutral = 0, 0, 0
|
14 |
+
for text in texts:
|
15 |
+
results = classifier(text, ["positive", "negative", "neutral"], multi_label=True)
|
16 |
+
mx = max(results['scores'])
|
17 |
+
ind = results['scores'].index(mx)
|
18 |
+
result = results['labels'][ind]
|
19 |
+
if result == "positive":
|
20 |
+
positive += 1
|
21 |
+
elif result == "negative":
|
22 |
+
negative += 1
|
23 |
+
else:
|
24 |
+
neutral += 1
|
25 |
+
total = len(texts)
|
26 |
+
positive_percent = (positive / total) * 100
|
27 |
+
negative_percent = (negative / total) * 100
|
28 |
+
neutral_percent = (neutral / total) * 100
|
29 |
+
return positive_percent, negative_percent, neutral_percent
|
30 |
+
|
31 |
+
# Función para cargar el archivo CSV y analizar los primeros 100 comentarios
|
32 |
+
def analyze_sentiment_from_csv():
|
33 |
+
try:
|
34 |
+
# Intentar leer el archivo CSV con diferentes opciones para manejar errores de formato
|
35 |
+
df = pd.read_csv('SHAREit_BD.csv', delimiter=',')
|
36 |
+
print(df.head()) # Imprimir las primeras filas del DataFrame para verificar su contenido
|
37 |
+
if 'content' not in df.columns:
|
38 |
+
raise ValueError("El archivo CSV no contiene una columna 'content'")
|
39 |
+
texts = df['content'].head(100).tolist() # Tomar solo los primeros 100 comentarios
|
40 |
+
return analyze_sentiments(texts)
|
41 |
+
except pd.errors.ParserError as e:
|
42 |
+
print(f"Error al analizar el archivo CSV: {e}")
|
43 |
+
return "Error al analizar el archivo CSV", "", ""
|
44 |
+
except Exception as e:
|
45 |
+
print(f"Error inesperado: {e}")
|
46 |
+
return str(e), "", ""
|
47 |
+
|
48 |
+
# Configurar la interfaz de Gradio
|
49 |
+
demo = gr.Interface(
|
50 |
+
fn=analyze_sentiment_from_csv,
|
51 |
+
inputs=[], # No hay necesidad de entradas porque los datos están incrustados
|
52 |
+
outputs=[gr.Textbox(label="Positive Percentage"), gr.Textbox(label="Negative Percentage"), gr.Textbox(label="Neutral Percentage")], # Mostrar los porcentajes como salidas
|
53 |
+
title="Analizador de Sentimientos Multilingüe",
|
54 |
+
description="Porcentaje de comentarios positivos, negativos y neutrales"
|
55 |
+
)
|
56 |
+
|
57 |
+
demo.launch()
|