doctorlinux commited on
Commit
7de1a88
·
verified ·
1 Parent(s): 22098e4

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +157 -0
  2. requirements.txt +3 -0
app.py ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import spacy
3
+ import os
4
+
5
+ # Descargar modelo si no existe
6
+ def descargar_modelo():
7
+ try:
8
+ nlp = spacy.load("es_core_news_sm")
9
+ print("✅ Modelo cargado correctamente")
10
+ return nlp
11
+ except OSError:
12
+ print("📥 Descargando modelo de spaCy...")
13
+ os.system("python -m spacy download es_core_news_sm")
14
+ nlp = spacy.load("es_core_news_sm")
15
+ print("✅ Modelo descargado y cargado")
16
+ return nlp
17
+
18
+ # Cargar modelo
19
+ nlp = descargar_modelo()
20
+
21
+ def analizar_completo(texto, opciones):
22
+ if not texto.strip():
23
+ return "❌ Ingresa un texto para analizar."
24
+
25
+ try:
26
+ doc = nlp(texto)
27
+ resultado = ""
28
+
29
+ # Debug: ver qué opciones llegan
30
+ print(f"Opciones recibidas: {opciones}, tipo: {type(opciones)}")
31
+
32
+ # Si no hay opciones seleccionadas
33
+ if not opciones:
34
+ return "⚠️ Por favor selecciona al menos una opción de análisis."
35
+
36
+ # Análisis de Tokens y POS Tagging
37
+ if "tokens" in opciones:
38
+ resultado += "📝 TOKENS Y GRAMÁTICA:\n"
39
+ resultado += "-" * 40 + "\n"
40
+ for token in doc:
41
+ if not token.is_space:
42
+ resultado += f"{token.text:15} {token.pos_:10} {spacy.explain(token.pos_)}\n"
43
+ resultado += "\n" + "="*50 + "\n\n"
44
+
45
+ # Análisis de Entidades Nombradas
46
+ if "entidades" in opciones:
47
+ resultado += "🏷️ ENTIDADES NOMBRADAS:\n"
48
+ resultado += "-" * 40 + "\n"
49
+ if doc.ents:
50
+ for ent in doc.ents:
51
+ resultado += f"{ent.text:20} {ent.label_:15} {spacy.explain(ent.label_)}\n"
52
+ else:
53
+ resultado += "No se encontraron entidades nombradas.\n"
54
+ resultado += "\n" + "="*50 + "\n\n"
55
+
56
+ # Análisis de Dependencias
57
+ if "dependencias" in opciones:
58
+ resultado += "🔗 ANÁLISIS DE DEPENDENCIAS:\n"
59
+ resultado += "-" * 40 + "\n"
60
+ for token in doc:
61
+ if token.dep_ != "punct" and not token.is_space:
62
+ resultado += f"{token.text:12} <-{token.dep_:12}- {token.head.text:12}\n"
63
+ resultado += "\n" + "="*50 + "\n\n"
64
+
65
+ # Lematización
66
+ if "lemas" in opciones:
67
+ resultado += "📖 LEMATIZACIÓN:\n"
68
+ resultado += "-" * 40 + "\n"
69
+ lemas_unicos = set()
70
+ for token in doc:
71
+ if not token.is_punct and not token.is_space and token.lemma_.strip():
72
+ lemas_unicos.add((token.lemma_, token.pos_))
73
+
74
+ for lemma, pos in sorted(lemas_unicos):
75
+ resultado += f"{lemma:20} ({pos})\n"
76
+ resultado += "\n"
77
+
78
+ return resultado
79
+
80
+ except Exception as e:
81
+ return f"❌ Error al procesar el texto: {str(e)}"
82
+
83
+ # Crear la interfaz Gradio
84
+ with gr.Blocks(theme="soft", title="Analizador de Texto con spaCy") as demo:
85
+ gr.Markdown("""
86
+ # 🔍 Analizador de Texto Avanzado con spaCy
87
+ **Analiza texto en español usando procesamiento de lenguaje natural**
88
+ """)
89
+
90
+ with gr.Row():
91
+ with gr.Column(scale=1):
92
+ gr.Markdown("### 📝 Entrada de Texto")
93
+ texto_input = gr.Textbox(
94
+ label="Escribe tu texto aquí",
95
+ placeholder="Ej: El presidente de Microsoft visitó España la semana pasada...",
96
+ lines=4,
97
+ max_lines=6
98
+ )
99
+
100
+ gr.Markdown("### ⚙️ Opciones de Análisis")
101
+ opciones = gr.CheckboxGroup(
102
+ label="Selecciona qué análisis deseas realizar:",
103
+ choices=[
104
+ "tokens",
105
+ "entidades",
106
+ "dependencias",
107
+ "lemas"
108
+ ],
109
+ value=["tokens", "entidades"],
110
+ info="Puedes seleccionar múltiples opciones"
111
+ )
112
+
113
+ analizar_btn = gr.Button("🚀 Analizar Texto", variant="primary", size="lg")
114
+
115
+ with gr.Column(scale=2):
116
+ gr.Markdown("### 📊 Resultados del Análisis")
117
+ resultado_output = gr.Textbox(
118
+ label="Resultado",
119
+ lines=20,
120
+ show_copy_button=True,
121
+ placeholder="Los resultados del análisis aparecerán aquí...",
122
+ elem_id="resultado"
123
+ )
124
+
125
+ # Ejemplos predefinidos
126
+ gr.Markdown("### 💡 Ejemplos para Probar")
127
+
128
+ # Definir ejemplos como lista de listas
129
+ ejemplos_lista = [
130
+ ["El presidente de Argentina anunció nuevas medidas económicas para 2024.", ["tokens", "entidades"]],
131
+ ["María compró tres manzanas rojas en el supermercado de Madrid.", ["tokens", "lemas", "dependencias"]],
132
+ ["La empresa Google fue fundada en 1998 por Larry Page y Sergey Brin.", ["entidades", "dependencias"]],
133
+ ["El rápido zorro marrón salta sobre el perro perezoso.", ["tokens", "dependencias", "lemas"]]
134
+ ]
135
+
136
+ gr.Examples(
137
+ examples=ejemplos_lista,
138
+ inputs=[texto_input, opciones],
139
+ label="Haz clic en un ejemplo para probar:",
140
+ examples_per_page=4
141
+ )
142
+
143
+ # Conectar el botón
144
+ analizar_btn.click(
145
+ fn=analizar_completo,
146
+ inputs=[texto_input, opciones],
147
+ outputs=resultado_output
148
+ )
149
+
150
+ # Pie de página
151
+ gr.Markdown("""
152
+ ---
153
+ *🔧 Desarrollado con spaCy y Gradio | Modelo: es_core_news_sm*
154
+ """)
155
+
156
+ if __name__ == "__main__":
157
+ demo.launch(share=False, server_name="127.0.0.1", server_port=7860)
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ spacy==3.7.2
2
+ https://github.com/explosion/spacy-models/releases/download/es_core_news_sm-3.7.0/es_core_news_sm-3.7.0-py3-none-any.whl
3
+ gradio==4.24.0