carlesabarca commited on
Commit
e6e702e
·
1 Parent(s): 978194b

Compatibilidad Gradio 3.0

Browse files
Files changed (2) hide show
  1. app.py +55 -49
  2. requirements.txt +2 -5
app.py CHANGED
@@ -1,69 +1,75 @@
1
  import gradio as gr
2
  from transformers import pipeline
3
- from PyPDF2 import PdfReader
4
 
5
- # Mostrar la versión de Gradio
6
- print(f"Versión de Gradio instalada: {gr.__version__}")
7
 
8
- # Cargar el modelo de DistilBETO
9
- sentiment_analysis = pipeline("sentiment-analysis",
10
- model="nlptown/bert-base-multilingual-uncased-sentiment")
11
-
12
- # Función para analizar texto
13
- def analyze_text_sentiment(text):
14
- result = sentiment_analysis(text)[0]
15
- score = result['score']
16
  label = result['label']
17
-
18
- # Convertir la etiqueta de sentimiento en un valor para el slider y su literal
 
19
  if label == "1 star":
20
- slider_value = 0
21
- literal = "Muy negativo"
22
  elif label == "2 stars":
23
- slider_value = 25
24
- literal = "Negativo"
25
  elif label == "3 stars":
26
- slider_value = 50
27
- literal = "Neutro"
28
  elif label == "4 stars":
29
- slider_value = 75
30
- literal = "Positivo"
31
- elif label == "5 stars":
32
- slider_value = 100
33
- literal = "Muy positivo"
34
 
35
- # Añadir el nivel de confianza al literal
36
- confidence = round(score * 100, 2)
37
- literal_with_confidence = f"{literal} (Confianza: {confidence}%)"
38
 
39
- return slider_value, literal_with_confidence
40
-
41
- # Función para extraer texto de PDF y analizar
42
- def analyze_pdf_sentiment(pdf_file):
43
- pdf_reader = PdfReader(pdf_file.name)
44
  text = ""
45
  for page in pdf_reader.pages:
46
  text += page.extract_text()
47
-
48
- return analyze_text_sentiment(text)
49
 
50
  # Interfaz de Gradio
51
- with gr.Blocks() as demo:
52
- with gr.Tabs():
53
- with gr.Tab("Texto"):
54
- text_input = gr.Textbox(label="Ingrese su texto aquí", lines=5)
55
- analyze_button = gr.Button("Analizar")
56
- slider_output = gr.Slider(label="Nivel de Sentimiento", minimum=0, maximum=100, step=1, interactive=False)
57
- label_output = gr.Label()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
 
59
- analyze_button.click(analyze_text_sentiment, inputs=text_input, outputs=[slider_output, label_output])
60
 
61
- with gr.Tab("PDF"):
62
- pdf_input = gr.File(label="Subir PDF", file_types=[".pdf"])
63
- analyze_button = gr.Button("Analizar")
64
- slider_output = gr.Slider(label="Nivel de Sentimiento", minimum=0, maximum=100, step=1, interactive=False)
65
- label_output = gr.Label()
66
 
67
- analyze_button.click(analyze_pdf_sentiment, inputs=pdf_input, outputs=[slider_output, label_output])
68
 
69
- demo.launch()
 
 
1
  import gradio as gr
2
  from transformers import pipeline
3
+ import PyPDF2
4
 
5
+ # Cargar el modelo de análisis de sentimientos
6
+ sentiment_analysis = pipeline("sentiment-analysis", model="nlptown/bert-base-multilingual-uncased-sentiment")
7
 
8
+ def analyze_text(input_text):
9
+ result = sentiment_analysis(input_text)[0]
 
 
 
 
 
 
10
  label = result['label']
11
+ score = round(result['score'] * 100, 2) # Convertir a porcentaje
12
+
13
+ # Definir la categoría de sentimiento según la etiqueta
14
  if label == "1 star":
15
+ sentiment_label = "Muy negativo"
 
16
  elif label == "2 stars":
17
+ sentiment_label = "Negativo"
 
18
  elif label == "3 stars":
19
+ sentiment_label = "Neutro"
 
20
  elif label == "4 stars":
21
+ sentiment_label = "Positivo"
22
+ else:
23
+ sentiment_label = "Muy positivo"
 
 
24
 
25
+ # Devolver el resultado con el nivel de confianza
26
+ return f"{sentiment_label} ({score}%)", score
 
27
 
28
+ def analyze_pdf(pdf_file):
29
+ pdf_reader = PyPDF2.PdfReader(pdf_file)
 
 
 
30
  text = ""
31
  for page in pdf_reader.pages:
32
  text += page.extract_text()
33
+
34
+ return analyze_text(text)
35
 
36
  # Interfaz de Gradio
37
+ text_input = gr.Textbox(label="Ingrese texto para análisis")
38
+ pdf_input = gr.File(label="Subir PDF para análisis", file_types=[".pdf"])
39
+
40
+ text_output = gr.Label(label="Resultado del análisis")
41
+ slider_output = gr.Slider(label="Nivel de sentimiento", minimum=0, maximum=100, interactive=False)
42
+
43
+ text_button = gr.Button("Analizar texto")
44
+ pdf_button = gr.Button("Analizar PDF")
45
+
46
+ def text_analysis(input_text):
47
+ sentiment, score = analyze_text(input_text)
48
+ return sentiment, score
49
+
50
+ def pdf_analysis(pdf_file):
51
+ sentiment, score = analyze_pdf(pdf_file)
52
+ return sentiment, score
53
+
54
+ with gr.Blocks() as app:
55
+ gr.Markdown("## Análisis de Sentimientos con DistilBETO")
56
+
57
+ with gr.Column():
58
+ gr.Markdown("### Análisis de Texto")
59
+ text_input.render()
60
+ text_button.render()
61
+ text_output.render()
62
+ slider_output.render()
63
 
64
+ text_button.click(text_analysis, inputs=text_input, outputs=[text_output, slider_output])
65
 
66
+ gr.Markdown("### Análisis de PDF")
67
+ pdf_input.render()
68
+ pdf_button.render()
69
+ text_output.render()
70
+ slider_output.render()
71
 
72
+ pdf_button.click(pdf_analysis, inputs=pdf_input, outputs=[text_output, slider_output])
73
 
74
+ # Ejecutar la aplicación
75
+ app.launch()
requirements.txt CHANGED
@@ -1,7 +1,4 @@
1
- gradio==3.44.4
2
  transformers
3
  torch
4
- PyPDF2
5
- fastapi==0.100.0
6
- httpcore==0.17.3
7
- starlette==0.27.0
 
1
+ gradio>=3.0
2
  transformers
3
  torch
4
+ PyPDF2