{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# Tu primer análisis con spaCy\n",
        "\n",
        "Cuaderno de apoyo al [tutorial de análisis lingüístico con spaCy](https://www.maquinashablantes.com/taller/primer-analisis-spacy). Ejecuta primero la instalación; luego prueba el texto y revisa las salidas del modelo."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 1. Instalar spaCy y el modelo de español\n",
        "\n",
        "La biblioteca y el modelo entrenado son paquetes separados."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "!pip -q install spacy\n",
        "!python -m spacy download es_core_news_sm"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 2. Analizar una oración"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "import spacy\n",
        "\n",
        "nlp = spacy.load(\"es_core_news_sm\")\n",
        "texto = (\n",
        "    \"Los alumnos de la Complutense presentaron ayer en Madrid \"\n",
        "    \"un corpus de cartas del siglo XVIII.\"\n",
        ")\n",
        "doc = nlp(texto)\n",
        "\n",
        "for token in doc:\n",
        "    print(token.text, token.lemma_, token.pos_, token.dep_, token.head.text, sep=\"\\t\")\n",
        "\n",
        "for entidad in doc.ents:\n",
        "    print(entidad.text, entidad.label_)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Cada fila muestra la forma, el lema, la categoría, la dependencia y el núcleo. Comprueba los casos ambiguos y los nombres propios con el texto de origen."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 3. Dibujar el árbol de dependencias\n",
        "\n",
        "Colab puede mostrar el SVG directamente debajo de la celda."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "from spacy import displacy\n",
        "from IPython.display import display, HTML\n",
        "\n",
        "svg = displacy.render(doc, style=\"dep\")\n",
        "display(HTML(svg))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 4. Prueba otra frase\n",
        "\n",
        "Cambia el texto por una oración que te interese, ejecuta de nuevo las celdas de análisis y compara qué decisiones cambian."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "texto = \"Ahorita le hablo a la licenciada Pérez.\"\n",
        "doc = nlp(texto)\n",
        "for token in doc:\n",
        "    print(token.text, token.lemma_, token.pos_, token.dep_, token.head.text, sep=\"\\t\")\n",
        "print([(ent.text, ent.label_) for ent in doc.ents])"
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}
