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

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

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

Segunda Práctica. Teoría de Autómatas y Lenguajes Formales I. Escuela Politécnica Superior Universidad Autónoma de Madrid.

Introducción a la lingüística computacional

CASO DE PRUEBA: Sistema para el alquiler, control de películas y clientes en una videotienda

Proyecto 1: Construcción de una fuente de voltaje directo.

UTILICE ESTA MISMA PÁGINA COMO CARÁTULA DE SU TRABAJO

Tema: Análisis Léxico

Modelo Dinámico del Diseño del Software y Representación en UML. UNIDAD 9 Análisis y Diseño de Sistemas de Información

TRABAJO 1: CONSTRUCCIÓN Y SIMULACIÓN DE CIRCUITOS COMBINACIONALES SENCILLOS CON CIRCUITOS INTEGRADOS ESTANDAR

Tema 2 Introducción a la Programación en C.

Raúl

16 Análisis sintáctico I

Trabajo Final- Construcción de una aplicación RIA

Estrategia de Pruebas

Procesamiento de documentos XML.

Estructura de datos y de la información Boletín de problemas - Tema 10

(S.N.), mientras que el predicado está constituido por un sintagma verbal (S.V.). = SUJETO (S.N.) + PREDICADO (S.V.)

MS_10962 Advanced Automated Administration with Windows PowerShell

Sistema de Registro, Derivación y Monitoreo Chile Crece Contigo

MODULOS PARA LA PROMOCION DE PROGRAMAS SOCIALES

escritura 1º básico 2º básico 3º básico 4º básico 5º básico 6º básico

FACULTAD DE CIENCIAS ECONOMICAS

UNIDAD 6. LA SINTAXIS (Los complementos del verbo en castellano)

Anexo 1: Guía para la Presentación de Solicitudes de Cofinanciamiento

Universidad Autónoma Metropolitana Unidad Azcapotzalco. División de Ciencias Básicas e Ingeniería. Licenciatura en Ingeniería en Computación

GUIA PARA EL USUARIO REGISTRO NACIONAL DE SANCIONES DE DESTITUCION Y DESPIDO RNSDD

Curso. Lingüística Aplicada III (Procesamiento inteligente de textos)

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

ESQUEMA DEL PLAN DE TRABAJO DE INVESTIGACIÓN (PTI)

ORTOGRAFÍA Y GRAMÁTICA

UNIVERSIDAD DE PLAYA ANCHA FACULTAD DE HUMANIDADES. Vicerrectora Académica Dirección de Estudios, Innovación Curricular y Desarrollo Docente

4.2 ACTIVIDAD DE APRENDIZAJE 4.2: Diseñar el modelo relacional de la base de datos del sistema Descripción de la AA4.2:

clases cerradas: preposiciones, artículos, conjunciones, pronombres, complementantes.

GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos.

El sujeto y el sintagma nominal (apuntes urgentes para alumnos de 1º de ESO)

Serialización de datos en C# en Binario, Soap y Xml

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE INGENIERÍA CICLO BÁSICO DEPARTAMENTO DE ENSEÑANZAS GENERALES

Dirección de Contabilidad del Estado Julio 2015 GUÍA INCORPORACIÓN DE BIENES

Manual de usuario. Sistema de Registro y Consulta de Credencial. Nacional para Personas con Discapacidad

GUÍA DE ESTILO EN JAVA

b) Criterios específicos de evaluación. Se evaluarán sobre los siguientes criterios:

El Enfoque del Marco Lógico L a las ENDES. Introducción. Banco Mundial. Octubre, Programa MECOVI-Banco Mundial

SISTEMA DE AMBIENTES DE DESPACHO

Índice. Introducción. Introducción: análisis léxico. Tema 2. Primera parte. análisis. Objetivo: analizar las palabras del texto. Sintagmas: sintaxis.

GUÍA DE CONFIGURACIÓN DE LOS EQUIPOS PARA EL USO DE LA APLICACIÓN CONCECTA-CENTRALIZACIÓN

Guía práctica de estudio 03: Algoritmos

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES TRABAJO DE PRÁCTICAS. Convocatoria de junio de 2013

Guia de Ejericicios Aplicaciones Windows Forms

SGC.DIR.01. Revisión por la Dirección

De Cock, Barbara. Document type : Article de périodique (Journal article)

Una actividad de prueba con Edilim

Programa de Inmersión Parcial de Español del Condado de Arlington Rúbrica para la Destreza Escrita Primer Grado. Destrezas Descripción Comentarios

EL PAQUETE JAVA.UTIL DEL API JAVA. PRINCIPALES INTERFACES Y CLASES: STRINGTOKENIZER, DATE, CALENDAR, HASHSET, TREEMAP, TREESET...

ANEXO 1: DOCUMENTO ICONIX. Nº Requisito Funcional Prioridad 1 La aplicación será desarrollada en lenguaje JAVA. NF 1

Tarea 3 Búsqueda por Interpolación y Extrapolación

1. Introducción. 2. Componentes de la sintaxis. computacional. El análisis sintáctico es el esqueleto de. Dos problemas fundamentales:

Tema: Análisis Sintáctico

T ABLA DE MATERIAS. Capítulos preliminares

Proceso de Testing Funcional Independiente

J. Peña LENGUA LECTURA 1

FACULTAD DE MÚSICA COMUNICACIÓN ORAL Y ESCRITA PLANEAMIENTO Coordinadora: PROF. LIC. EMILCE TORRES DE PAREDES.

Introducción a Python

Microsoft Project 2013

MS_80546 Sales Management in Microsoft Dynamics CRM 2013

Etiquetado gramatical

Guía docente de la asignatura

LA GRAMÁTICA NO ES DRAMÁTICA

CICLO DE LICENCIATURA EN COMERCIO INTERNACIONAL

Registro Social para personas en situación de calle Mayo 2017

SISTEMA MÓDULOS BOLETAS PARA ESCUELA SCE

MANUAL DEL USUARIO SISTEMA INFORMATICO DE POSTULACION DE ENTIDADES REQUIRENTES PROGRAMA BECA LABORALES MARZO 2016

3. DOCUMENTACIÓN 3.1. DOCUMENTACIÓN DE APLICACIONES. OBJETIVOS PARA MODIFICAR HACE FALTA COMPRENDER/ESTUDIAR:

PLANES DE RECUPERACIÓN DE 1º ESO PARA SEPTIEMBRE - curso 2013/14 LENGUA CASTELLANA Y LITERATURA

LAS FORMAS NO PERSONALES DEL VERBO

Redacción del Proyecto Fin de Carrera 1

SIIGO CONTADOR. Creación Claves de Usuario. Cartilla I

Traducción automática en la SGAD. PLATA Plataforma de Traducción Automática.

Departamento de Filología PROGRAMACIÓN DIDÁCTICA. Nivel 3º ESO L. CASTELLANA

COMPLETADO DE ÓRDENES DE SERVICIO PARA YPF Y CONTRATISTAS

CONTENIDOS LENGUA 3º CURSO

PROCEDIMIENTO PARA GENERAR LOS REQUERIMIENTOS DE SELLOS DIGITALES

Manual de Usuario de la Aplicación Web Gestión de Convenio y Becas - RELEXT 2015 UNIVERSIDAD ESTATAL PENÍNSULA DE SANTA ELENA

> Capítulo 3. Los sustantivos. Aspectos semánticos: clases de sustantivos 29. > Capítulo 4. Los sustantivos. Aspectos morfológicos: género y número 37

Pontificia Universidad Católica del Ecuador

Inteligencia artificial

SICRES 3.0 Presentación Ejecutiva

Diseño de Compiladores I. Estructura General de un Compilador

Diseño Estructurado de Algoritmos

Instructivo para enviar la solicitud de categorización 2009

MANUAL DE USUARIO OVINOWEB. Gestión de explotaciones y guías Web

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Esquema Presentación Tarea3 Base de datos

I.E.S.S.Ma. ESPACIO CURRICULAR: INGLÉS TÉCNICO CARRERA: TECNICATURA SUPERIOR EN EVALUACIÓN Y GESTIÓN AMBIENTAL CURSO: 3º AÑO (2º CUATRIMESTRE)

Manual de Usuario para Proponentes

REGISTRO DE NUEVO USUARIO AL SISTEMA

Ingeniería a de Software CC51A

Procedimientos de captura de solicitudes fisicas al

Colegio de Escribanos de la Provincia de Buenos Aires

INSTRUCTIVO DEL USUARIO EXTERNO DEL REGISTRO DE USUARIOS DEL SITME (RUSITME)

Transcripción:

Introducción al Procesamiento de Lenguaje Natural Obligatorio 3 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 completar nuestro análisis de concordancia e incorporar la detección de entidades con nombre a nuestro editor de texto. 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 'ob3.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 7 de noviembre 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

Descripción del problema En el obligatorio anterior se construyeron funcionalidades básicas de corrección ortográfica, como por ejemplo la búsqueda de palabras en un diccionario, y la detección de errores de concordancia en un NP-chunk. En esta tercera etapa el objetivo es enriquecer nuestro corrector incorporando información de otras tareas usuales de PLN, utilizando para esto tanto métodos basados en reglas como estadísticos. El objetivo específico de la segunda entrega es la implementación de las siguientes funcionalidades: Identificación de Entidades con Nombre Parsing de dependencias Análisis de concordancia Sujeto-Verbo Identificación de entidades con nombre Una entidad con nombre es un sintagma nominal que refiere a un individuo específico en un dominio, por ejemplo una organización, una fecha, una persona o una localidad. A veces una misma entidad puede estar referenciada por secuencias de palabras diferentes, por ejemplo: ONU, Naciones Unidas y Organización de las Naciones Unidas. La tarea de reconocer entidades con nombre (NER, Named Entity Recognition) es una tarea compleja pero de mucha utilidad en varias aplicaciones de PLN, se puede leer más sobre el tema en [1. En este obligatorio nos concentraremos en el primero de los pasos que debe ejecutar un analizador de entidades con nombre: identificar qué porciones del texto se refieren a una entidad con nombre. Esta tarea de por sí no es trivial, consideremos los siguientes ejemplos: El fin de semana viajé a Buenos Aires. El doctor me recomendó que respirara buenos aires de montaña. En el primer caso se está hablando de una ciudad, mientras que en el segundo buenos aires es un sintagma nominal común. Una pista que nos puede indicar que el primer caso es una entidad con nombre está en que va escrito con mayúsculas en la primera letra. Esto puede servir como indicador, pero no se cumplirá necesariamente siempre, y en algunos casos (por ejemplo titulares de prensa que se escriban todos en mayúsculas) esta información no estará disponible. Para esta entrega se debe construir un clasificador que intente identificar y delimitar todas las entidades con nombre del texto, devolviéndolo en un formato de árbol análogo al utilizado para los NP-chunks. El programa a construir debe seguir un enfoque estadístico supervisado, por lo que se necesitará un conjunto de ejemplos. Para eso se recomienda utilizar el corpus CoNLL 2002 Named Entity Corpus en español que está disponible entre los corpus de nltk. Se utilizarán los tags en formato IOB, pero se puede descartar la información del tipo de tag ya que solamente estaremos delimitanto las porciones de texto pero no las clasificaremos por tipo. El tagger estadístico a construir utilizará una estrategia denominada N-gramas, que se basa en los modelos de lenguaje vistos en el curso. El framework nltk provee un conjunto de taggers de diversa complejidad que pueden utilizarse, estos taggers implementan todos la interfaz nltk.tag.api.taggeri pero tienen diferencias en cuanto a la forma de definirlos y entrenarlos. Se recomienda leer [2, especialmente las secciones 5.4 y 5.5, que contiene una descripción del funcionamiento de los taggers simples que pueden utilizarse para esta tarea, y explica cómo combinarlos. La idea es probar con diferentes combinaciones de taggers de N-gramas, y si es posible incorporar reglas como la de las mayúsculas. Página 2 de 5

Es importante reportar la estrategia de entrenamiento que se utilizó, así como la precisión y recall y la matriz de confusión que logra el clasificador construido sobre los ejemplos de testing. Se puede obtener más información sobre la construcción y testing de clasificadores, así como otras estrategias para clasificadores estadísticos en [3. Debido a que el entrenamiento de un tagger estadístico suele ser un proceso costoso, es recomendable que el mismo no se cree cada vez que levantamos el programa. Para lograr esto la nueva versión de pln_corrector provee un método de carga que utiliza la herramienta pickle de Python [4. El método hace lo siguiente: Busca un archivo ner_tagger.pickle en el directorio actual Si existe, carga el tagger a partir de este archivo Si no existe, crea el tagger invocando crearnertagger y guarda el resultado en el archivo ner_tagger.pickle De esta manera el proceso de entrenar el tagger se realiza una sola vez y se vuelve a levantar de disco cada vez que sea necesario. Pero recuerden que si se modificó el método de creación del tagger será necesario eliminar el archivo ner_tagger.pickle antes de ejecutar el editor para que el tagger se regenere. crearnertagger(self): nltk.tag.api.taggeri obtenerner(self, texto): nltk.tree.tree Modificar la implementación del método revisarortografia(texto: string, ini: int): list of TokenTexto para que antes de buscar en el diccionario las palabras, realice la detección de entidades con nombre, y no marque con error las palabras que formen parte de una entidad con nombre. Parsing de dependencias El tipo de parsing que vimos hasta el momento en el curso se centra principalmente en el análisis de la estructura sintagmática de la oración (phrase structure parsing). En el árbol de parsing generado mediante este enfoque usualmente tendremos un nodo raíz para la oración, y nodos intermedios que representan sintagmas o componentes de los sintagmas. Un enfoque diferente que también puede aplicarse se denomina parsing de dependencias, e implica establecer relaciones de dependencia directamente entre las palabras de la oración, sin utilizar los sintagmas como nodos intermedios [5. Por ejemplo, el parsing de dependencias para la oración Los niños comen pan en la mañana sería el siguiente: En la raíz del árbol de parsing está el verbo principal de la oración, y sus hijos (dependencias) son el sujeto, el objeto directo y el complemento. Uno de los posibles análisis que se pueden realizar utilizando FreeLing es el parsing de dependencias. Para lo cual se debe utilizar la opción OutputFormat=dep en el archivo de configuración. La salida de FreeLing para la oración del ejemplo sería: grup-verb/top/(comen comer VMIP3P0 -) [ sn/subj/(niños niño NCMP000 -) [ Página 3 de 5

espec-mp/espec/(los el DA0MP0 -) sn/obj/(pan pan NCMS000 -) grup-sp/cc/(en en SPS00 -) [ sn/head/(mañana mañana NCFS000 -) [ espec-fs/espec/(la el DA0FS0 -) Donde cada nodo identificado tiene la forma: categoría_sintagmática/función/(palabra lema análisis_morfológico -) En este obligatorio no nos interesará la categoría sintagmática, pero sí la función, que identifica el tipo de dependencia que tiene el nodo con su antecesor inmediato. Se pide implementar un método que invoque a FreeLing para que realice el parsing de dependencia del texto de entrada, y luego lo procese generando un objeto Tree de nltk que contenga en cada nodo la siguiente información: función/palabra/categoría_tipo Donde categoría_tipo representa categoría gramatical más el tipo dentro de la categoría, o sea los dos primeros caracteres del análisis morfológico obtenido por FreeLing. Para la oración de ejemplo obtendríamos un árbol de parsing similar al siguiente: La idea es que este método devuelva un solo árbol, lo cual corresponde a una sola oración. Por lo tanto, si el texto de entrada consta de más de una oración, se devolverá el análisis correspondiente solamente a la primera de ellas. obtenerparsingdependencias(self, texto): nltk.tree.tree Concordancia Sujeto-Verbo En el obligatorio anterior realizamos el análisis de concordancia entre determinantes, nombres y adjetivos dentro de un NP-chunk. En este obligatorio completaremos nuestro análisis verificando la concordancia entre el sujeto y el verbo de la oración. En una oración en español, el sujeto y el verbo conjugado deben concordar en persona y número. Observemos los siguientes ejemplos: los niños comen pan la concordancia es correcta * nosotros comen pan hay un error de concordancia de persona entre el sujeto nosotros (primera persona) y el verbo comen (tercera persona) * yo cantábamos hay un error de concordancia de número entre el sujeto yo (singular) y el verbo cantábamos (plural) Para esto resulta muy útil tener el parsing de dependencias de las oraciones, ya que en este tipo de análisis se identifica claramente cuál es el verbo principal (marcado con la función top) y el sujeto de la oración (marcado con la función subj). Tener en cuenta lo siguiente: En este obligatorio consideraremos, como simplificación, que un sujeto identificado por un sustantivo siempre se trata como tercera persona. Notar que en español sería válido decir frases como los humanos somos omnívoros, donde el verbo está conjugado en primera persona, pero no consideraremos estos casos. En el caso de que la oración utilice una forma verbal con participio, el verbo conjugado pasa a ser el auxiliar (por ejemplo Juan había cantado ). Sin embargo en el parsing de dependencias asigna la función top al participio. En estos casos se debe buscar el verbo marcado con la función aux para realizar el análisis de concordancia. En el caso de los gerundios (por ejemplo Juan estaba cantando ) también se asigna Página 4 de 5

el gerundio como top, pero FreeLing no siempre marca el aux como esperaríamos, por lo que no se debe considerar este caso para el análisis de concordancia. Tampoco considerar los casos de verbos modales (poder, deber), ya que FreeLing tampoco los marca como aux. Modificar la implementación del método revisarconcordancia(self, texto, ini): list of TokenTexto para que realice el análisis de concordancia Sujeto-Verbo además del análisis Det-Nom-Adj que ya realizaba. Cuando hay un error de concordancia Sujeto- Verbo, marcarlo en el token que corresponde al verbo. Entregable Se deberá entregar: Documentación que incluya: a) reporte detallado del funcionamiento del clasificador, qué ejemplos se utilizaron como entrenamiento y test, y análisis de los resultados obtenidos 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) 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. No incluir el archivo ner_tagger.pickle. 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. 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 Natural Language Processing with Python, Sección 7.5, Named Entity Recognition, http://nltk.googlecode.com/svn/trunk/doc/book/ch07.html [2 Natural Language Processing with Python, Capítulo 5, Categorizing and Tagging Words http://nltk.googlecode.com/svn/trunk/doc/book/ch05.html [3 Natural Language Processing with Python, Capítulo 6, Learning to Classify Text, http://nltk.googlecode.com/svn/trunk/doc/book/ch06.html [4 pickle - Python object serialization, http://docs.python.org/library/pickle.html [5 Natural Language Processing with Python, Sección 8.5, Dependencies and Dependency Grammar, http://nltk.googlecode.com/svn/trunk/doc/book/ch08.html Página 5 de 5