{ "cells": [ { "cell_type": "markdown", "id": "7bffde48", "metadata": { "id": "7bffde48" }, "source": [ "# Ciencia de Datos y Lenguaje Natural - **Notebook 1**" ] }, { "cell_type": "markdown", "id": "95b60fe0", "metadata": { "id": "95b60fe0" }, "source": [ "Este notebook consta de 3 partes. En la primera se resolverá \"manualmente\" ejercicios sobre conceptos lingüísticos y gramática del español. En la segunda se introduce el ambiente de trabajo en Python y se programan algunas funciones simples sobre textos. En la tercera parte se analizan los resultados de algunas herramientas de spaCy." ] }, { "cell_type": "markdown", "id": "b16161f2", "metadata": { "id": "b16161f2" }, "source": [ "#### Indique nombre, número de cédula y que carrera está cursando" ] }, { "cell_type": "code", "execution_count": null, "id": "6b206516", "metadata": { "id": "cbe84201" }, "outputs": [], "source": [ "__author__ = \"Nombre Apellido\"\n", "__cedula__ = \"1.234.567-8\"\n", "__origen__ = \"Grado. Ing. Computación\"" ] }, { "cell_type": "markdown", "id": "bc88027b", "metadata": {}, "source": [ "## I. Ejercicios sobre conceptos lingüísticos y aspectos del español \n", "*Referencia: Angela di Tullio y Marisa Malcuori*" ] }, { "cell_type": "markdown", "id": "97ddcc3b", "metadata": { "id": "RSL9M3OfdLzV" }, "source": [ "##### **1.** Clasifique según su morfología las siguientes palabras: \n", "\n", "1. leal \n", "1. desleal\n", "1. lealtad \n", "1. narcotráfico \n", "\n", "Proponga al menos otros dos ejemplos de cada uno de los tipos reconocidos.\n", "\n", "**Respuesta:**" ] }, { "cell_type": "markdown", "id": "973cd778", "metadata": {}, "source": [ "*Escriba aquí su respuesta*" ] }, { "cell_type": "markdown", "id": "u9PeSkOWdmUZ", "metadata": { "id": "u9PeSkOWdmUZ" }, "source": [ "##### **2.** Los siguientes pares de oraciones constan de constituyentes similares desde el punto de vista de las categorías a las que pertenecen. Sin embargo, algunas son ambiguas. Intente dar cuenta, mediante encorchetamiento y/o diagrama arbóreo, de las dos interpretaciones que admiten:\n", "\n", "(1) \n", "\n", "a. Miriam encontró la camisa de seda.\n", "\n", "b. Miriam encontró la camisa impecable.\n", "\n", "**Respuesta:**\n" ] }, { "cell_type": "markdown", "id": "6d39a2fe", "metadata": {}, "source": [ "*Escriba aquí su respuesta*" ] }, { "cell_type": "markdown", "id": "2eb85274", "metadata": {}, "source": [ "(2)\n", "\n", "a. Pedro ya guardó los apuntes y los libros de gramática.\n", "\n", "b. Pedro ya guardó los lápices y los libros de gramática.\n", "\n", "**Respuesta:**\n" ] }, { "cell_type": "markdown", "id": "2c74fc29", "metadata": {}, "source": [ "*Escriba aquí su respuesta*" ] }, { "cell_type": "markdown", "id": "9eedbdc0", "metadata": {}, "source": [ "(3) \n", "\n", "a. Ignacio habló con los estudiantes de su problema.\n", "\n", "b. Ignacio habló con los estudiantes de filosofía.\n", "\n", "**Respuesta:**\n" ] }, { "cell_type": "markdown", "id": "565c6569", "metadata": {}, "source": [ "*Escriba aquí su respuesta*" ] }, { "cell_type": "markdown", "id": "a3LYsvZ7dm-w", "metadata": { "id": "a3LYsvZ7dm-w" }, "source": [ "##### **3.** Las siguientes construcciones son ambiguas. Reconozca el tipo de ambigüedad que se da en cada caso:\n", "\n", "1. Llenó el tanque de agua. \n", "\n", "1. Los amigos de Carla y Pamela viajaron a Paraguay.\n", "\n", "1. El paciente inglés.\n", "\n", "1. La foto de Violeta.\n", "\n", "**Respuesta:**" ] }, { "cell_type": "markdown", "id": "1d9c845f", "metadata": {}, "source": [ "*Escriba aquí su respuesta*" ] }, { "cell_type": "markdown", "id": "ztn_08UGdoBK", "metadata": { "id": "ztn_08UGdoBK" }, "source": [ "##### 4. ¿Se mantiene la ambigüedad que ha reconocido en (3) en los siguientes ejemplos?\n", "\n", "1. Reparó el tanque de agua.\n", "1. El padre de Carla y Menem viajaron a Paraguay.\n", "1. El médico inglés,\n", "1. La camisa de Violeta.\n", "\n", "¿A qué tipo de información ha debido recurrir para dar cuenta de las diferencias?\n", "\n", "**Respuesta:**\n" ] }, { "cell_type": "markdown", "id": "82d6403d", "metadata": {}, "source": [ "*Escriba aquí su respuesta*" ] }, { "cell_type": "markdown", "id": "55452fe5", "metadata": {}, "source": [ "##### 5. Indique la categoría gramatical para cada una de las palabras de dos oraciones del siguiente fragmento de la novela \"La cacería\".\n", "\n", "Ésta es una novela singular, insólita en la literatura actual en lengua española. \n", "Relata las peripecias y combates de una goleta corsaria artiguista entre 1819 y 1821, \n", "durante la campaña naval que abarca el período de las invasiones portuguesas. \n", "A bordo de embarcaciones ligeras y audaces como ésa, marinos norteamericanos y de otras nacionalidades \n", "pelearon bajo el pabellón tricolor por la independencia de Uruguay, constituyendo la primera Marina de guerra de ese país.\n", "\n", "**Respuesta:**" ] }, { "cell_type": "markdown", "id": "07a28454", "metadata": {}, "source": [ "*Escriba aquí su respuesta*" ] }, { "cell_type": "markdown", "id": "e56c8868", "metadata": {}, "source": [ "## II. Python, funciones básicas sobre textos\n", "\n", "En esta parte se cargará un archivo de texto en memoria y se realiza un conjunto de rutinas sobre el texto. " ] }, { "cell_type": "markdown", "id": "a2381d22", "metadata": { "id": "3c9e80d2" }, "source": [ "### Lectura desde archivo\n", "\n", "En el siguiente bloque de código se carga el archivo 'La_divina_comedia-Dante_Alighieri.txt' en la variable 'texto'." ] }, { "cell_type": "code", "execution_count": null, "id": "0407f378", "metadata": {}, "outputs": [], "source": [ "f = open('./Cuentos_de_amor_de_locura_y_de_muerte-Horacio_Quiroga.txt')\n", "texto = f.read()\n", "f.close()" ] }, { "cell_type": "markdown", "id": "289b9f88", "metadata": {}, "source": [ "El texto del archivo es guardado como una *string*. En el siguiente bloque de código se puede ver el largo del archivo." ] }, { "cell_type": "code", "execution_count": null, "id": "73421272", "metadata": {}, "outputs": [], "source": [ "len(texto)" ] }, { "cell_type": "markdown", "id": "418f8e23", "metadata": {}, "source": [ "##### 1. Obtenga cantidad de oraciones y palabras.\n", "\n", "**a.** Cantidad de oraciones." ] }, { "cell_type": "code", "execution_count": null, "id": "c688c5ee", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "markdown", "id": "29892493", "metadata": {}, "source": [ "**b.** Cantidad de palabras." ] }, { "cell_type": "code", "execution_count": null, "id": "db23d6e7", "metadata": { "id": "e564d11d" }, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "markdown", "id": "cc243623", "metadata": {}, "source": [ "##### 2. Liste en orden de aparición las palabras con las siguientes características de su estructura interna:\n", "\n", "**a.** Palabras que empiezan con los prefijos: *des-*, *in-*, y *a-*. En el caso de *a-* debe estar seguido por una consonante. " ] }, { "cell_type": "code", "execution_count": null, "id": "f59bca98", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "markdown", "id": "346ac898", "metadata": {}, "source": [ "**b.** palabras que terminan con los siguientes sufijos: {ión,miento,mente,or}" ] }, { "cell_type": "code", "execution_count": null, "id": "e9226c52", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "markdown", "id": "56f37992", "metadata": {}, "source": [ "##### 3. Ordene las palabras del texto según su frecuencia. Despliéguela como una lista de pares (palabra, frecuencia).\n", "\n", "**a.** Liste las primeras 500 palabras más frequentes (orden descendente)" ] }, { "cell_type": "code", "execution_count": null, "id": "aff947bc", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "markdown", "id": "7d7ae83d", "metadata": {}, "source": [ "**b.** Liste las 500 palabras menos frequentes (orden ascendente)" ] }, { "cell_type": "code", "execution_count": null, "id": "a97b3af4", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "markdown", "id": "7f691707", "metadata": {}, "source": [ "##### 4. Utilice una lista de stopwords para el español.\n", "\n", "Cargue la lista de *stopwords* y realice nuevamente la parte **3.a.** filtrando. \n", "\n", "Lista de stopwords???" ] }, { "cell_type": "code", "execution_count": null, "id": "6e2e56b9", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "markdown", "id": "db254a7c", "metadata": {}, "source": [ "##### 5. Calcule todas las secuencias de bigramas sobre el texto. Liste los 100 bigramas más frecuentes indicando su frecuencia. Despliegue la salida como una lista de pares ('bigrama', frecuencia).\n", "\n", "**a.** incluyendo *stopwords*." ] }, { "cell_type": "code", "execution_count": null, "id": "ebf02027", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "markdown", "id": "b52de7a1", "metadata": {}, "source": [ "**b.** sin incluir *stopwords*" ] }, { "cell_type": "code", "execution_count": null, "id": "8851e278", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "markdown", "id": "73ebaf2f", "metadata": { "id": "cede6925" }, "source": [ "##### 6. Repita el exprimento anterior con trigramas (secuencias de tres palabras).\n", "\n", "**a.** incluyendo *stopwords*." ] }, { "cell_type": "code", "execution_count": null, "id": "cca0eaf8", "metadata": { "id": "9b78b410" }, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "markdown", "id": "8ee0ca32", "metadata": {}, "source": [ "**b.** sin incluir *stopwords*" ] }, { "cell_type": "code", "execution_count": null, "id": "01ac740f", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "markdown", "id": "f8351b30", "metadata": {}, "source": [ "##### 7. Despliegue los 10 cuatrigramas (secuencias de cuatro palabras) del texto más frecuentes junto a su frecuencia.\n" ] }, { "cell_type": "code", "execution_count": null, "id": "33ba0f04", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "markdown", "id": "ea22d610", "metadata": {}, "source": [ "## III. *spaCy*: Análisis de Dependencias y Reconocimiento de Entidades con Nombre\n", "\n", "En esta parte usando la librería spaCy se obtiene el análisis de dependencias y se realiza el reconocimiento de entidades con nombre a un conjunto de oraciones. \n", "\n", "En el código a continuación se puede ver un ejemplo con el módulo \"es_core_news_md\" (https://spacy.io/models/es): " ] }, { "cell_type": "code", "execution_count": null, "id": "4b020e42", "metadata": {}, "outputs": [], "source": [ "import spacy\n", "\n", "nlp = spacy.load(\"es_core_news_md\")\n", "doc = nlp(\"Y durante veinte horas la lluvia cerrada transformó al Paraná en aceite blanco, y al Paranaí en furiosa avenida.\")\n", "for token in doc:\n", " print(token.text, token.pos_, token.dep_)" ] }, { "cell_type": "markdown", "id": "f2196975", "metadata": {}, "source": [ "#### Visualización\n", "\n", "Para visualizar los resultados spaCy cuenta con displaCy. En los siguientes dos bloques de código se muestran ejemplos de uso para análisis de dependencias y NER (*Named Entity Recognition*). " ] }, { "cell_type": "code", "execution_count": null, "id": "acc74d2b", "metadata": {}, "outputs": [], "source": [ "from spacy import displacy\n", "displacy.render([doc], style=\"dep\")" ] }, { "cell_type": "code", "execution_count": null, "id": "36781063", "metadata": {}, "outputs": [], "source": [ "displacy.render([doc], style=\"ent\")" ] }, { "cell_type": "markdown", "id": "02a646aa", "metadata": {}, "source": [ "### Ejercicio\n", "\n", "Realice análisis de dependencias y NER usando spaCy las siguientes oraciones:\n", "\n", "**1.** Cayetano Maidana y Esteban Podeley, peones de obraje, volvían a Posadas en el Silex con quince compañeros.\n" ] }, { "cell_type": "code", "execution_count": null, "id": "cdf8e13e", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "code", "execution_count": null, "id": "c93d1e26", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "markdown", "id": "7447f40d", "metadata": {}, "source": [ "**Comente la correctitud de los resultados:**" ] }, { "cell_type": "markdown", "id": "b2aa7e27", "metadata": {}, "source": [ "*Escriba aquí su respuesta*" ] }, { "cell_type": "markdown", "id": "26167e31", "metadata": {}, "source": [ "**____**" ] }, { "cell_type": "markdown", "id": "7f246327", "metadata": {}, "source": [ "**2.** Mientras continuó el corso, y en Concordia se prolonga hasta horas increíbles, Nébel tendió incesantemente su brazo hacia adelante, tan bien que el puño de su camisa, desprendido, bailaba sobre la mano." ] }, { "cell_type": "code", "execution_count": null, "id": "7f2c41fb", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "code", "execution_count": null, "id": "2212ca43", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "markdown", "id": "d6ea5066", "metadata": {}, "source": [ "**Comente la correctitud de los resultados:**" ] }, { "cell_type": "markdown", "id": "d31b6174", "metadata": {}, "source": [ "*Escriba aquí su respuesta*" ] }, { "cell_type": "markdown", "id": "47ed1715", "metadata": {}, "source": [ "**____**" ] }, { "cell_type": "markdown", "id": "f9feaf7e", "metadata": {}, "source": [ "**3.** Tengo en el Salto Oriental dos primos, hoy hombres ya, que a sus doce años, y en consecuencia de profundas lecturas de Julio Verne, dieron en la rica empresa de abandonar su casa para ir a vivir al monte." ] }, { "cell_type": "code", "execution_count": null, "id": "ea8251b6", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "code", "execution_count": null, "id": "9aaa70ad", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "markdown", "id": "10f0eff4", "metadata": {}, "source": [ "**Comente la correctitud de los resultados:**" ] }, { "cell_type": "markdown", "id": "24caa08e", "metadata": {}, "source": [ "*Escriba aquí su respuesta*" ] }, { "cell_type": "markdown", "id": "20c4f85e", "metadata": {}, "source": [ "**____**" ] }, { "cell_type": "markdown", "id": "9a6673a2", "metadata": {}, "source": [ "**4.** Oración libre. Escriba una oración que considere adecuada." ] }, { "cell_type": "code", "execution_count": null, "id": "31b44636", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "code", "execution_count": null, "id": "978f86d9", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "markdown", "id": "b30e39a9", "metadata": {}, "source": [ "**Comente la correctitud de los resultados:**" ] }, { "cell_type": "markdown", "id": "4aa98a1f", "metadata": {}, "source": [ "*Escriba aquí su respuesta*" ] }, { "cell_type": "markdown", "id": "3f2ccf66", "metadata": {}, "source": [ "**____**" ] }, { "cell_type": "markdown", "id": "d393d594", "metadata": {}, "source": [ "**5.** Oración libre. Escriba una oración que considere adecuada." ] }, { "cell_type": "code", "execution_count": null, "id": "ea86ba5d", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "code", "execution_count": null, "id": "5e906625", "metadata": {}, "outputs": [], "source": [ "# Escriba aquí su respuesta" ] }, { "cell_type": "markdown", "id": "67ea97b0", "metadata": {}, "source": [ "**Comente la correctitud de los resultados:**" ] }, { "cell_type": "markdown", "id": "e087a9c4", "metadata": {}, "source": [ "*Escriba aquí su respuesta*" ] } ], "metadata": { "colab": { "collapsed_sections": [], "name": "CDLN-1-2.ipynb", "provenance": [] }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "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.10" } }, "nbformat": 4, "nbformat_minor": 5 }