# requirements.txt # spacy # 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 import gradio as gr import spacy import os # Descargar el modelo si no existe def descargar_modelo(): try: nlp = spacy.load("es_core_news_sm") print("✅ Modelo ya descargado") 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 correctamente") # Cargar modelo después de asegurar que existe descargar_modelo() nlp = spacy.load("es_core_news_sm") def analizar_texto(texto): if not texto.strip(): return "❌ Por favor, ingresa un texto para analizar." doc = nlp(texto) resultado = "🔍 ANÁLISIS COMPLETO:\n" resultado += "=" * 50 + "\n" # 1. Tokens y POS tagging resultado += "\n📝 TOKENS Y GRAMÁTICA:\n" for token in doc: resultado += f"{token.text:15} {token.pos_:10} {spacy.explain(token.pos_)}\n" # 2. Entidades nombradas resultado += "\n🏷️ ENTIDADES RECONOCIDAS:\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" # 3. Análisis de dependencias resultado += "\n🔗 DEPENDENCIAS:\n" for token in doc: if token.dep_ != "punct": # Ignorar puntuación resultado += f"{token.text:10} <-{token.dep_:10}- {token.head.text:10}\n" return resultado # Crear interfaz Gradio with gr.Blocks(title="Analizador de Texto con spaCy") as demo: gr.Markdown("# 🇪🇸 Analizador de Texto en Español") gr.Markdown("Analiza texto en español usando spaCy: tokens, POS tagging, entidades nombradas y dependencias.") with gr.Row(): texto_input = gr.Textbox( label="Ingresa tu texto en español", placeholder="Ej: El presidente de Microsoft, Satya Nadella, anunció nuevas inversiones en España.", lines=3, max_lines=6 ) with gr.Row(): analizar_btn = gr.Button("🔍 Analizar Texto") with gr.Row(): resultado_output = gr.Textbox( label="Resultado del Análisis", lines=20, interactive=False ) # Ejemplos gr.Markdown("### Ejemplos:") ejemplos = [ "El presidente de Microsoft, Satya Nadella, anunció nuevas inversiones en España.", "La Universidad de Buenos Aires fue fundada en 1821.", "María compró manzanas en el mercado central de Madrid." ] gr.Examples( examples=ejemplos, inputs=texto_input ) # Conectar el botón analizar_btn.click( fn=analizar_texto, inputs=texto_input, outputs=resultado_output ) if __name__ == "__main__": demo.launch()