diff --git a/Semana 01/01-Spacy.ipynb b/Semana 01/01-Spacy.ipynb
new file mode 100644
index 00000000000..60c5a7b940d
--- /dev/null
+++ b/Semana 01/01-Spacy.ipynb
@@ -0,0 +1,799 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "x_ELGedbTEvV"
+ },
+ "source": [
+ "
\n",
+ "\n",
+ "\n",
+ "\n",
+ "# Lista 1 - spaCy\n",
+ "\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Q8y9-tiGa321"
+ },
+ "source": [
+ "\n",
+ "\n",
+ "---\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "387KBr8bTEvY"
+ },
+ "source": [
+ "O [spaCy](\"https://spacy.io/") é uma bilbioteca Python de código fonte [aberto](\"https://github.com/explosion/spaCy/") para Processamento de\n",
+ "Linguagem Natural, constantemente atualizada e mantida. Essa biblioteca é capaz de\n",
+ "processar diversas línguas, inclusive o português.\n",
+ "\n",
+ "### Instalação\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "id": "8z9R44NUThZb",
+ "outputId": "6b8b4a3a-4c8f-4a38-b69a-016034e8885f",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Requirement already satisfied: spacy in /usr/local/lib/python3.11/dist-packages (3.7.5)\n",
+ "Collecting spacy\n",
+ " Downloading spacy-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (27 kB)\n",
+ "Requirement already satisfied: spacy-legacy<3.1.0,>=3.0.11 in /usr/local/lib/python3.11/dist-packages (from spacy) (3.0.12)\n",
+ "Requirement already satisfied: spacy-loggers<2.0.0,>=1.0.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (1.0.5)\n",
+ "Requirement already satisfied: murmurhash<1.1.0,>=0.28.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (1.0.12)\n",
+ "Requirement already satisfied: cymem<2.1.0,>=2.0.2 in /usr/local/lib/python3.11/dist-packages (from spacy) (2.0.11)\n",
+ "Requirement already satisfied: preshed<3.1.0,>=3.0.2 in /usr/local/lib/python3.11/dist-packages (from spacy) (3.0.9)\n",
+ "Collecting thinc<8.4.0,>=8.3.4 (from spacy)\n",
+ " Downloading thinc-8.3.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (15 kB)\n",
+ "Requirement already satisfied: wasabi<1.2.0,>=0.9.1 in /usr/local/lib/python3.11/dist-packages (from spacy) (1.1.3)\n",
+ "Requirement already satisfied: srsly<3.0.0,>=2.4.3 in /usr/local/lib/python3.11/dist-packages (from spacy) (2.5.1)\n",
+ "Requirement already satisfied: catalogue<2.1.0,>=2.0.6 in /usr/local/lib/python3.11/dist-packages (from spacy) (2.0.10)\n",
+ "Requirement already satisfied: weasel<0.5.0,>=0.1.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (0.4.1)\n",
+ "Requirement already satisfied: typer<1.0.0,>=0.3.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (0.15.2)\n",
+ "Requirement already satisfied: tqdm<5.0.0,>=4.38.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (4.67.1)\n",
+ "Requirement already satisfied: numpy>=1.19.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (1.26.4)\n",
+ "Requirement already satisfied: requests<3.0.0,>=2.13.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (2.32.3)\n",
+ "Requirement already satisfied: pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4 in /usr/local/lib/python3.11/dist-packages (from spacy) (2.10.6)\n",
+ "Requirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from spacy) (3.1.6)\n",
+ "Requirement already satisfied: setuptools in /usr/local/lib/python3.11/dist-packages (from spacy) (75.1.0)\n",
+ "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (24.2)\n",
+ "Requirement already satisfied: langcodes<4.0.0,>=3.2.0 in /usr/local/lib/python3.11/dist-packages (from spacy) (3.5.0)\n",
+ "Requirement already satisfied: language-data>=1.2 in /usr/local/lib/python3.11/dist-packages (from langcodes<4.0.0,>=3.2.0->spacy) (1.3.0)\n",
+ "Requirement already satisfied: annotated-types>=0.6.0 in /usr/local/lib/python3.11/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy) (0.7.0)\n",
+ "Requirement already satisfied: pydantic-core==2.27.2 in /usr/local/lib/python3.11/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy) (2.27.2)\n",
+ "Requirement already satisfied: typing-extensions>=4.12.2 in /usr/local/lib/python3.11/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy) (4.12.2)\n",
+ "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests<3.0.0,>=2.13.0->spacy) (3.4.1)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests<3.0.0,>=2.13.0->spacy) (3.10)\n",
+ "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests<3.0.0,>=2.13.0->spacy) (2.3.0)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests<3.0.0,>=2.13.0->spacy) (2025.1.31)\n",
+ "Collecting blis<1.3.0,>=1.2.0 (from thinc<8.4.0,>=8.3.4->spacy)\n",
+ " Downloading blis-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.7 kB)\n",
+ "Requirement already satisfied: confection<1.0.0,>=0.0.1 in /usr/local/lib/python3.11/dist-packages (from thinc<8.4.0,>=8.3.4->spacy) (0.1.5)\n",
+ "Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.11/dist-packages (from typer<1.0.0,>=0.3.0->spacy) (8.1.8)\n",
+ "Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.11/dist-packages (from typer<1.0.0,>=0.3.0->spacy) (1.5.4)\n",
+ "Requirement already satisfied: rich>=10.11.0 in /usr/local/lib/python3.11/dist-packages (from typer<1.0.0,>=0.3.0->spacy) (13.9.4)\n",
+ "Requirement already satisfied: cloudpathlib<1.0.0,>=0.7.0 in /usr/local/lib/python3.11/dist-packages (from weasel<0.5.0,>=0.1.0->spacy) (0.21.0)\n",
+ "Requirement already satisfied: smart-open<8.0.0,>=5.2.1 in /usr/local/lib/python3.11/dist-packages (from weasel<0.5.0,>=0.1.0->spacy) (7.1.0)\n",
+ "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from jinja2->spacy) (3.0.2)\n",
+ "Requirement already satisfied: marisa-trie>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from language-data>=1.2->langcodes<4.0.0,>=3.2.0->spacy) (1.2.1)\n",
+ "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.11/dist-packages (from rich>=10.11.0->typer<1.0.0,>=0.3.0->spacy) (3.0.0)\n",
+ "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.11/dist-packages (from rich>=10.11.0->typer<1.0.0,>=0.3.0->spacy) (2.18.0)\n",
+ "Requirement already satisfied: wrapt in /usr/local/lib/python3.11/dist-packages (from smart-open<8.0.0,>=5.2.1->weasel<0.5.0,>=0.1.0->spacy) (1.17.2)\n",
+ "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.11/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer<1.0.0,>=0.3.0->spacy) (0.1.2)\n",
+ "Downloading spacy-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (30.6 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m30.6/30.6 MB\u001b[0m \u001b[31m16.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hDownloading thinc-8.3.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.9 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.9/3.9 MB\u001b[0m \u001b[31m51.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hDownloading blis-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.7 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m11.7/11.7 MB\u001b[0m \u001b[31m61.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hInstalling collected packages: blis, thinc, spacy\n",
+ " Attempting uninstall: blis\n",
+ " Found existing installation: blis 0.7.11\n",
+ " Uninstalling blis-0.7.11:\n",
+ " Successfully uninstalled blis-0.7.11\n",
+ " Attempting uninstall: thinc\n",
+ " Found existing installation: thinc 8.2.5\n",
+ " Uninstalling thinc-8.2.5:\n",
+ " Successfully uninstalled thinc-8.2.5\n",
+ " Attempting uninstall: spacy\n",
+ " Found existing installation: spacy 3.7.5\n",
+ " Uninstalling spacy-3.7.5:\n",
+ " Successfully uninstalled spacy-3.7.5\n",
+ "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
+ "en-core-web-sm 3.7.1 requires spacy<3.8.0,>=3.7.2, but you have spacy 3.8.4 which is incompatible.\u001b[0m\u001b[31m\n",
+ "\u001b[0mSuccessfully installed blis-1.2.0 spacy-3.8.4 thinc-8.3.4\n"
+ ]
+ }
+ ],
+ "source": [
+ "%pip install spacy -U"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "rnieqpc7TEva"
+ },
+ "source": [
+ "Após instalar o pacote spaCy devemos baixar as ferramentas específicas para o português com o seguinte comando:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "U2xrX5-cqK6b"
+ },
+ "outputs": [],
+ "source": [
+ "!python -m spacy download pt_core_news_sm"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Iv8ivfCnTEvd"
+ },
+ "source": [
+ "Uma vez que temos o pacote instalado e os módulos para português baixado, podemos começar a utilizar o spaCy, importando o pacote e carregando o módulo para português.\n",
+ "\n",
+ "**Nota:** Caso seus resultados sejam diferentes dos descritos neste texto isso provavelmente significa que você está utilizando uma versão diferente do spaCy, como essa ferramenta é atualizada com frequência não é incomum encontrar discrepâncias nos resultados."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "7pr5NflhTEve"
+ },
+ "outputs": [],
+ "source": [
+ "import spacy\n",
+ "import pt_core_news_sm\n",
+ "spacyPT = pt_core_news_sm.load()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 36
+ },
+ "id": "WUa8_JVmTEvf",
+ "outputId": "e381270a-8706-4e3f-da1f-9a2c652de5c6"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "'3.3.0'"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "string"
+ }
+ },
+ "metadata": {},
+ "execution_count": 6
+ }
+ ],
+ "source": [
+ "spacy.__version__"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "XCgdvPK1TEvg"
+ },
+ "source": [
+ "É importante notar que o spaCy assume que os caracteres estão codificados no formato utf-8. O primeiro passo portanto é gerar uma entrada nesse formato e submetê-la ao módulo carregado."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "_o7Q9inqTEvh",
+ "outputId": "3f2fe985-82e5-42c1-f475-50a1edab4f76"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "Mais vale um asno que me carregue que um cavalo que me derrube."
+ ]
+ },
+ "metadata": {},
+ "execution_count": 7
+ }
+ ],
+ "source": [
+ "entrada = spacyPT(\"Mais vale um asno que me carregue que um cavalo que me derrube.\")\n",
+ "entrada"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "BhoKGbccTEvi"
+ },
+ "source": [
+ "### Tokenização (itemização)\n",
+ "\n",
+ "A entrada que acabamos de gerar é uma sequência iterável de tokens (itens, \n",
+ "ou instâncias de palavras). Se quisermos verificar qual o texto contido nessa\n",
+ "sequência iterável, usamos:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 36
+ },
+ "id": "HZFtnbHUTEvj",
+ "outputId": "06d6e3f9-35eb-4e84-a280-03d170bf932b"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "'Mais vale um asno que me carregue que um cavalo que me derrube.'"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "string"
+ }
+ },
+ "metadata": {},
+ "execution_count": 8
+ }
+ ],
+ "source": [
+ "entrada.text"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "V5_1tofrTEvk"
+ },
+ "source": [
+ "Se quisermos dividir a entrada em token, podemos utilizar o método __split__:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "nG2rMfWYTEvm",
+ "outputId": "b665f13a-6cc9-4c31-ce92-c5861c86bd14"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "['Mais',\n",
+ " 'vale',\n",
+ " 'um',\n",
+ " 'asno',\n",
+ " 'que',\n",
+ " 'me',\n",
+ " 'carregue',\n",
+ " 'que',\n",
+ " 'um',\n",
+ " 'cavalo',\n",
+ " 'que',\n",
+ " 'me',\n",
+ " 'derrube.']"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 9
+ }
+ ],
+ "source": [
+ "entrada.text.split()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "oSpMSZrzTEvm"
+ },
+ "source": [
+ "Note que o ponto final foi absorvido pela palavra; o mesmo teria acontecido com\n",
+ "outros sinais de pontuação a utilizar o método __split__. Para separar a pontuação\n",
+ "das palavras utilizamos a tokenização implícita realizada pelo comando __in__:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "CyjtxYEMTEvm",
+ "outputId": "d0a5e9cc-752e-4027-ae83-cbb69cb6c97e"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[Mais, vale, um, asno, que, me, carregue, que, um, cavalo, que, me, derrube, .]"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 10
+ }
+ ],
+ "source": [
+ "[token for token in entrada]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "U9Fy34xoTEvn"
+ },
+ "source": [
+ "Note que os streams não estão entre aspas, pois na realidade esta lista contém uma sequência de objetos da classe __Token__.\n",
+ "\n",
+ "Se o objetivo é obter uma lista de Strings, podemos proceder da seguinte maneira.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "I5I-X9vJTEvn",
+ "outputId": "27340968-cb82-4d4d-9cc4-b380e2500491"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "['Mais',\n",
+ " 'vale',\n",
+ " 'um',\n",
+ " 'asno',\n",
+ " 'que',\n",
+ " 'me',\n",
+ " 'carregue',\n",
+ " 'que',\n",
+ " 'um',\n",
+ " 'cavalo',\n",
+ " 'que',\n",
+ " 'me',\n",
+ " 'derrube',\n",
+ " '.']"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 11
+ }
+ ],
+ "source": [
+ "[token.text for token in entrada]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "0EC2dnbRTEvp"
+ },
+ "source": [
+ "E para eliminar totalmente a pontuação da lista, é só restringirr a sua criação usando __is_punct__."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "UkTxxfstTEvp",
+ "outputId": "23999482-3d9c-4137-f182-2280efb668d1"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "['Mais',\n",
+ " 'vale',\n",
+ " 'um',\n",
+ " 'asno',\n",
+ " 'que',\n",
+ " 'me',\n",
+ " 'carregue',\n",
+ " 'que',\n",
+ " 'um',\n",
+ " 'cavalo',\n",
+ " 'que',\n",
+ " 'me',\n",
+ " 'derrube']"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 16
+ }
+ ],
+ "source": [
+ "[token.text for token in entrada if not token.is_punct]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "FJHmrb02TEvp"
+ },
+ "source": [
+ "O spaCy já vem treinado para realizar etiquetagem morfossintática (PoS tagging), o que pode ser mostrado da seguinte maneira."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "UfxFqqCbTEvq",
+ "outputId": "9b03e90e-56fd-4039-8b06-470aa97b3e41"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[('Mais', 'ADV'),\n",
+ " ('vale', 'VERB'),\n",
+ " ('um', 'DET'),\n",
+ " ('asno', 'NOUN'),\n",
+ " ('que', 'PRON'),\n",
+ " ('me', 'PRON'),\n",
+ " ('carregue', 'VERB'),\n",
+ " ('que', 'SCONJ'),\n",
+ " ('um', 'DET'),\n",
+ " ('cavalo', 'NOUN'),\n",
+ " ('que', 'PRON'),\n",
+ " ('me', 'PRON'),\n",
+ " ('derrube', 'VERB'),\n",
+ " ('.', 'PUNCT')]"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 17
+ }
+ ],
+ "source": [
+ "[(token.text, token.pos_) for token in entrada]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "icqdYydXTEvq"
+ },
+ "source": [
+ "A assistência do etiquetador nos permite fazer buscas bastante sofisticadas. Por exemplo podemos buscar os lemas de todos os verbos encontrados na sentença."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "gAUS7nCCTEvr",
+ "outputId": "1d560ea4-2aaf-4d9c-dd7f-ac594d335289"
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "['valer', 'carregar', 'derrube']"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 18
+ }
+ ],
+ "source": [
+ "[token.lemma_ for token in entrada if token.pos_ == 'VERB']"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "p6Mjy3wMTEvr"
+ },
+ "source": [
+ "Os lemas de verbos conjugados nos fornecem a sua forma infinitiva."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "V0bum0sCTEvs"
+ },
+ "source": [
+ "### Reconhecimento de entidades nomeadas\n",
+ "\n",
+ "A biblioteca já vem treinada com um mecanismo que permite o reconhecimento de\n",
+ "entidades nomeadas."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "VFmJt1pYTEvs",
+ "outputId": "bc9bd6f9-6fb8-4585-f1d0-bfdb9d5bc3bb"
+ },
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "(CBF, Comitê de Apelações da FIFA, Neymar, Copa América, Conmebol)\n"
+ ]
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[(CBF, 'ORG'),\n",
+ " (Comitê de Apelações da FIFA, 'ORG'),\n",
+ " (Neymar, 'PER'),\n",
+ " (Copa América, 'MISC'),\n",
+ " (Conmebol, 'ORG')]"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 15
+ }
+ ],
+ "source": [
+ "texto2 = spacyPT(\"A CBF fez um pedido de análise ao Comitê de Apelações da FIFA a fim de diminuir a pena do atacante Neymar, suspenso da Copa América pela Conmebol.\")\n",
+ "print(texto2.ents)\n",
+ "[(entidade,entidade.label_) for entidade in texto2.ents]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "ugIP-xrPTEvt"
+ },
+ "source": [
+ "___________________________\n",
+ "# Questão 1 \n",
+ "\n",
+ "Utilizando o spacy, extraia o nome dos personagens presentes no terceiro capitulo da obra \"Mémorias postumas de Brás Cubas\" de Machado de Assis"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "NuRJF6YcTEvt",
+ "outputId": "1dcc310c-d751-4053-f0d7-8603274e49d1",
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'Mas, já que falei nos meus dois tios, deixem-me fazer aqui um curto esboço genealógico. O fundador de minha família foi um certo Damião Cubas, que floresceu na primeira metade do século XVIII. Era tanoeiro de ofício, natural do Rio de Janeiro, onde teria morrido na penúria e na obscuridade, se somente exercesse a tanoaria. Mas não; fez-se lavrador, plantou, colheu, permutou o seu produto por boas e honradas patacas, até que morreu, deixando grosso cabedal a um filho, o licenciado Luís Cubas. Neste rapaz é que verdadeiramente começa a série de meus avós -- dos avós que a minha família sempre confessou - porque o Damião Cubas era afinal de contas um tanoeiro, e talvez mau tanoeiro, ao passo que o Luís Cubas estudou em Coimbra, primou no Estado, e foi um dos amigos particulares do vice-rei conde da Cunha. Como este apelido de Cubas lhe cheirasse excessivamente a tanoaria, alegava meu pai, bisneto do Damião, que o dito apelido fora dado a um cavaleiro, herói nas jornadas da Africa, em prêmio da façanha que praticou arrebatando trezentas cubas ao mouros. Meu pai era homem de imaginação; escapou à tanoaria nas asas de um calembour. Era um bom caráter, meu pai, varão digno e leal como poucos. Tinha, é verdade, uns fumos de pacholice; mas quem não é um pouco pachola nesse mundo? Releva notar que ele não recorreu à inventiva senão depois de experimentar a falsificação; primeiramente, entroncou-se na família daquele meu famoso homônimo, o capitão-mor Brás Cubas, que fundou a vila de São Vicente, onde morreu em 1592, e por esse motivo é que me deu o nome de Brás. Opôs-se-lhe, porém, a família do capitão-mor, e foi então que ele imaginou as trezentas cubas mouriscas. Vivem ainda alguns membros de minha família, minha sobrinha Venância, por exemplo, o lírio-do-vale, que é a flor das damas do seu tempo; vive o pai, o Cotrim, um sujeito que... Mas não antecipemos os sucessos; acabemos de uma vez com o nosso emplasto. '"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "cap_3_bras_cubas = \"Mas, já que falei nos meus dois tios, deixem-me fazer aqui um curto esboço genealógico. O fundador de minha família foi um certo Damião Cubas, que floresceu na primeira metade do século XVIII. Era tanoeiro de ofício, natural do Rio de Janeiro, onde teria morrido na penúria e na obscuridade, se somente exercesse a tanoaria. Mas não; fez-se lavrador, plantou, colheu, permutou o seu produto por boas e honradas patacas, até que morreu, deixando grosso cabedal a um filho, o licenciado Luís Cubas. Neste rapaz é que verdadeiramente começa a série de meus avós -- dos avós que a minha família sempre confessou - porque o Damião Cubas era afinal de contas um tanoeiro, e talvez mau tanoeiro, ao passo que o Luís Cubas estudou em Coimbra, primou no Estado, e foi um dos amigos particulares do vice-rei conde da Cunha. Como este apelido de Cubas lhe cheirasse excessivamente a tanoaria, alegava meu pai, bisneto do Damião, que o dito apelido fora dado a um cavaleiro, herói nas jornadas da Africa, em prêmio da façanha que praticou arrebatando trezentas cubas ao mouros. Meu pai era homem de imaginação; escapou à tanoaria nas asas de um calembour. Era um bom caráter, meu pai, varão digno e leal como poucos. Tinha, é verdade, uns fumos de pacholice; mas quem não é um pouco pachola nesse mundo? Releva notar que ele não recorreu à inventiva senão depois de experimentar a falsificação; primeiramente, entroncou-se na família daquele meu famoso homônimo, o capitão-mor Brás Cubas, que fundou a vila de São Vicente, onde morreu em 1592, e por esse motivo é que me deu o nome de Brás. Opôs-se-lhe, porém, a família do capitão-mor, e foi então que ele imaginou as trezentas cubas mouriscas. Vivem ainda alguns membros de minha família, minha sobrinha Venância, por exemplo, o lírio-do-vale, que é a flor das damas do seu tempo; vive o pai, o Cotrim, um sujeito que... Mas não antecipemos os sucessos; acabemos de uma vez com o nosso emplasto. \"\n",
+ "cap_3_bras_cubas"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "CG6FJniETEvu"
+ },
+ "outputs": [],
+ "source": [
+ "#Seu código aqui"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "ujmz8q2jTEvv"
+ },
+ "source": [
+ "Quais destas repostas estão corretas? Quais personagens estão faltando?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "3AxVwxhJTEvv"
+ },
+ "source": [
+ "** Sua resposta aqui **\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "3juZmY0jTEvx"
+ },
+ "source": [
+ "# Questão 2 \n",
+ "\n",
+ "Extraia todos os pronomes deste capitulo.\n",
+ "\n",
+ "_____________\n",
+ "** Sua resposta aqui **\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "SrMsM33ZTEvw"
+ },
+ "outputs": [],
+ "source": [
+ "#Seu código aqui"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "4bW_x8XHTEvx"
+ },
+ "source": [
+ "# Questão 3 \n",
+ "Utilize os visualizadores para explorar o mapa de dependencias de uma frase a sua escolha deste capitulo.\n",
+ "https://spacy.io/usage/visualizers/n",
+ "\n",
+ "Você pode acessar diretamente uma frase especifica ao utilizar o gerador \"sents\", por exemplo:\n",
+ "\n",
+ "```python\n",
+ "frases = [frase for frase in texto.sents]\n",
+ "frases[2]\n",
+ "\n",
+ "\n",
+ "Era tanoeiro de ofício, natural do Rio de Janeiro LOC , onde teria morrido na penúria e na obscuridade, se somente exercesse a tanoaria.\n",
+ "```\n",
+ "\n",
+ "\n",
+ "_______________\n",
+ "\n",
+ "\n",
+ "** Sua resposta aqui **"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "mqUiCknrTEvy"
+ },
+ "outputs": [],
+ "source": [
+ "from spacy import displacy"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "9AWMKGioTEvy"
+ },
+ "outputs": [],
+ "source": [
+ "#Seu código aqui"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "mmCGp6yNTEvz"
+ },
+ "source": [
+ "# Fontes\n",
+ "Tanto o capitulo utilizado nesta aula quanto a obra completa fazem parte do dominio publico e podem ser encontrados em http://www.dominiopublico.gov.br/download/texto/bv000215.pdf"
+ ]
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "name": "Copy of 01-Spacy.ipynb",
+ "provenance": [],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "display_name": ".venv_tutorial",
+ "language": "python",
+ "name": ".venv_tutorial"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
\ No newline at end of file
diff --git a/cachematrix.R b/cachematrix.R
index a50be65aa44..0d36632eb58 100644
--- a/cachematrix.R
+++ b/cachematrix.R
@@ -1,15 +1,61 @@
-## Put comments here that give an overall description of what your
-## functions do
+## JHDS Certification - R Programming
+##
+## Rodrigo Duran :: https://github.com/rduran/ProgrammingAssignment2
+##
+## Assignment: Caching the Inverse of a Matrix
+##
+## Computing the inverse of a square matrix can be done with the solve function
+## in R. For example, if X is a square invertible matrix, then solve(X) returns
+## its inverse.
+##
+## For this assignment, assume that the matrix supplied is always invertible.
-## Write a short comment describing this function
+##
+## makeCacheMatrix: This function creates a special "matrix" object that can cache
+## its inverse
+##
makeCacheMatrix <- function(x = matrix()) {
-
+ cached <<- NULL
+
+ ## makes sure that cached element is empty
+ set <- function(y) {
+ x <<- y
+ cached <<- NULL
+ }
+
+ ## Retreives the original matrix
+ get <- function() x
+
+ ## Caches the inverse
+ setInverse <- function(x) cached <<- x
+
+ ## Retreives the cached value
+ getInverse <- function() cached
+
+ ## Expose the API for caching
+ list( set = set, get = get, setInverse = setInverse,
+ getInverse = getInverse)
}
-
-## Write a short comment describing this function
-
+##
+## cacheSolve: This function computes the inverse of the special "matrix"
+## returned by makeCacheMatrix above. If the inverse has already
+## been calculated (and the matrix has not changed), then the
+## cachesolve should retrieve the inverse from the cache.
+##
cacheSolve <- function(x, ...) {
- ## Return a matrix that is the inverse of 'x'
+ ## Retrieves the cached inverse matrix
+ inv_m <- x$getInverse()
+ if( !is.null(inv_m) ) {
+ message("getting cached data")
+ return(inv_m)
+ }
+
+ ## If the cached inverse matrix is null, proceed with calculation
+ m <- x$get() # Retrieves the orignal matrix
+ inv_m <- solve(m, ...) # Calculates the inverse matrix
+ x$setInverse(inv_m) # Caches the inverse matrix
+
+ inv_m
}