{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# UD03 · Notebook 12 — Un sistema de PLN de punta a punta\n", "\n", "**Requisitos**\n", "\n", "Va en el **contenedor de la unidad** (`docker compose up -d` en la carpeta de la UD03), o en\n", "cualquier Python 3.12+ con:\n", "\n", "```bash\n", "pip install nltk spacy scikit-learn\n", "python -m spacy download es_core_news_sm\n", "```\n", "\n", "Este taller **no necesita GPU ni Colab**.\n", "\n", "**Objetivo**: construir un **extractor de entidades** (NER) para textos de un dominio concreto con\n", "`spaCy`, siguiendo la metodología del CE g (tarea → datos → herramienta → implementar → evaluar →\n", "documentar).\n", "\n", "Es una **entrega evaluable**: se corrige con la rúbrica de su tarea en Moodle." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fase 1 — Define la tarea\n", "\n", "Elige un dominio (p. ej. **facturas**, **historias clínicas de ejemplo**, **noticias de\n", "tecnología**). Decide qué entidades quieres extraer (nombres de empresa, personas, lugares,\n", "fechas, importes, productos)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fase 2 — Datos\n", "\n", "Crea al menos **10 textos de ejemplo** del dominio en un fichero `textos.txt` (pueden ser\n", "inventados). Indica origen y licencia en el informe." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fase 3 — Implementa con spaCy" ] }, { "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": [], "source": [ "%pip install spacy\n", "# python -m spacy download es_core_news_sm # descomenta la primera vez\n", "\n", "import spacy\n", "\n", "nlp = spacy.load(\"es_core_news_sm\")\n", "\n", "# TU CÓDIGO: si es un extractor de entidades, añade un EntityRuler con tus patrones;\n", "# si es un matcher de preguntas, usa PhraseMatcher o Matcher\n", "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fase 4 — Evalúa\n", "\n", "Compara las entidades que devuelve spaCy con las que esperabas (anótalas a mano primero).\n", "Calcula cuántas acertó y dónde falló. ¿Qué patrones añadirías?" ] }, { "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": [], "source": [ "textos_prueba = [\n", " # TU CÓDIGO: al menos 10 textos de prueba\n", "]\n", "\n", "# TU CÓDIGO: ejecuta tu sistema sobre cada uno y anota si acierta\n", "..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**✏️ Respuesta**: exactitud aproximada y **los errores, leídos uno a uno**: ¿qué tienen en\n", "común?\n", "\n", "*(escribe aquí)*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fase 5 — Documenta\n", "\n", "Escribe en el informe: la **tarea**, el **origen/licencia de los datos**, la **herramienta**\n", "(spaCy + Matcher), las **reglas/patrones** usados, la **evaluación** (aciertos/fallos) y las\n", "**limitaciones** (dominio, textos fuera de contexto, ambigüedad)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fase 6 — Mejora (reto)\n", "\n", "Añade 2 patrones más de tu dominio (p. ej. fechas en formato \"dd/mm/aaaa\" o códigos de producto)\n", "y repite la evaluación. ¿Mejoró la cobertura?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Entrega\n", "\n", "Sube el **notebook ejecutado**, siguiendo los seis pasos de la metodología del §12.1.\n", "\n", "| Fase | Evidencia mínima |\n", "|---|---|\n", "| 1 | La tarea definida: qué entra, qué sale y para quién |\n", "| 2 | Los datos, con **origen, tamaño y licencia** |\n", "| 3 | El sistema implementado con spaCy y funcionando |\n", "| 4 | La evaluación sobre datos no vistos, con el análisis de errores |\n", "| 5 | La documentación: decisiones tomadas y **limitaciones asumidas** |\n", "| 6 | La mejora propuesta, aunque no esté implementada |\n", "\n", "Y la respuesta a: *¿por qué elegiste esa herramienta y no otra?* La respuesta buena habla de **los\n", "datos que tenías**, no de lo moderna que sea la técnica.\n", "\n", "**Soluciones**\n", "\n", "Las soluciones no se publican: se corrigen y comentan en clase." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "name": "python", "version": "3.12" } }, "nbformat": 4, "nbformat_minor": 5 }