Spaces:
Sleeping
Sleeping
| # 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() |