Introducción al Procesamiento de Lenguaje Natural. Obligatorio Corrector Ortográfico en Python

Introducción al Procesamiento de Lenguaje Natural Obligatorio 2 - 2010 Introducción al Procesamiento de Lenguaje Natural Obligatorio 2 – 2010 Correc

3 downloads 97 Views 42KB Size

Story Transcript

Introducción al Procesamiento de Lenguaje Natural

Obligatorio 2 - 2010

Introducción al Procesamiento de Lenguaje Natural Obligatorio 2 – 2010 Corrector Ortográfico en Python Facultad de Ingeniería Instituto de Computación Grupo de Procesamiento de Lenguaje Natural El objetivo de este obligatorio es incorporar a nuestro editor de texto la detección de NPchunks y una primera aproximación al análisis de concordancia.

Nota previa - IMPORTANTE Se debe cumplir íntegramente el “Reglamento del Instituto de Computación ante Instancias de No Individualidad en los Laboratorios”, disponible en http://www.fing.edu.uy/inco/pm/uploads/Ense%f1anza/NoIndividualidad.pdf

En particular está prohibido utilizar documentación de otros grupos, de otros años, de cualquier índole, o hacer público código a través de cualquier medio (news, correo, papeles sobre la mesa, etc.). Forma de entrega La entrega se realizará a través del sitio del curso, en una página destinada a tal fin que se habilitará cerca de la fecha de entrega. Se debe entregar un solo archivo ' ob2.zip' que contenga los ítems descritos en el apartado Entregable. Fecha de entrega Los trabajos deberán ser entregados siguiendo el procedimiento descrito anteriormente antes del domingo 10 de octubre de 2010 a las 23:30 horas, sin excepciones. No se aceptará ningún trabajo pasada la citada fecha. Observaciones Si bien las herramientas que se utilizarán durante la construcción del laboratorio están disponibles para diversas plataformas, no son portables de manera transparente y para adaptar su funcionamiento en general se requiere cambiar varias secciones de código. Por tal motivo recomendamos que para la implementación del obligatorio se utilicen las versiones disponibles para la plataforma Windows.

Página 1 de 5

Introducción al Procesamiento de Lenguaje Natural

Obligatorio 2 - 2010

Descripción del problema En el obligatorio anterior se construyeron funcionalidades de tokenización, búsqueda en diccionario y análisis fonético del texto. En esta segunda etapa el objetivo es estudiar algunas tareas usuales en el procesamiento de lenguaje natural, utilizando métodos basados en reglas. El objetivo específico de la segunda entrega es la implementación de las siguientes funcionalidades: ● Chunking de sintagmas nominales ● Análisis de concordancia Det-Nom-Adj Además de las clases del módulo pln_commons utilizadas en la entrega anterior, en esta segunda etapa se utilizará la siguiente: Concordancia: Clase que contiene el análisis de validez de la concordancia de una palabra relativa a las demás palabras de la oración. Chunking de sintagmas nominales Dentro de un enunciado, un sintagma nominal es un grupo de palabras que forma un constituyente sintáctico con un núcleo nominal. Por ejemplo, en la frase: “Vivía en la casa de rejas verdes.” podemos encontrar los siguientes sintagmas nominales: ●[la casa de rejas verdes]SN ●[la casa]SN ●[rejas verdes]SN Un NP-chunk (chunk de sintagma nominal, o noun-phrase chunk en inglés), es un sintagma nominal con la condición extra de que no puede contener otros sintagmas nominales. En el ejemplo anterior los NP-chunks que podemos encontrar son: ●[la casa]SN ●[rejas verdes]SN La tarea de identificar NP-chunks en un texto (conocida como chunking o shallow parsing) puede ser resuelta mediante técnicas de estado finito, obteniendo en general buenos resultados (por más información ver [1]). Pero para utilizar estas técnicas, es necesario conocer por lo menos las categorías gramaticales de cada una de las palabras del enunciado, por lo tanto haremos uso de un analizador morfológico que incluye la información de POS-tagging, descrito en la siguiente sección. El formato de salida del método que construiremos será un árbol similar al que se obtendría realizando el parsing mediante una Gramática Libre de Contexto, pero más simple ya que solamente utilizaremos dos niveles. Recomendamos utilizar para ello las herramientas provistas por nltk [2], lo cual nos permitirá construir un árbol como el del siguiente ejemplo:

Métodos de la clase corrector a implementar para este requerimiento: crearChunkParser(self): nltk.chunk.api.ChunkParserI obtenerNPChunks(self, texto): nltk.tree.Tree

Página 2 de 5

Introducción al Procesamiento de Lenguaje Natural

Obligatorio 2 - 2010

Uso de FreeLing FreeLing [3] es un suite de herramientas para análisis de lenguaje natural que tiene muchas funcionalidades para el español. En esta tarea nos interesará el analizador morfológico para el español, que tiene un alto nivel de performance. Recomendamos utilizar la versión 2.0 de FreeLing para Windows, que puede obtenerse en [4]. Esta versión incluye un programa ejecutable desde la consola que lee el texto que se ingresa en la entrada estándar y devuelve su análisis en la salida estándar. Para ejecutar el programa es necesario especificar el archivo de configuración que utiliza, y trae varios archivos de configuración de ejemplo. Entre las opciones del archivo de configuración que utilicemos, es importante setear el atributo OutputFormat=tagged para que la salida sea el análisis morfológico. Además deshabilitaremos la opción de reconocimiento de entidades con nombre utilizando el atributo NERecognition=no Para el texto de entrada “Vivía en la casa de rejas verdes.”, FreeLing nos devolverá una salida como la siguiente: Vivía vivir VMII1S0 0.5 en en SPS00 1 la el DA0FS0 0.972146 casa casa NCFS000 0.971264 de de SPS00 0.999919 rejas reja NCFP000 1 verdes verde AQ0CP0 0.75 . . Fp 1

Cada línea representa un token reconocido, donde indica la palabra, el lema, el análisis morfológico y la probabilidad de que sea el análisis correcto. En este obligatorio nos interesará solamente el análisis morfológico, donde el primer caracter siempre es la categoría gramatical, y los demás caracteres representan información diferente según la categoría (por ejemplo género, número y persona, atributos que también deberemos utilizar). El detalle completo de los tags se puede ver en [5]. Se recomienda analizar la estructura de tags devuelta por FreeLing para cada palabra y generar una estructura en Python apropiada que nos permita utilizar la información morfológica cómodamente. Un problema que nos encontraremos al utilizar FreeLing, es que la herramienta realiza la tokenización de las palabras por sí misma, pero no nos devuelve información sobre las posiciones de inicio y fin de cada token en el texto. Esto es especialmente problemático en los casos en que FreeLing devuelve tokens que no se corresponden con el texto de entrada, por ejemplo para el texto “Fui al cine.” se obtiene el siguiente análisis: Fui ser VSIS1S0 0.7 a a SPS00 1 el el DA0MS0 1 cine cine NCMS000 1 . . Fp 1

Notar que la contracción “al” es sustituida por dos tokens “a” y “el”. De manera similar la contracción “del” es separada en “de” y “el”, y también se separan los sufijos clíticos de los verbos: “contárselo” lo separa en “contar”, “se” y “lo”. También ocurre la situación opuesta, en que FreeLing agrupa algunos conjuntos de palabras que actúan como locución, por ejemplo: “a pesar de” lo devuelve como un solo token “a_pesar_de”, etiquetado como preposición. Por lo tanto en la implementación a realizar hay que tener especial cuidado en alinear la salida de FreeLing con los tokens que ya analizamos para nuestro texto. Página 3 de 5

Introducción al Procesamiento de Lenguaje Natural

Obligatorio 2 - 2010

Análisis de concordancia Det-Nom-Adj Como se vio durante las clases de parsing, las gramáticas libres de contexto usuales nos permiten obtener un tipo de análisis sintáctico de una oración, pero no permiten en general verificar la concordancia entre las palabras. Para eso se necesita realizar algún procesamiento extra. En esta entrega nos enfocaremos en la concordancia tipo Det-Nom-Adj, es decir, la concordancia de género y número entre los determinantes, nombres y adjetivos que se refieran a una misma entidad. Observemos los siguientes ejemplos: ●los perros negros → la concordancia es correcta ●*la casas → hay un error de concordancia de número entre el núcleo y el determinante ●*el cuaderno roja → hay un error de concordancia de género entre el núcleo y el adjetivo A modo de simplificación, se pedirá revisar la concordancia solamente dentro de los sintagmas nominales, aunque tampoco se considerará incorrecto si se intenta resolver el problema para un caso más general, donde otras palabras fuera del sintagma deban concordar. Por ejemplo, no es necesario reportar el siguiente error: ●*el día era calurosas → error de concordancia en género y número entre “día” y “calurosas” La concordancia debe existir entre el núcleo del sintagma (un sustantivo) y el resto de los componentes, pero notar que si existen sintagmas preposicionales, el núcleo no tiene por qué concordar con ellos. Por ejemplo: ●el galpón grande de paredes negras → la concordancia es correcta, a pesar de que “el galpón grande” es masculino singular y “paredes negras” es femenino plural. Por lo tanto, alcanza con revisar la concordancia Det-Nom-Adj para las palabras contenidas dentro de un NP-chunk. Considerar que el género y número “correcto” es el del sustantivo que representa el núcleo del NP-chunk, y marcar error de concordancia en el resto de los tokens que no concuerden. El método a implementar debe devolver el texto separado en tokens igual a la primera entrega, pero marcando los errores de concordancia donde corresponda. Métodos de la clase corrector a implementar para este requerimiento: revisarConcordancia(self, texto, ini): list of TokenTexto

Entregable Se deberá entregar: 1. Documentación que incluya: a) detalle del funcionamiento del chunker b) módulos que componen la solución c) descripción de la solución implementada, incluyendo los principales aspectos teóricos aplicados, pseudocódigo de los métodos d) instrucciones de configuración de la solución (por ejemplo para el uso de FreeLing) 1. Implementación: a) Código fuente de la solución, implementando los métodos de pln_corrector e incluyendo todos los otros módulos que sean necesarios. b) No incluir en la entrega los ejecutables o la información lingüística de FreeLing, en caso de se utilice la versión recomendada, pero dejar instrucciones claras de configuración de la herramienta para que pueda utilizarse. c) Otros archivos que sean necesarios para ejecutar la solución. Por ejemplo: archivos para la carga del diccionario, archivos de configuración, módulos externos a Python. Página 4 de 5

Introducción al Procesamiento de Lenguaje Natural

Obligatorio 2 - 2010

Insumos En la página del curso se provee una nueva versión de editor_texto y las firmas de los métodos de pln_corrector para la implementación del obligatorio. Nota Es necesario que en el informe figuren el nombre y la cédula de identidad de cada integrante del grupo. En caso que esto no se cumpla el obligatorio no será corregido, con la consecuente pérdida del curso de sus autores. Solo se aceptarán informes en formato PDF (ver http://www.universidad.edu.uy/odfpdf/). Referencias [1] Speech and Language Processing, D. Jurafsky, J. Martin, Capítulo 13, “Syntactic Parsing” [2] Natural Language Processing with Python, http://nltk.googlecode.com/svn/trunk/doc/book/ch07.html

Sección

7.2,

“Chunking”,

[3] FreeLing, An Open Source Suite of Language Analyzers, http://nlp.lsi.upc.edu/freeling/ [4] Using the FreeLing Analyzer Program under Windows, http://www.smo.uhi.ac.uk/~oduibhin/oideasra/interfaces/winfreeling.htm [5] Introducción a las Etiquetas Eagles, http://nlp.lsi.upc.edu/freeling/doc/userman/parolees.html

Página 5 de 5

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.