{ "metadata": { "name": "", "signature": "sha256:b092450323ea1bf6307c96b47827731fa859a1f7c78a17915e979a105b6bd86a" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Pr\u00e1ctica 7\n", "\n", "## Introducci\u00f3n\n", "\n", "En este primer ejercicio vamos a jugar con uno de los corpus en espa\u00f1ol que est\u00e1 disponible desde NLTK: CESS_ESP, un *treebank* anotado a partir de una colecci\u00f3n de noticias en espa\u00f1ol. \n", "\n", "Este corpus est\u00e1 actualmente inclu\u00eddo en un recurso m\u00e1s amplio, el corpus [AnCora](http://clic.ub.edu/corpus/es) que desarrollan en la Universitat de Barcelona. Para m\u00e1s informaci\u00f3n, pod\u00e9is leer el art\u00edculo de M. Taul\u00e9, M. A. Mart\u00ed y M. Recasens \"[AnCora: Multilevel Annotated Corpora for Catalan and Spanish](http://www.lrec-conf.org/proceedings/lrec2008/pdf/35_paper.pdf)\". *Proceedings of 6th International Conference on Language Resources and Evaluation (LREC 2008)*. 2008. Marrakesh (Morocco).\n", "\n", "Antes de nada, ejecuta la siguiente celda para acceder al corpus y a otras herramientas que vamos a usar en este ejercicio." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from nltk.corpus import cess_esp\n", "import nltk" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ejercicio 1\n", "\n", "Carga en una variable llamada `palabras` las palabras del corpus `cess_esp` etiquetas morfol\u00f3gicamente. Imprime por pantalla:\n", "\n", "- las 50 primeras palabras del corpus.\n", "- el n\u00famero de palabras que contiene este corpus." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# escribe tu c\u00f3digo aqu\u00ed\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[(u'El', u'da0ms0'), (u'grupo', u'ncms000'), (u'estatal', u'aq0cs0'), (u'Electricit\\xe9_de_France', u'np00000'), (u'-Fpa-', u'Fpa'), (u'EDF', u'np00000'), (u'-Fpt-', u'Fpt'), (u'anunci\\xf3', u'vmis3s0'), (u'hoy', u'rg'), (u',', u'Fc'), (u'jueves', u'W'), (u',', u'Fc'), (u'la', u'da0fs0'), (u'compra', u'ncfs000'), (u'del', u'spcms'), (u'51_por_ciento', u'Zp'), (u'de', u'sps00'), (u'la', u'da0fs0'), (u'empresa', u'ncfs000'), (u'mexicana', u'aq0fs0'), (u'Electricidad_\\xc1guila_de_Altamira', u'np00000'), (u'-Fpa-', u'Fpa'), (u'EAA', u'np00000'), (u'-Fpt-', u'Fpt'), (u',', u'Fc'), (u'creada', u'aq0fsp'), (u'por', u'sps00'), (u'el', u'da0ms0'), (u'japon\\xe9s', u'aq0ms0'), (u'Mitsubishi_Corporation', u'np00000'), (u'para', u'sps00'), (u'poner_en_marcha', u'vmn0000'), (u'una', u'di0fs0'), (u'central', u'ncfs000'), (u'de', u'sps00'), (u'gas', u'ncms000'), (u'de', u'sps00'), (u'495', u'Z'), (u'megavatios', u'ncmp000'), (u'.', u'Fp'), (u'Una', u'di0fs0'), (u'portavoz', u'nccs000'), (u'de', u'sps00'), (u'EDF', u'np00000'), (u'explic\\xf3', u'vmis3s0'), (u'a', u'sps00'), (u'EFE', u'np00000'), (u'que', u'cs'), (u'el', u'da0ms0'), (u'proyecto', u'ncms000')]\n" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "F\u00edjate que las etiquetas que se usan en el treebank espa\u00f1ol son diferentes a las etiquetas que hab\u00edamos visto en ingl\u00e9s. Para empezar, el espa\u00f1ol es una lengua con una morfolog\u00eda m\u00e1s rica: si queremos reflejar el g\u00e9nero y el n\u00famero de los adjetivos, por ejemplo, no nos vale con etiquetar los adjetivos con una simple `JJ`.\n", "\n", "\n", "Echa un vistazo a las etiquetas morfol\u00f3gicas y trata de interpretar su significado. En estas primera 50 palabras encontramos:\n", "\n", "- `da0ms0`: determinante art\u00edculo masculino singular\n", "- `ncms000`: nombre com\u00fan masculino singular\n", "- `aq0cs0`: adjetivo calificativo de g\u00e9nero com\u00fan singular\n", "- `np00000`: nombre propio \n", "- `sps00`: preposici\u00f3n\n", "- `vmis3s0`: verbo principal indicativo pasado 3\u00aa persona del singular\n", "\n", "\n", "## Ejercicio 2\n", "\n", "Aqu\u00ed tienes el [la explicaci\u00f3n y el cat\u00e1logo completo de etiquetas](http://nlp.lsi.upc.edu/freeling/doc/tagsets/tagset-es.html) usadas en este corpus. A partir de lo que aprendas en el enlace anterior:\n", "\n", "- Imprime por pantalla solo las palabras etiquetadas como **formas verbales en 3\u00aa persona del plural del pret\u00e9rito perfecto simple de indicativo**.\n", "- Calcula qu\u00e9 porcentaje del total representan las palabras del corpus CEES_ESP etiquetadas como formas verbales en 3\u00aa persona del plural del pret\u00e9rito perfecto simple de indicativo." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# escribe tu c\u00f3digo aqu\u00ed\n" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Las etiquetas morfol\u00f3gicas que hemos visto son bastante complejas. NLTK permite cargar los corpus etiquetados con un conjunto de etiquetas simplificado utilizando la opcion `simplify_tags=True`. Para ello, ejecuta la siguiente celda y f\u00edjate c\u00f3mo hemos cargado una lista de oraciones etiquetadas con esta nueva versi\u00f3n de las etiquetas." ] }, { "cell_type": "code", "collapsed": false, "input": [ "oraciones = cess_esp.tagged_sents(simplify_tags=True)\n", "print oraciones[:2]" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Estas etiquetas son m\u00e1s sencillas, \u00bfverdad? B\u00e1sicamente tenemos `D` para determinante, `N` para nombre, `V` para verbo, `A` para adjetivo, `S` para preposici\u00f3n, etc.\n", "\n", "## Ejercicio 3\n", "\n", "Vamos a utilizar este corpus de etiquetas simplificadas para entrenar varios etiquetadores basados en ngramas, tal y como hicimos en clase y se explica en la presentaci\u00f3n `nltk-pos`. \n", "\n", "Construye de manera incremental cuatro etiquetadores.\n", "\n", "1. un etiquetador que por defecto asigne la categor\u00eda `N` a todas las palabras.\n", "2. un etiquetador basado en unigramas que aprenda a partir de la lista `oraciones` y utilice en etiquetador anterior como respaldo.\n", "3. un etiquetador basado en bigramas que aprenda a partir de la lista `oraciones` y utilice en etiquetador anterior como respaldo.\n", "4. un etiquetador basado en trigramas que aprenda a partir de la lista `oraciones` y utilice en etiquetador anterior como respaldo." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# escribe tu c\u00f3digo aqu\u00ed\n" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "# prueba tu etiquetador basado en trigramas con las siguientes oraciones que, con toda seguridad, no aparecen en el corpus\n", "print trigramTagger.tag(\"Este banco est\u00e1 ocupado por un padre y por un hijo. El padre se llama Juan y el hijo ya te lo he dicho\".split())\n", "print trigramTagger.tag(\"\"\"El presidente del gobierno por fin ha dado la cara para anunciar aumentos de presupuesto en Educaci\u00f3n y Sanidad a costa de dejar de subvencionar las empresas de los amigotes.\"\"\".split())\n", "print trigramTagger.tag(\"El cacique corrupto y la tonadillera se comer\u00e1n el turr\u00f3n en prisi\u00f3n.\".split())" ], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }