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