Download 1 - Cenidet
Document related concepts
Transcript
SEP SES DGEST CENTRO NACIONAL DE INVESTIGACIÓN Y DESARROLLO TECNOLÓGICO cenidet ANALIZADOR SINTÁCTICO DE ORACIONES EN ESPAÑOL USANDO EL MÉTODO DE DEPENDENCIAS T E S I S QUE PARA OBTENER EL GRADO DE MAESTRO EN CIENCIAS EN CIENCIAS DE LA COMPUTACIÓN P R E S E N T A: JOSÉ ANTONIO CERVANTES ALVAREZ _ D I R E C T O R D E T E S I S: DR. RODOLFO ABRAHAM PAZOS RANGEL C O D I R E C T O R D E T E S I S: M. C. JOSÉ ANTONIO ZÁRATE MARCELEÑO CUERNAVACA, MORELOS JULIO 2005 Dedicatoria Dedico esta tesis a mis padres Francisco Cervantes Martines y Ma. del Socorro Alvarez Toscano por el amor, la confianza y el apoyo que siempre me han brindado. Gracias ha ellos he podido cumplir mis metas. A mis hermanos José Francisco, Salvador y Martha Angélica Cervantes Alvarez por el cariño incondicional que nos témenos y el apoyo que siempre me han brindado. Agradecimientos Mis más sinceros agradecimientos a los miembros del comité tutorial de esta tesis: Dr. Guillermo Rodríguez Ortiz, Dr. Rodolfo Abraham Pazos Rangel, M.C. José Antonio Zarate Marceleño, M.C. José Luis Ramírez Alcántara y M.C. Olivia Graciela Fragoso Diaz. Por sus valiosas sugerencias y críticas acertadas, la cuales me ayudaron en el desarrollo de esta tesis. Particularmente agradezco al Dr. Rodolfo Abraham Pazos Rangel y al M.C. José Antonio Zarate Marceleño por dirigir esta tesis. Sin su apoyo, sugerencias y comentarios no hubiera sido posible culminar el desarrollo de este trabajo. Agradezco al Consejo del Sistema Nacional de Educación Tecnológica (CoSNET) por el apoyo económico que me otorgaron durante mis estudios. Agradezco a mis compañeros de generación por brindarme su apoyo, amistad y confianza, principalmente a Sonia López Ruiz, Rosy Ilda Basave Torres, Gabriel Hernández Méndez y Juan Arturo Pérez Cebreros. Le doy gracias a mi Dios por haberme dado la capacidad para poder realizar mis estudios y la fuerza necesaria para poder afrontar cada uno de los momentos difíciles de mi vida estudiantil. Agradezco a mis padres por todo el apoyo incondicional que me han brindado, sin ustedes nunca hubiera podido alcanzar mis metas. Son mi orgullo y el tesoro más grande que la vida me ha dado. Resumen Una de las características más importantes de los seres humanos es el dominio del lenguaje natural. Es difícil imaginar que se puedan realizar algunas actividades intelectuales sin involucrar frases en algún idioma. En la actualidad mucha de la información y de los conocimientos que la humanidad posee está migrando a los sistemas de cómputo, por lo que actualmente el uso de las computadoras se ha vuelto parte de nuestra vida cotidiana y laboral. Es por ello que actualmente ha surgido la necesidad de crear sistemas con una interfaz que permita la interacción con el usuario de una forma más natural. Desde la década de los 70s se ha tenido la inquietud de diseñar un sistema que sea capaz de comprender el lenguaje natural de las personas; sin embargo, hasta el momento la mayoría de los trabajos que se han realizado se encuentran enfocados hacia el inglés. Es por esta razón que desde la década pasada el grupo de sistemas distribuidos del CENIDET ha tenido la inquietud de trabajar en el ámbito de la problemática que se tiene para el acceso a datos en la red mundial. El objetivo de esta tesis es apoyar la investigación que se está realizando en esta área, la cual apenas ha comenzado a tomar una gran importancia en nuestro país. En este trabajo describimos cómo abordamos algunos de los problemas que existen para el procesamiento de lenguaje natural; en particular, el diseño e implementación de un analizador sintáctico para las oraciones en español usando el método de dependencias, y principalmente las oraciones interrogativas e imperativas. En este proyecto de tesis se implementó un analizador sintáctico flexible y dinámico con el objetivo de que el sistema pueda incrementar sus conocimientos lingüísticos sin mucha complejidad. vi Tabla de contenido Resumen ................................................................................................................ vi Índice de figuras ..................................................................................................... ix Índice de tablas ..................................................................................................... xii Capítulo 1. Introducción........................................................................1 1.1. Antecedentes ........................................................................................... 2 1.2. Objetivos de la tesis ................................................................................. 4 1.3. Justificación y beneficios.......................................................................... 5 1.4. Alcances y limitaciones ............................................................................ 6 1.5. Contenido de la tesis................................................................................ 8 Capítulo 2. Marco teórico....................................................................10 2.1. Procesamiento de lenguaje natural........................................................ 10 2.2. Clasificación de los analizadores sintácticos ......................................... 13 2.2.1. Analizador descendente ..................................................................... 13 2.2.2. Analizador ascendente ....................................................................... 15 2.3. Método de dependencias....................................................................... 19 2.4. Trabajos realizados a nivel mundial ....................................................... 23 2.5. Trabajos realizados en México .............................................................. 24 Capítulo 3. Diseño del analizador léxico.............................................27 3.1. Arquitectura del lexicón.......................................................................... 28 3.1.1. Etiquetas gramaticales ....................................................................... 29 3.1.2. Rasgos recurrentes de las etiquetas gramaticales ............................. 30 3.1.3. Rasgos particulares de las etiquetas gramaticales............................. 30 3.2. Analizador léxico .................................................................................... 37 3.2.1. Proceso de etiquetado........................................................................ 37 vii Capítulo 4. Diseño de la base de datos del conocimiento lingüístico .39 4.1. Diversidad numérica de valencias sintácticas........................................ 40 4.2. Ejemplo de patrones de manejo sintáctico para verbos......................... 41 4.3. Diseño general de la base de datos....................................................... 44 Capítulo 5. Diseño del analizador sintáctico.......................................48 5.1. Algoritmo de Earley................................................................................ 49 5.2. Diseño general del analizador sintáctico................................................ 57 5.3. Compendio de reglas gramaticales de producción ................................ 59 5.4. Diagrama de casos de uso .................................................................... 63 5.5. Diagrama de clases ............................................................................... 66 Capítulo 6. Pruebas del sistema.........................................................69 6.1. Compendio de oraciones ....................................................................... 69 6.2. Escenario de pruebas ............................................................................ 71 6.3. Caso de prueba 1. Análisis léxico y sintáctico de una oración ambigua 76 6.4. Caso de prueba 2. Configuración y uso de una nueva gramática.......... 80 6.5. Caso de prueba 3. Análisis léxico y sintáctico de una oración............... 84 6.6. Caso de prueba 4. Edición de reglas gramaticales de producción ........ 87 Capítulo 7. Conclusiones y trabajos futuros .......................................91 7.1. Conclusiones ......................................................................................... 92 7.2. Trabajos futuros ..................................................................................... 93 Referencias bibliográficas .................................................................................... 95 Manual de usuario................................................................................................ 98 Diagramas de secuencia .................................................................................... 105 viii Índice de figuras Figura 1.1. Arquitectura propuesta para la ILNBD....................................................... 3 Figura 1.2. Módulo de procesamiento de lenguaje natural.......................................... 4 Figura 2.1. Estado final. ............................................................................................ 14 Figura 2.2 Estrategia descendente (estado inicial).................................................... 14 Figura 2.3. Estrategia descendente (estado intermedio)........................................... 15 Figura 2.4. Estrategia descendente (estado intermedio)........................................... 15 Figura 2.5. Estrategia descendente (estado intermedio)........................................... 15 Figura 2.6. Estrategia descendente (estado final). .................................................... 15 Figura 2.7. Estrategia ascendente (estado inicial)..................................................... 16 Figura 2.8. Estrategia ascendente (estado final). ...................................................... 16 Figura 2.9. Árbol sintáctico parcial. ........................................................................... 18 Figura 2.10. Árbol sintáctico final. ............................................................................. 18 Figura 2.11. Árbol de constituyentes. ........................................................................ 21 Figura 2.12. Árbol de dependencias.......................................................................... 22 Figura 3.1. Diseño del lexicón. .................................................................................. 28 Figura 3.2. Proceso de etiquetado. ........................................................................... 38 Figura 4.1. Diseño de la base de datos del conocimiento lingüístico. ....................... 46 Figura 5.1. Grafo cíclico permitido............................................................................. 51 Figura 5.2. Grafo cíclico no permitido........................................................................ 51 Figura 5.3. Grafo cíclico no permitido........................................................................ 51 Figura 5.4. Grafo inicializado..................................................................................... 53 Figura 5.5. Aplicación de las reglas básicas.............................................................. 53 Figura 5.6. Aplicación de las reglas básicas.............................................................. 54 Figura 5.7. Proceso intermedio del algoritmo de Earley............................................ 55 Figura 5.8. Proceso intermedio del algoritmo de Earley............................................ 55 Figura 5.9. Proceso intermedio del algoritmo de Earley............................................ 55 Figura 5.10. Proceso intermedio del algoritmo de Earley. ......................................... 56 Figura 5.11. Grafo que representa una oración con dos estructuras sintácticas....... 56 ix Figura 5.12. Arquitectura general del analizador sintáctico....................................... 58 Figura 5.13. Diagrama de casos de uso.................................................................... 64 Figura 5.14. Diagrama de clases del análisis de oraciones. ..................................... 67 Figura 6.1. Información léxica y morfológica de verbos. ........................................... 72 Figura 6.2. Información léxica y morfológica de sustantivos. .................................... 72 Figura 6.3. Información léxica y morfológica de adjetivos. ........................................ 73 Figura 6.4. Información léxica y morfológica de artículos.......................................... 73 Figura 6.5. Información léxica de preposiciones ....................................................... 74 Figura 6.6. Tabla de verbos en infinitivo.................................................................... 74 Figura 6.7 Tabla de oraciones................................................................................... 75 Figura 6.8. Tabla de combinaciones. ........................................................................ 75 Figura 6.9 Tabla de patrones. ................................................................................... 76 Figura 6.10. Caso de prueba 1: Etiquetado léxico de una oración. ........................... 77 Figura 6.11. Caso de prueba 1: Mensaje de error del analizador sintáctico.............. 77 Figura 6.12 Caso de prueba 1: Resultado del analizador sintáctico en formato de texto........................................................................................................ 78 Figura 6.13. Caso de prueba 1: Árbol sintáctico de dependencias. .......................... 79 Figura 6.14. Caso de prueba 1: Árbol sintáctico de constituyentes........................... 79 Figura 6.15. Caso de prueba 2: Definición de nuevas reglas de producción. ........... 80 Figura 6.16. Caso de prueba 2: Ventana para configurar el sistema. ....................... 81 Figura 6.17. Caso de prueba 2: Etiquetado léxico de una oración. ........................... 82 Figura 6.18. Caso de prueba 2: Árbol sintáctico de dependencias. .......................... 83 Figura 6.19. Caso de prueba 2: Árbol sintáctico de constituyentes........................... 83 Figura 6.20. Caso de prueba 3: Etiquetado léxico de una oración. ........................... 85 Figura 6.21 Caso de prueba 3: Resultado del analizador sintáctico en formato de texto........................................................................................................ 86 Figura 6.22. Caso de prueba 3: Primer árbol sintáctico de dependencias. ............... 87 Figura 6.23. Caso de prueba 3: Segundo árbol sintáctico de dependencias. ........... 87 Figura 6.24. Caso de prueba 4: Mensaje de error del analizador sintáctico.............. 88 Figura 6.25. Caso de prueba 4: Primer árbol sintáctico de constituyentes................ 89 Figura 6.26. Caso de prueba 4: Segundo árbol sintáctico de constituyentes............ 90 x Figura A.1. Entorno gráfico del sistema. ................................................................... 99 Figura A.2. Ventana para configurar sistema. ......................................................... 100 Figura A.3. Ventana para definir nuevas reglas gramaticales. ................................ 102 Figura A.4. Ventana para editar reglas gramaticales. ............................................. 103 Figura A.5. Ventana de ayuda del analizador sintáctico.......................................... 104 Figura B.1. Secuencia para crear un archivo con reglas de producción. ................ 107 Figura B.2. Secuencia para editar un archivo de reglas de producción. ................. 109 Figura B.3. Secuencia para configurar el sistema. .................................................. 110 Figura B.4. Secuencia para analizar una oración.................................................... 113 xi Índice de tablas Tabla 3.1. Categorías gramaticales........................................................................... 29 Tabla 3.2. Rasgos recurrentes de las categorías gramaticales................................. 30 Tabla 3.3. Rasgos particulares del verbo. ................................................................. 31 Tabla 3.4. Rasgos particulares de los sustantivos. ................................................... 32 Tabla 3.5. Rasgos particulares de los adjetivos ........................................................ 33 Tabla 3.6. Rasgos particulares de los pronombres. .................................................. 34 Tabla 3.7. Rasgos particulares de las locuciones. .................................................... 36 Tabla 3.8. Categorías gramaticales sin rasgos. ........................................................ 36 Tabla 4.1. Diversas valencias sintácticas de verbos. ................................................ 41 Tabla 4.2 Caracteres especiales de la tabla de patrones.......................................... 47 Tabla 5.1. Categoría gramatical de símbolos no terminales...................................... 59 Tabla 5.2. Categoría gramatical de símbolos terminales. ......................................... 60 Tabla 5.3. Reglas gramaticales de producción.......................................................... 60 xii Capítulo 1 Introducción Es difícil imaginar que se puedan realizar algunas actividades intelectuales sin involucrar la comunicación en algún idioma ya sea de forma verbal o escrita. En la actualidad la humanidad posee una gran cantidad de conocimientos, los cuales se han ido acumulando a través de los siglos. La mayor parte de estos conocimientos se encuentra representada de forma simbólica, es decir, a través de textos. Gracias a los grandes avances de la ciencia, cada día contamos con mejores herramientas que nos ayudan en nuestra vida cotidiana, como es el uso de la computadora e Internet, las cuales nos permiten encontrar día con día grandes volúmenes de información que se nos presentan en lenguaje natural a través de texto. Sin embargo, la mayoría de las personas se encuentra con diferentes problemas cuando requieren utilizar la computadora para buscar y analizar grandes cantidades de información, ya que es difícil tratar de seleccionar solamente aquella información que nos es útil. Actualmente existen diferentes lenguajes de consulta a sistemas de 1 Capítulo 1. Introducción cómputo tal como el Structured Query Language (SQL por sus siglas en inglés). Este lenguaje nos puede ayudar para que la computadora entienda de una forma más adecuada cuál es la información que necesitamos. El problema de utilizar el lenguaje SQL es la necesidad de tener algunos conocimientos de computación, por lo que la inmensa mayoría de las personas no pueden trabajar con este lenguaje para obtener la información que desean encontrar. La forma más adecuada para la mayoría de las personas, sería que la computadora “pudiera entender” las consultas o peticiones de información en su propio lenguaje natural. Este tema ha despertado interés desde la década de los años 70s y ha motivado una larga serie de desarrollos para la creación de sistemas que sean capaces de entender las peticiones realizadas en lenguaje natural. 1.1. Antecedentes En la actualidad ha surgido la necesidad de crear sistemas con una interfaz que permita la interacción con el usuario de una forma más natural, sin la necesidad de que las personas tengan que aprender algún lenguaje de consulta como el SQL. Es por esto que desde la década pasada el grupo de sistemas distribuidos del Centro Nacional de Investigación y Desarrollo Tecnológico (CENIDET) ha tenido la inquietud de trabajar en el ámbito de la problemática que se tiene para el acceso a datos en la red mundial (Internet), y con un interés particular en interfaces a sistemas de bases de datos que sean lo bastante amigables para la gran cantidad de usuarios que no tienen un amplio conocimiento para poder acceder a los datos que se encuentran en Internet. Por lo que, desde hace unos años, se inició el desarrollo de una Interfaz de Lenguaje Natural para Consulta a Bases de Datos (ILNBD por su siglas en español), con el propósito de disminuir el esfuerzo realizado por aquellos usuarios que son inexpertos en el acceso a la información de bases de datos. Se pretende que la interfaz sea capaz de traducir a SQL consultas expresadas en lengua española. 2 Capítulo 1. Introducción La arquitectura propuesta del sistema de procesamiento de consultas en lenguaje natural a través de la Web, se muestra en la figura 1.1. “Al iniciar una sesión con la interfaz, el usuario emitirá su consulta por medio de la interfaz de voz, cuyo resultado será enviado por el cliente al módulo de atención del intermediario, el cual pasará la consulta al módulo de procesamiento de lenguaje natural (PLN)” [1]. La figura 1.2 presenta de forma más detallada la arquitectura propuesta para el módulo PLN. Cliente (Aplicación + Interfaz de Voz) Servidor de Web (Intermediario) Módulo de Atención Editor de Ontologías Ontologías • Obtiene solicitud de ontología • Crea hilo de servicio • Regresa a estado de espera Módulo de Sesión • • • • Recibe URL y puerto de servicio y regresa ontologías Solicita ontologías Recibe ontologías Genera consulta LN Recibe resultados JDBC JDBC Módulo PLN • Recibe consulta en LN • Genera consulta en SQL JDBC Figura 1.1. Arquitectura propuesta para la ILNBD. 1 “La consulta en lenguaje natural recibida por el módulo PLN, es analizada sintáctica y semánticamente para transformarla en una representación interna, la cual se traduce a una consulta en el Lenguaje de Consulta Estructurado (SQL). Esta consulta es regresada al módulo de sesión para que la reenvíe a un sistema manejador de bases de datos (SMBD) para su evaluación. El mismo módulo de sesión se encarga de hacer llegar al usuario final el resultado de la consulta que regrese el SMBD” [1]. Actualmente ya se tiene desarrollada una gran parte de este proyecto. Es por ello que el objetivo de esta tesis es el diseño e implementación de un analizador sintáctico para el procesamiento de lenguaje natural, el cual forma parte de este 3 Capítulo 1. Introducción proyecto (ILNBD), con el fin de que éste sea capaz de comprender las oraciones expresadas con la variante del español que se habla en México. Módulo de Sesión del Intermediario Analizador Sintáctico Estructura sintáctica Analizador Semántico Error Consulta SQL Ontología particular Representación interna Generador de Código 2 1.2. Lexicón Analizador Pragmático y del Discurso Figura 1.2. Módulo de procesamiento de lenguaje natural. Objetivos de la tesis Los objetivos principales de esta tesis son el diseño e implementación de un analizador sintáctico para las oraciones en español usando el método de dependencias. Otro objetivo que se propuso fue generar un analizador sintáctico flexible y dinámico. Flexible porque permitiría la modificación de las reglas sintácticas, de acuerdo a las necesidades del usuario, y dinámico porque permitiría incrementar el número de reglas sintácticas con el que cuenta el analizador. 4 Capítulo 1. Introducción 1.3. Justificación y beneficios Justificación Uno de los problemas que frecuentemente tienen los usuarios en el acceso a la información de sistemas de cómputo, es la falta de conocimiento de un lenguaje como SQL para formular consultas en un sistema y así mismo poder obtener solamente aquella información que es útil. Una solución viable a esta problemática es el desarrollo de una interfaz de lenguaje natural a bases de datos para que un usuario pueda expresar en español y de la manera más sencilla una consulta a una base de datos. Actualmente en diferentes países se está trabajando en procesamiento de lenguaje natural; sin embargo, ha surgido la necesidad de desarrollar un sistema para la lengua española y en particular la utilizada en México, ya que los sistemas desarrollados en otros idiomas no pueden ser adaptados al nuestro debido a que existen ciertas características propias de cada lengua que facilitan o vuelven más complejo el procesamiento del lenguaje. También consideramos que el español hablado en México no es igual al que se utiliza en los demás países de habla hispana, y es por ello que existe la inquietud del desarrollo de un analizador sintáctico del español hablado en México. Beneficio que ofrece la ILNBD El principal beneficio que se pretende conseguir en el desarrollo de una interfaz de lenguaje natural para consulta a bases de datos (ILNBD), es el de facilitar la realización de consultas de los usuarios nuevos y generalmente inexpertos en el manejo de datos a través de Internet, tratando de que un usuario pueda expresar en español y de la manera más fácil una consulta a una base de datos. 5 Capítulo 1. Introducción Beneficios del analizador sintáctico 1) Aportación de información sintáctica con el objetivo de facilitar al analizador semántico el entendimiento de las oraciones expresadas en español. 2) Disminución del número de posibles variantes de estructura sintáctica para una oración, permitiendo un ahorro de procesamiento y tiempo en la posible interpretación que pueda tener una oración. 1.4. Alcances y limitaciones Los principales alcances que se lograron con el desarrollo esta tesis son los siguientes: • Se pudo realizar el análisis sintáctico de oraciones expresadas en lenguaje natural y determinar si la oración posee alguna de las posibles formas gramaticales permitidas para la formación de oraciones en español, considerando que este analizador sólo tiene la capacidad de trabajar con oraciones simples (sujeto-verbo-predicado). • El analizador utiliza una base de datos del conocimiento lingüístico para tratar de rechazar aquellas oraciones que sintácticamente cumplan las reglas gramaticales pero que semánticamente sean incorrectas. Este punto se refiere a la eliminación de aquellas oraciones en las que, aunque contengan cada uno de los elementos que conforman una oración, el uso de éstos sea inadecuado; por ejemplo, el uso de las preposiciones es muy amplio en el español, sin embargo, no todos los verbos pueden combinarse con las mismas preposiciones, lo que implica que una oración pueda ser sintácticamente correcta pero semánticamente incorrecta. Esto no quiere decir que el analizador sintáctico realiza las labores de un analizador semántico. Sólo se pretendió facilitar la tarea al analizador semántico. 6 Capítulo 1. Introducción • Se implementó un analizador sintáctico flexible y dinámico para poder incrementar o modificar las reglas gramaticales de producción. En este trabajo lo que se realizó en cuanto a flexibilidad, fue el desarrollo de un sistema con una arquitectura independiente de las reglas sintácticas, permitiendo de esta manera al usuario del sistema poder modificar o introducir nuevas reglas gramaticales sin necesidad de alterar el código fuente del sistema. Las limitaciones que se consideraron para el desarrollo de esta tesis son las siguientes: • El analizador sintáctico sólo tiene la capacidad de analizar oraciones simples. • El analizador sintáctico trabaja sólo con una parte del español, debido a la gran cantidad de palabras que lo conforman. • Dentro de las pruebas realizadas, sólo se utilizaron las oraciones formadas por las palabras definidas en el léxico y en la base de datos del conocimiento lingüístico, debido a que el objetivo de esta tesis no era crear un léxico con el mayor número posible de palabras del español, ni crear una base de datos del conocimiento lingüístico que contenga todos los patrones de estructuras sintácticas para la formación de oraciones. • Este analizador no tiene la finalidad de funcionar como un corrector de ortografía; por lo tanto, si el analizador llegara a recibir alguna palabra incorrecta, se podrá generar un análisis no deseado o incorrecto. • El analizador sintáctico sólo tiene la capacidad de trabajar con el español. 7 Capítulo 1. Introducción • No se pretende eliminar por completo la ambigüedad sintáctica que pueda tener una oración. • No se consideró trabajar con todas las estructuras posibles para la construcción de una oración, debido a que algunas estructuras no son muy usuales. • El análisis de las oraciones se realiza sin considerar los signos de puntuación, debido a que las reglas gramaticales para el uso de los signos de puntuación no son estrictas, permitiendo a las personas cierta libertad para su manejo. Eso genera que el análisis de las oraciones se vuelva más complejo. • Si el analizador léxico llegara a detectar una palabra no definida dentro del lexicón, ésta será etiquetada como un sustantivo no definido. 1.5. Contenido de la tesis Esta tesis está dividida en siete capítulos como se describe a continuación: El capítulo 2 describe el fundamento teórico que se utilizó durante el desarrollo de este trabajo, algunos conceptos básicos de PLN, la metodología de algunos algoritmos para compiladores e intérpretes y presenta una breve descripción de otros trabajos similares a éste realizados tanto en otros países como en México. El capítulo 3 describe la arquitectura y los conceptos utilizados para el diseño del lexicón y del analizador léxico que se utilizaron para poder implementar el analizador sintáctico. El capítulo 4 presenta el método de dependencias, incluyendo algunos ejemplos generales para el manejo de valencias sintácticas, y el diseño utilizado para llevar a cabo la implementación de una base de datos del conocimiento lingüístico. 8 Capítulo 1. Introducción En el capítulo 5 se describe el algoritmo utilizado para el diseño del analizador sintáctico, las reglas gramaticales de producción que se consideró utilizar durante las pruebas, el diagrama de casos de uso y el diagrama de clases diseñados para la implementación del sistema. El capítulo 6 presenta el compendio de oraciones utilizadas para llevar a cabo la evaluación del sistema, describe el escenario de pruebas que se creó y presenta algunos casos de prueba. En el capítulo 7 se presentan las conclusiones a las que se llegó después de haber desarrollado esta tesis, y se sugieren algunos trabajos futuros para dar continuidad a esta línea de investigación. 9 Capítulo 2 Marco teórico En este capítulo se describen los fundamentos teóricos utilizados para el desarrollo de esta tesis, algunas definiciones y conceptos importantes para su entendimiento. También, se presenta una descripción breve de los trabajos similares a ésta. Para tal efecto, primeramente se describen todos los trabajos encontrados en otros países que abordan el tema de la problemática que existe para el procesamiento de lenguaje natural, enfocados particularmente al análisis sintáctico del español, y posteriormente se describen todos lo trabajos encontrados en México que también tratan este tema. 2.1. Procesamiento de lenguaje natural Marc Moens realizó un trabajo denominado Natural language analysis [2], en el que analiza los diferentes problemas que surgen en la implementación del lenguaje natural para el desarrollo de aplicaciones, involucrando dos requerimientos contradictorios: la precisión (permite que el análisis de las oraciones genere una interpretación adecuada) y la cobertura o alcance (determinación del conjunto de 10 Capítulo 2. Marco teórico palabras que conforman el lenguaje). Podemos decir que el procesamiento de lenguaje natural (PLN por sus siglas en español), consiste en tomar una oración hablada o escrita y procesarla para obtener su significado, por lo que el sistema obtiene la secuencia de palabras (oración) y el resto del proceso para el entendimiento puede ser dividido en varias etapas: análisis léxico, análisis morfológico, análisis sintáctico, análisis semántico y análisis contextual. Cada una de estas etapas cumple con una tarea necesaria para llegar a un entendimiento del lenguaje natural. A continuación se explica con más detalle cada una de las etapas mencionadas anteriormente: Análisis léxico. “La información léxica está contenida en el lexicón, es decir, en el conjunto de unidades léxicas pertenecientes a un sistema lingüístico. Dicha información consta de la etiqueta relativa a la categoría gramatical de cada unidad lingüística (sustantivo, verbo, pronombre…) y de una o varias etiquetas correspondientes a cada uno de los rasgos de subcategorización que hacen posible que cada unidad lingüística seleccione otra u otras a la hora de combinarse formando las distintas oraciones posibles de una lengua” [3]. A partir de un texto a procesar, un analizador léxico se encarga de transformar las secuencias de palabras en unidades léxicas o tokens y, a través de un conjunto de reglas, resolver posibles ambigüedades léxicas. Estos analizadores se denominan etiquetadores gramaticales. Análisis morfológico. “La morfología trata las palabras tomadas de forma independiente de su relación en la oración y estudia su forma. Por tanto, la información morfológica que proporciona una palabra incluye datos sobre su flexión (género, número, persona…), derivación (sufijo, prefijo…) y composición (palabras 11 Capítulo 2. Marco teórico simples, palabras compuestas). Asimismo, es objeto del estudio morfológico la categoría gramatical de las palabras (sustantivo, verbo, adverbio…)” [3]. La correcta identificación de unidades morfológicas es esencial para cualquier proceso posterior. Si se combina el análisis morfológico con el léxico, se puede obtener información morfológica más completa sobre las unidades léxicas. Análisis sintáctico. “La sintaxis trata la combinación de las palabras en la frase. Los problemas principales de los que se ocupa la sintaxis se refieren al orden de las palabras, a los fenómenos de reacción (es decir, la manera en que ciertas palabras imponen a otras variaciones de número, género…) y las funciones que las palabras puedan cumplir en la oración” [3]. Podemos distinguir dos clases de analizadores sintácticos: el analizador parcial o superficial y el analizador completo. • En el analizador superficial se identifican constituyentes sintácticos aislados. No se establecen relaciones sintácticas entre ellos, con lo que el costo computacional es bajo, a costa de disminuir la profundidad de análisis dentro de la oración. • El analizador completo, por otra parte, rechaza cualquier oración que no sea capaz de analizar de forma global. Sin embargo, proporciona información mucho más valiosa, ya que establece enlaces funcionales entre los diferentes elementos sintácticos que constituyen la oración. Análisis semántico. “La semántica proporciona el significado de las palabras según el contexto. Gran parte de la información semántica de una unidad léxica ya se encuentra contenida en forma de rasgos semánticos en la descripción de dicha unidad, es decir, la información semántica es responsable de la correcta combinación de unidades léxicas en un discurso” [3]. 12 Capítulo 2. Marco teórico Análisis contextual. “Hay que tener en cuenta que la correcta interpretación del lenguaje puede en ocasiones no depender de factores relacionados con el discurso en el que se da, sino con el universo sociocultural previo. Es evidente, por tanto, que la información pragmática (es decir, según la relativa al conocimiento general del mundo, a la situación comunicativa concreta y a las presuposiciones e inferencias que conlleva) es fundamental para el correcto desarrollo de tareas de PLN” [3]. 2.2. Clasificación de los analizadores sintácticos Por lo general la mayoría de los métodos utilizados para la creación de analizadores sintácticos se clasifican como descendentes y ascendentes (Top-Down o ButtomUp). En ambos casos se examina la entrada al analizador sintáctico de izquierda a derecha, y un símbolo a la vez [4]. En particular estos algoritmos han sido muy utilizados para la creación de compiladores que trabajan con lenguajes independientes del contexto. Algunas de las herramientas que utilizan estos algoritmos para generar analizadores sintácticos son: Lex, Yacc, Bison, Berkeley Yacc, Yet Another Yacc, Coco(R) y ANTLR, entre otros [5]. Sin embargo, cuando se trata de trabajar con gramáticas dependientes de contexto, que por lo general son muy ambiguas como es el caso de los lenguajes naturales, su eficiencia disminuye de forma considerable. Es por ello que dentro de este trabajo se implementó el algoritmo de Earley, denominado también chart o tabla, y del cual hablaremos con más detalle en el capítulo 4. 2.2.1. Analizador descendente El análisis descendente, también conocido como análisis dirigido por las hipótesis, comienza tomando el símbolo inicial que representa una oración y busca dentro de las reglas de producción cuáles son las que permiten construir una estructura que represente la secuencia de palabras que constituyen la oración de entrada. 13 Capítulo 2. Marco teórico Este proceso puede visualizarse como la creación de un árbol, en donde se van construyendo estructuras parciales desde el símbolo inicial y continúa hacia abajo hasta encontrar la estructura sintáctica que corresponda a la oración de entrada. Entre los algoritmos más comunes para la creación de este tipo de analizadores podemos encontrar el analizador descendente recursivo y el analizador predictivo no recursivo. Considérese el siguiente conjunto de reglas para ilustrar el proceso que realizan estos algoritmos: 1) O = S FV CD CI 2) S = Sus 3) FV = Ver 4) CD = Art Sus 5) CI = Pre Sus Si quisiéramos analizar la oración: “Pedro escribió una carta a María”, es necesario considerar que la oración ha sido etiquetada por el analizador léxico, entonces el analizador sintáctico trabajaría con las categorías gramaticales de la oración etiquetada “Sus Ver Art Sus Pre Sus”. En la figura 2.1 se muestra el árbol sintáctico al que debemos llegar después de haber aplicado el método descendente. En este ejemplo el método descendente comenzaría tomando el símbolo inicial O y sustituyéndolo por las partes que lo conforman, generando el inicio del árbol sintáctico como lo muestra la figura 2.2. O S FV Sus Ver Art O CD Sus Art Pedro escribió una carta a 3 CI S Sus María 4 FV CD CI Figura 2.2 Estrategia descendente (estado inicial). Figura 2.1. Estado final. 14 Capítulo 2. Marco teórico El algoritmo seguiría repitiendo este proceso pero siempre tomando el símbolo no terminal que está en el lado izquierdo hasta llegar a los nodos hoja, después avanza a la derecha para tomar el siguiente símbolo y tratar de descomponerlo, y así sucesivamente hasta descomponer todos los símbolos no terminales, como lo muestran las figuras 2.3, 2.4, 2.5 y 2.6. O O S FV CD CI Sus Pedro 5 S FV Sus Ver 6 Figura 2.4. Estrategia descendente (estado intermedio). O Sus FV O CD Ver Art CI S Sus Sus Figura 2.5. Estrategia descendente (estado intermedio). FV Ver Art CD CI Sus Art Pedro escribió una carta a Pedro escribió una carta 7 CI Pedro escribió Figura 2.3. Estrategia descendente (estado intermedio). S CD 8 Sus María Figura 2.6. Estrategia descendente (estado final). 2.2.2. Analizador ascendente El analizador ascendente, también conocido como analizador sintáctico dirigido por los datos, comienza tomando cada una de las palabras que constituyen la oración de entrada y etiquetándola como hoja final del árbol a construir. Este algoritmo conoce la parte derecha de las reglas de producción y trata de sustituirla por la parte izquierda que denota la regla que la produce. Entre los algoritmos más comunes de este tipo, podemos encontrar el analizador por precedencia de operadores, el analizador LR(n) y el analizador LALR. 15 Capítulo 2. Marco teórico El procedimiento de estos algoritmos se puede visualizar como la construcción de un árbol sintáctico en donde se comienza por las hojas finales, y se trata de llegar al nodo raíz para encontrar la estructura sintáctica que corresponde a la oración en cuestión. Consideremos la oración etiquetada y el mismo conjunto de reglas utilizados en el ejemplo anterior del método descendente: Sus, Ver, Art, Sus, Pre y Sus. Este algoritmo comenzaría tomando la secuencia de palabras que constituyen la oración y trataría de sustituirlas por las reglas que producen esta secuencia de palabras. Al igual que el algoritmo anterior, éste también comienza por la parte izquierda como lo muestra la figura 2.7. S FV CD CI Sus Ver Art Sus Art Sus Pedro escribió una carta a María Figura 2.7. Estrategia ascendente (estado inicial). 9 El método ascendente sustituye el sustantivo (Sus) por el sujeto (S), el verbo (Ver) por la frase verbal (FV), y al no encontrar una regla que permita producir el artículo (Art), toma el siguiente elemento que es un sustantivo (Sus) y los sustituye a ambos por la etiqueta de complemento directo (CD), y así sucesivamente hasta terminar. Posteriormente sube un nivel dentro del árbol y trata de hacer lo mismo comenzando siempre por el lado izquierdo. El algoritmo termina en el momento en que se llega al símbolo inicial (O), el cual indica que sí existe una estructura sintáctica para la oración que se está analizando, como lo muestra la figura 2.8. O S Sus FV Ver Art CD Sus Art Pedro escribió una carta a 10 CI Sus María Figura 2.8. Estrategia ascendente (estado final). 16 Capítulo 2. Marco teórico Los métodos de análisis sintáctico mostrados anteriormente (descendente y ascendente), presentan problemas para trabajar con gramáticas ambiguas. Esto se observa cuando se va a aplicar una regla y el sistema detecta que se tiene más de un camino o regla a seguir. Cuando se presenta este caso generalmente el analizador aplica la primera regla gramatical que se encuentra, y a partir de ese punto se siguen aplicando más reglas, siguiendo la misma estrategia; es decir, tomar la primera regla y sólo en caso de fallar se considera la posibilidad de aplicar otra regla. El funcionamiento básico por parte de estos algoritmos, provoca que se realice una búsqueda exhaustiva persiguiendo sólo una hipótesis a la vez. Como estos algoritmos no fueron diseñados para trabajar con gramáticas tan ambiguas como es el caso de los lenguajes naturales, no se tiene implementado un mecanismo para guardar los resultados previos que se van obteniendo. Conforme avanza el proceso de búsqueda se va construyendo el árbol sintáctico, y si en un momento dado no es posible avanzar debido a que no existe una regla que se pueda aplicar, se retrocede hasta algún punto en el que sea posible considerar otra regla. Esto ocasiona la necesidad de modificar o inclusive, en algunos casos, destruir el árbol construido sin importar los componentes encontrados, ocasionando algunas veces la necesidad de volver a generar estos componentes; lo que implica una pérdida de tiempo y duplicidad de trabajo. Por ejemplo, supóngase que se está analizado la siguiente oración “Juan vio un gato con un telescopio”, en donde “con un telescopio” es un complemento indirecto. Supóngase también que para la construcción de la oración se tienen las siguientes reglas gramaticales: 1) O = S FV CD 2) O = S FV CD CI Si se toma la primera regla, en un momento dado se llegará a un punto donde se tendrá un árbol sintáctico como el que se ilustra en la figura 2.9. 17 Capítulo 2. Marco teórico O S FV CD Sus Ver Art Sus Juan vio un gato Figura 2.9. Árbol sintáctico parcial. 11 Como se puede apreciar, en este árbol no se tiene la posibilidad de continuar con el análisis sintáctico, debido a que todos los nodos están etiquetados con símbolos terminales; sin embargo, en la cadena de entrada aún queda por analizar el complemento indirecto “con un telescopio”, por lo que se trata de retroceder hasta el punto en el que se aplicó la regla que dio pauta para elegir un camino (O), con la finalidad de tomar la otra alternativa. En tales circunstancias, será necesario ir borrando el árbol hasta llegar al punto en el que podemos aplicar la otra regla gramatical. Como podemos observar, en este caso será necesario destruir todo el árbol, sin importar que ya se había encontrado el sujeto (S), la frase verbal (FV) y el complemento directo (CD), los cuales tendrán que ser reconstruidos nuevamente como se muestra en la figura 2.10; dando como resultado una pérdida de tiempo y la duplicidad de trabajo. Estructura sintáctica parcial duplicada. O S FV Sus Ver Art Sus Pre Art Juan vio un gato con un telecopio 12 CD CI Sus Figura 2.10. Árbol sintáctico final. 18 Capítulo 2. Marco teórico Otro problema similar se presenta cuando se desea encontrar todas las estructuras sintácticas posibles para una oración. Esto significa volver a duplicar el trabajo, ya que una vez encontrada una estructura es necesario realizar otro análisis para buscar otra posible estructura para la oración, y así sucesivamente hasta encontrar todas las posibles estructuras sintácticas que pueda tener la oración en cuestión, sin considerar el hecho de que varios árboles sintácticos puedan tener subestructuras comunes. 2.3. Método de dependencias Los principales métodos para construir un analizador sintáctico de PLN, son dos: utilizando los modelos de constituyentes o los modelos de dependencias. En particular, los modelos de constituyentes han sido los más apropiados para el inglés, principalmente por su orden de palabras más estricto. Debido al gran apoyo y a la gran cantidad de investigadores que se han enfocado a este método, estos modelos son utilizados por muchos otros lenguajes, aun cuando éstos no comparten la mayoría de las características del inglés [6]. Los modelos de dependencias presentan mejores características para su implementación con los lenguajes que tienen un orden de palabras más libre, como es el caso del español. Estos modelos se han orientado más hacia un trabajo descriptivo, por lo que se han empleado muy restringidamente y en pocos lenguajes [6]. Dentro de los modelos de dependencias se encuentra la Meaning Text Theory (MTT por sus siglas en inglés). En 1970, Mel’cuk y Zholkovskij proponen por primera vez una teoría que se ha convertido en una de las más influyentes dentro de la lingüística contemporánea [7]. La Meaning-Text Theory es una teoría que se basa en el hecho de que cualquier acto de comunicación lingüístico implica tres aspectos: 19 Capítulo 2. Marco teórico 1) Un significado. 2) Un signo oral o escrito. 3) Una proyección (un conjunto de correspondencias entre significados y textos). Los significados y los textos son accesibles, pero no las correspondencias por lo que una lengua natural sólo se puede describir como un método funcional; por la razón de que un texto puede tener varios significados y un significado puede ser representado por varios textos [7]. La aplicación de la MTT permite describir algunas características del español de una manera más natural y adecuada, tales como el orden más libre de palabras (comparado con el inglés) y el establecimiento de relaciones entre valencias sintácticas y semánticas. Por lo tanto, podemos decir que el método de dependencias consiste principalmente en describir las relaciones o dependencias que se establecen entre pares de palabras (valencias), donde una es la principal o rectora y la otra está subordinada a (o dependiente de) la primera. Si se considera que cada palabra de una oración tiene una palabra propia rectora, la oración entera se ve como una estructura jerárquica de diferentes niveles. Una dependencia es la relación que existe entre dos palabras de acuerdo al sentido de las palabras. Es por ello que en este método se debe utilizar una base de datos de conocimiento lingüístico que contenga una descripción del lenguaje con el que se expresan los “objetos” que pueden formar parte de una oración. De esta forma se conoce de antemano cómo se relacionan los distintos grupos de palabras en una oración. Por ejemplo, para el lexema “plática” deberá aparecer en la base de datos que se utiliza la preposición “sobre” para introducir el tema. Para dejar más clara la diferencia entre el método de constituyentes y el método de dependencias, veamos un ejemplo: un árbol de constituyentes revela la estructura de una expresión en términos de agrupamientos (bloques) de palabras, que consisten de bloques más pequeños, los cuales a su vez consisten de bloques aun más 20 Capítulo 2. Marco teórico pequeños, etc. En un árbol de constituyentes, la mayoría de los nodos representan agrupamientos sintácticos o frases y no corresponden a las formas de las palabras reales de la oración bajo análisis. Símbolos como S (sujeto), FV (frase verbal), Sus (sustantivo), CC (complemento circunstancial), etc. aparecen en los árboles de constituyentes como etiquetas en los nodos, y se supone que estas únicas etiquetas determinan completamente las funciones sintácticas de los nodos correspondientes. En las figuras 2.11 y 2.12 se muestra un ejemplo con la oración: “los niños pequeños estudian pocas horas”, representada a través de los dos distintos métodos (método de constituyentes y método de dependencias). O S Art Sus GN FV Adj Ver estudian Adj S pocas horas Los niños pequeños 13 Figura 2.11. Árbol de constituyentes. Para generar el árbol de constituyentes, es necesario utilizar un analizador léxico, el cual etiqueta de acuerdo a su género (artículo, sustantivo, verbo, adverbio, etc.) cada una de las palabras que conforman la oración, con el objetivo de que el analizador sintáctico pueda clasificarlas en grupos o bloques de palabras. En el ejemplo anterior el analizador sintáctico maneja tres diferentes bloques o grupos de palabras para generar el árbol correspondiente a la oración. Los símbolos no terminales que utiliza el analizador sintáctico en la figura 2.11 son: O (oración), GN (grupo nominal) y FV (frase verbal), los demás símbolos que se muestran en el árbol de constituyentes se consideran símbolos terminales. Es necesario que tanto los símbolos no terminales como los terminales estén definidos dentro del analizador sintáctico. 21 Capítulo 2. Marco teórico estudian nominativo determinativa circunstancial horas niños modificadora Los cuantitativa pequeños 14 pocas Figura 2.12. Árbol de dependencias. Para la generación de los árboles de dependencias también se utiliza un analizador léxico, el cual etiqueta de acuerdo a su género (artículo, sustantivo, verbo, adverbio, etc.) cada una de las palabras que conforman la oración, con el objetivo de que el analizador sintáctico pueda clasificar cada palabra de la oración. Una vez que el analizador sintáctico reciba la información del lexicón, es necesario utilizar una base de datos del conocimiento lingüístico que le indique al analizador sintáctico las relaciones o dependencias que existen entre los lexemas de una oración. Con el uso de la información que tenga la base de datos del conocimiento lingüístico, el analizador sintáctico será capaz de determinar los tipos de dependencia que se generan dentro de una oración. Esto permitirá disminuir las posibles representaciones sintácticas de una oración en base a la información contenida dentro de la base de datos del conocimiento lingüístico. En el ejemplo que se muestra en la figura 2.12, podemos observar que el sustantivo niños es una palabra rectora, porque existe una dependencia del artículo los y el adjetivo pequeños. Además, el sustantivo niños al igual que horas son palabras rectoras, pero también son dependientes porque presentan una relación de dependencia con la palabra rectora juegan. Esta palabra (el verbo) es considerada como la palabra con mayor jerarquía dentro de la oración, y por lo tanto, es la única que no depende de ninguna otra palabra. 22 Capítulo 2. Marco teórico 2.4. Trabajos realizados a nivel mundial Dentro de los trabajos que se han desarrollado actualmente en diversos países, sólo nos enfocaremos a aquellos trabajos que tratan con el lenguaje español, debido a que cada idioma tiene sus propias características que pueden simplificar su estudio o complicarlo. 1) Proyecto análisis [8]. Este trabajo se desarrolló en la Universidad Politécnica de Madrid (UPM), el cual consiste en el diseño de un analizador sintáctico del español utilizando el formalismo de GCD (gramática de cláusulas definidas) de Prolog. El analizador es capaz de realizar el análisis de oraciones simples y compuestas e incorpora servicios como la posibilidad de ampliar el diccionario y la descripción de errores en oraciones gramaticales. 2) Desarrollo de un entorno para el análisis sintáctico de una lengua natural [9]. Este trabajo también fue realizado en la Universidad Politécnica de Madrid, y su objetivo fue diseñar un sistema que fuera capaz de entender una oración a través de un dispositivo auditivo y escribirla en pantalla. El analizador sintáctico que se diseñó en este trabajo utilizaba el método de constituyentes, basando todo el conocimiento sintáctico del lenguaje castellano en un conjunto de reglas de producción independientes del contexto. 3) Construcción de un sistema de recuperación de información multilingüe en la Web [10]. El Ministerio de Ciencia y Tecnología de España financió la construcción de este proyecto, el cual se enfocaba a trabajar principalmente con el inglés y el español. Su desarrollo comenzó en julio de 2002 y terminó en diciembre de 2003. Las instituciones que participaron fueron la Universidad de Alicante, la Universidad de Jaén y la Universidad de Sevilla. El objetivo principal del proyecto fue el de construir un buscador de información en el que se integre un conjunto de herramientas de procesamiento de lenguaje natural. 23 Capítulo 2. Marco teórico 4) Analizador de unificación de huecos para la resolución de la anáfora [11]. Éste es un sistema de procesamiento de lenguaje natural orientado a la resolución de la anáfora que incluye etiquetador léxico, análisis sintáctico parcial y sistema de resolución automática de la anáfora. Este sistema es de propósito general; es decir, no está centrado en una aplicación específica como podría ser la extracción de información, traducción automática o cualquier otra, aunque actualmente se ha empleado en aplicaciones de respuesta de consultas y traducción automática. 2.5. Trabajos realizados en México El interés por realizar trabajos relacionados con el procesamiento de leguaje natural surgió en la década de los años 70s, y sin embargo, actualmente en México son pocas las instituciones interesadas en la investigación relacionada con el procesamiento del lenguaje natural. A continuación se presentan los trabajos más relevantes de México. 1) Análisis sintáctico conducido por un diccionario de patrones de manejo sintáctico para lenguaje español [6]. En esta tesis doctoral, desarrollada en el Centro de Investigación en Computación (CIC), se propuso un modelo para resolver el problema del análisis sintáctico que se genera dentro de los textos sin restricciones. El modelo considera un algoritmo de desambiguación basado en tres diferentes fuentes de conocimiento del lenguaje. La primera fuente de conocimiento es lingüística y consiste en una colección de patrones de manejo sintáctico que reúnen información de cómo las palabras del español especifican léxicamente sus objetos. La segunda fuente consiste en una gramática extendida independiente del contexto para el español. La tercera fuente se basa en proximidad semántica entre palabras. 2) Modelado gramatical de un subconjunto del lenguaje español [12]. Esta tesis de maestría fue desarrollada en el Centro Nacional de Investigación y Desarrollo 24 Capítulo 2. Marco teórico Tecnológico (CENIDET). El objetivo general de dicha tesis fue la elaboración de un sistema computacional que permitiera obtener la información necesaria para hacer un modelo, lo más general posible, de las estructuras léxicas y sintácticas del español de México. El analizador sintáctico que se diseñó en esta tesis es de tipo superficial. En un analizador superficial se identifican constituyentes sintácticos aislados. No se establecen relaciones sintácticas entre ellos, con lo que el costo computacional es bajo, a costa de disminuir la profundidad de análisis dentro de la oración. 3) Modelo de interpretación de expresiones gráficas y de lenguaje natural para una interfaz inteligente [13]. El objetivo de este trabajo desarrollado en el CENIDET, fue la integración de un subconjunto del idioma inglés con un lenguaje de representación gráfica. En esta tesis se diseñó un analizador sintáctico utilizando el método de constituyentes. 4) Uso de gramáticas de rasgos para reconocimiento de oraciones en español [14]. Este trabajo fue desarrollado en el Laboratorio Nacional de Informática Avanzada (LANIA), en el cual se implementó el manejo de rasgos gramaticales. Un rasgo gramatical es una característica lingüística inherente a las palabras del lenguaje. El conjunto de rasgos gramaticales asociados a cada palabra determina su función en la oración y restringe la manera en que puede combinarse con otros componentes de la oración. El modelo gramatical que se desarrolló en esa tesis se denomina GRADO, el cual está orientado al análisis de oraciones en español. La principal diferencia de los trabajos realizados en México y el trabajo que nosotros realizamos, es el método empleado para afrontar los problemas que se presentan dentro del análisis sintáctico de lenguaje natural, en este caso el español. Es importante aclarar que el trabajo realizado en el CIC también implementa el método de dependencias; sin embargo, la principal diferencia que podemos destacar son los criterios utilizados para el diseño de la base de datos del conocimiento lingüístico. Nosotros hemos considerado que un verbo puede tener los mismos patrones que 25 Capítulo 2. Marco teórico otro verbo y además hemos tomado en cuenta que un mismo verbo puede tener diferentes patrones dependiendo del tiempo en el que se encuentre conjugado. En contraste, en el trabajo del CIC se considera el manejo de los patrones para cada verbo de forma independiente; es decir, cada verbo tiene sus patrones sin tomar en cuenta que un patrón puede ser compartido por más de un verbo. 26 Capítulo 3 Diseño del analizador léxico En este capítulo explicaremos la arquitectura diseñada para la implementación del lexicón y del analizador léxico, ya que el primer paso para comprender una oración es el reconocimiento de las palabras que la conforman. Para tal efecto podemos definir un análisis léxico como el proceso de convertir un flujo de caracteres en un flujo de etiquetas. El objetivo del analizador léxico es etiquetar cada una de las palabras que conforman la oración de entrada, con la finalidad de aportar información para el análisis sintáctico y determinar si las palabras etiquetados pertenecen al lenguaje. Sin embargo, cuando se trata de trabajar con lenguaje natural es casi imposible crear un lexicón que contenga todas las palabras que forman parte del lenguaje natural, debido a lo cual el analizador léxico que implementamos considera que todos las palabras pertenecen al lenguaje. Si el analizador léxico llegara a encontrar una palabra que no se encuentra dentro del lexicón, ésta será etiquetada como si fuera un sustantivo no definido. 27 Capítulo 3. Diseño del analizador léxico 3.1. Arquitectura del lexicón En el CENIDET se recopiló un lexicón con 92,362 palabras que pertenecen al español [15]. En dicho trabajo se realizó de forma semiautomática un análisis morfológico que permitió etiquetar cada una de las palabras de acuerdo a sus accidentes gramaticales (género, número, y en algunos casos las personas a las que corresponde). Sin embargo, el diseño de este lexicón no satisfacía nuestras necesidades, por lo que se decidió diseñar otro lexicón utilizando la información léxica y morfológica del trabajo realizado. El lexicón que diseñamos está formado por una base de datos implementada en PostgreSQL 7.2.1. Esta base de datos está constituida por nueve tablas, cuyos nombres hacen alusión a las tradicionalmente llamadas partes básicas de la oración: sustantivo, artículo, adjetivo, pronombre, verbo, adverbio, preposición, conjunción e interjección. La figura 3.1 muestra las tablas que forman parte del lexicón. 15 Figura 3.1. Diseño del lexicón. 28 Capítulo 3. Diseño del analizador léxico Para el etiquetado de las diferentes palabras que se encuentran dentro del lexicón, se manejan tanto etiquetas gramaticales como códigos. Debido a que en el lexicón que se realizó en el CENIDET existían palabras repetidas, actualmente se tienen capturadas 72,716 palabras del español con su información léxica y morfológica correspondiente (en lugar de 92,362 palabras). Específicamente, el lexicón cuenta con: 60 adjetivos, 101 adverbios, 6 conjunciones, 21 preposiciones, 20,308 sustantivos y 52,220 verbos. 3.1.1. Etiquetas gramaticales Las etiquetas gramaticales permiten determinar la categoría gramatical (sustantivo, artículo, adjetivo, etc.) a la que pertenece cada una de las palabras que se encuentran en el lexicón, y los códigos nos permiten saber cuáles son los accidentes gramaticales (género, número, modo del verbal, tiempo del verbo, etc.) de cada etiqueta. La tabla 3.1 muestra las diferentes etiquetas gramaticales que fueron previstas. .1 Tabla 3.1. Categorías gramaticales. Etiqueta Sus Art Adj AdjC AdjO Pro Ver Aux Adv Pre Con Int Significado Sustantivo Artículo Adjetivo Adjetivo cardinal Adjetivo ordinal Pronombre Verbo Verbo auxiliar Adverbio Preposición Conjunción Interjección 29 Capítulo 3. Diseño del analizador léxico 3.1.2. Rasgos recurrentes de las etiquetas gramaticales Cada una de las etiquetas gramaticales incluye una serie de rasgos recurrentes (presentes en la mayoría de las etiquetas) y de rasgos particulares. La tabla 3.2 muestra los rasgos recurrentes de estas categorías. Tabla 3.2. Rasgos recurrentes de las categorías gramaticales. .2 Persona Etiqueta Significado Primera 1 persona Segunda 2 persona Tercera 3 persona Pendiente de 6 especificar Etiqueta Número Significado Etiqueta Género Significado S Singular M Masculino P Plural F Femenino 6 Pendiente de especificar N Neutro 6 Pendiente de especificar Se considera que en una fase posterior del proceso de desambiguación, el código 6 debería convertirse en alguno de los otros valores del rasgo en cuestión. 3.1.3. Rasgos particulares de las etiquetas gramaticales Se consideró utilizar el guión con la finalidad de mantener en la descripción de cada etiqueta gramatical un mismo número de posiciones. Debido a que no todas las palabras correspondientes a una misma categoría gramatical tienen los mismos accidentes gramaticales, se utilizó el guión para completar aquellas posiciones que quedan vacías, ya que es importante el orden de los códigos porque existen codificaciones que comparten la misma letra. A continuación se muestran los rasgos particulares previstos para cada etiqueta gramatical: 30 Capítulo 3. Diseño del analizador léxico 1) Verbos. Rasgos recurrentes: • Persona. • Número. Rasgos particulares: .3 Forma no personal Etiqueta Significado I Infinitivo G Gerundio C Participio Tabla 3.3. Rasgos particulares del verbo. Modo verbal Etiqueta Significado D Indicativo J Subjuntivo R Imperativo Pendiente de 8 especificar (D/R) Pendiente de 9 especificar (J/D) Tiempo verbal Etiqueta Significado R Presente A Imperfecto P Indefinido U Futuro C Condicional Ejemplos: Mañana trabajarán sólo hasta las cuatro. La etiqueta gramatical de la palabra trabajarán es Ver. Los accidentes gramaticales de este verbo son: el modo verbal es indicativo, el tiempo del verbo es futuro, la persona es segunda persona y el número es plural. Por lo tanto, el código para este verbo es –DU2P. ¿Crees que puedes hacerlo? La etiqueta gramatical de la palabra crees es Ver. Los accidentes gramaticales de este verbo son: el modo verbal es indicativo, el tiempo del verbo es presente, la persona es segunda persona y el número es singular. Por lo tanto, el código para este verbo es –DR2S. 31 Capítulo 3. Diseño del analizador léxico 2) Sustantivos. Rasgos recurrentes: • Género. • Número. Rasgos particulares: .4 Tabla 3.4. Rasgos particulares de los sustantivos. Tipo de nombre Etiqueta Significado 4 Nombre propio 5 Nombre común ? Desconocido Tipos de nombres propios Etiqueta Significado B Nombre de población C Apellido G Accidente geográfico N Apodo O Nombre de comarca P Pronombre R Nombre registrado Ejemplos: Los niños juegan en la calle. La etiqueta gramatical de la palabra niños es Sus. Los accidentes gramaticales de este sustantivo son: el tipo de nombre es nombre común, el género es masculino y el número es plural. Por lo tanto, el código para este verbo es 5-MP. Nuevos ataques de ETA. La etiqueta gramatical de la palabra ETA es Sus. Los accidentes gramaticales de este sustantivo son: el tipo de nombre es nombre propio, el tipo de nombre propio es nombre registrado, el género es femenino y el número es singular. Por lo tanto, el código para este verbo es 4RFS. 32 Capítulo 3. Diseño del analizador léxico 3) Adjetivos. Rasgos recurrentes: • Género. • Número. • Persona (sólo para los adjetivos posesivos). Rasgos particulares: .5 Tabla 3.5. Rasgos particulares de los adjetivos Tipos de adjetivos Etiqueta Significado C Cardinal O Ordinal Q Calificativo N Indefinido P Posesivo V Verbo en participio D Demostrativo Poseedores en los adjetivos posesivos Etiqueta Significado 1 Un poseedor 2 Varios poseedores 6 Pendiente de especificar Ejemplos: ¿Muéstrame las visitas canceladas? La etiqueta gramatical de la palabra canceladas es Adj. Los accidentes gramaticales de este adjetivo son: el tipo de adjetivo es verbo en participio, el género es femenino y el número es plural. Por lo tanto, el código para este adjetivo es V--FP. ¿Quiénes son los cinco alumnos más estudiosos? La etiqueta gramatical de la palabra cinco es AdjC. Los accidentes gramaticales de este adjetivo son: el tipo de adjetivo es cardinal, el género es masculino y el número es singular. Por lo tanto, el código para este adjetivo es C--MS. 33 Capítulo 3. Diseño del analizador léxico 4) Pronombres. Rasgos recurrentes: • Persona. • Género. • Número. Rasgos particulares: .6 Tabla 3.6. Rasgos particulares de los pronombres. Tipos de pronombres Etiqueta D E Significado Demostrativo Personal F Cuantificador N Indefinido Impersonal pasivo Relativo Interrogativo Pendiente de especificar (E/P) P R T 6 pronombres personales Etiqueta Significado E Átonos O Tónicos Caso en los pronombres Etiqueta C D 6 Significado Acusativo Dativo Pendiente de especificar (C/D) Ejemplos: Me lo dirá mañana. La etiqueta gramatical de la palabra me es Pro. Los accidentes gramaticales de este pronombre son: el tipo de pronombres es personal, el pronombre personal es átono, el caso en el pronombre es dativo, la persona es primera persona, el género es indefinido y el número es singular. Por lo tanto, el código para este pronombre es EED16S. 34 Capítulo 3. Diseño del analizador léxico Tú puedes hacerlo. La etiqueta gramatical de la palabra tú es Pro. Los accidentes gramaticales de este pronombre son: el tipo de pronombres es personal, el pronombre personal es tónico, la persona es segunda persona, el género es indefinido y el número es singular. Por lo tanto, el código para este pronombre es EO-26S. 5) Artículos. Rasgos recurrentes: • Género. • Número. Para esta categoría gramatical no se encontraron rasgos particulares. Ejemplos: Los nuevos libros. La etiqueta gramatical de la palabra los es Art. Los accidentes gramaticales de este artículo son: el género es masculino y el número es plural. Por lo tanto, el código para este artículo es MP. Las grandes empresas. La etiqueta gramatical de la palabra las es Art. Los accidentes gramaticales de este artículo son: el género es femenino y el número es plural. Por lo tanto, el código para este artículo es FP. 6) Locuciones. Esta categoría gramatical carece de los rasgos recurrentes, sólo tiene rasgos particulares: 35 Capítulo 3. Diseño del analizador léxico .7 Tabla 3.7. Rasgos particulares de las locuciones. Tipos de locuciones Etiqueta Significado C Conjuntiva D Adverbial P Prepositiva Ejemplos: Lo verá junto a la tienda. La etiqueta gramatical de la expresión junto a la es Loc. El único accidente gramatical de esta locución es el tipo de locución, la cual es prepositiva para este caso. Por lo tanto, el código para esta locución es P. Nos encontramos de vez en cuando. La etiqueta gramatical de la expresión de vez en cuando es Loc. El único accidente gramatical de esta locución es el tipo de locución, la cual es adverbial para este caso. Por lo tanto, el código para esta locución es D. 7) Otras categorías. Las categorías restantes no presentan ningún tipo de rasgo, las cuales se muestran en la tabla 3.8. .8 Tabla 3.8. Categorías gramaticales sin rasgos. Etiqueta Con Int Pre Categoría Significado Conjunción Interjección Preposición 36 Capítulo 3. Diseño del analizador léxico Ejemplos: Es feo pero simpático. La etiqueta gramatical de la palabra pero es Con. Pan con café. La etiqueta gramatical de la palabra con es Pre. ¡oh! La etiqueta gramatical de la palabra oh es Int. 3.2. Analizador léxico El analizador léxico fue codificado en Java al igual que el resto del sistema. Las principales características de este analizador son dos: cuenta con un módulo que permite eliminar todos los caracteres de las oraciones considerados como no válidos para el sistema, y cuenta con un módulo que permite generar las diversas formas de etiquetar una oración en caso de existir ambigüedad léxica dentro de las palabras que constituyen dicha oración. 3.2.1. Proceso de etiquetado El español, al igual que otros idiomas, no presenta un orden estricto para el uso de los signos de puntuación (coma, punto y coma, punto, comillas, puntos suspensivos, paréntesis, etc), es por ello que, más que ayudar en el análisis sintáctico, lo hacen más complejo debido a que los usuarios tiene cierta libertad para el uso de los signos de puntuación. Para hacer el análisis de las oraciones hemos considerado que las oraciones no tendrán signos de puntuación, por lo que el analizador léxico eliminará cualquier signo de puntuación que pueda detectar durante el análisis. Si el analizador léxico 37 Capítulo 3. Diseño del analizador léxico llegara a encontrar una palabra que no está definida dentro del lexicón, ésta será etiquetada como un sustantivo no definido, y será trabajo del analizador sintáctico determinar si su posición dentro de la oración es sintácticamente correcta. Si el analizador léxico encuentra varios sustantivos de forma consecutiva dentro de la oración, éstos serán etiquetados como un solo sustantivo. Esta característica del analizador la hemos considerado porque un sujeto puede estar formado por el uso de nombres propios y apellidos (varios sustantivos). La figura 3.2 muestra el proceso de etiquetado de una oración. Lexicón Marcado morfológico Oración de entrada Filtrado de la oración Etiquetado de la oración ANALIZADOR LÉXICO Oración etiquetada 1 cv bnzx 2- c bx vb 3- mc pqd : nbgn xvcb ::N Figura 3.2. Proceso de etiquetado. 16 El analizador léxico tiene la capacidad de etiquetar y entregarle al analizador sintáctico todas las formas posibles de etiquetar una oración; es decir, si el analizador léxico llegara a encontrar una palabra con más de una categoría gramatical (ambigüedad léxica), será necesario generar todas las posibles combinaciones de etiquetado de la oración con base en las categorías gramaticales de cada palabra, por lo que existe la posibilidad de etiquetar una oración de una, dos, tres o hasta n formas distintas dependiendo de la ambigüedad que se presente dentro de cada oración. 38 Capítulo 4 Diseño de la base de datos del conocimiento lingüístico En este capítulo presentamos las características de la estructura de valencias sintácticas para las oraciones con un énfasis particular en el español. Se diseñó e implementó una base de datos para el manejo de patrones, en la cual se almacena información sobre las valencias (complementos de la oración) que pueden utilizar los verbos. La base de datos del conocimiento lingüístico es en sí la herramienta para la implementación del método de dependencias (MTT) en el análisis sintáctico de oraciones. El objetivo de este capítulo es mostrar la necesidad que existe de usar no sólo reglas gramaticales de producción para PLN, ya que éstas definen estructuras sintácticas muy generales. Debido a que los verbos siguen patrones distintos en base a diversas características del español, surge la necesidad de implementar de alguna manera (a través del método de dependencias) esta información en los sistemas de cómputo (analizadores sintácticos), para que su desempeño sea más eficiente. 39 Capítulo 4. Diseño de la base de datos del conocimiento lingüístico 4.1. Diversidad numérica de valencias sintácticas En la mayoría de los libros de gramática española se define la construcción de una oración de una forma muy general, lo cual para efectos de estudio desde un punto de vista computacional no es suficiente, ya que los verbos tienen ciertas estructuras internas que los condicionan funcionalmente (transitivos, intransitivos, copulativos y unipersonales). Es por ello que existen clases funcionales de los verbos que determinan la forma en la que se puede construir una oración. Ese funcionamiento distinto hace que cada verbo tenga su modo particular de combinarse con otras palabras dentro de la oración, y es por ello que los analizadores sintácticos que sólo implementan el uso de reglas gramaticales de producción son muy ineficientes. Debido a estas características para la construcción de oraciones en español, el método de dependencias considera que existe una semejanza con la formación de moléculas, a partir de átomos, en la química; es decir, al igual que los átomos, las palabras también tienen valencias que permiten combinarse con un cierto número y clase de palabras para formar piezas más grandes de material lingüístico. Consideremos un ejemplo en donde podemos decir en correcto español que: a) Oswald mató a John F. Kennedy en 1963. Pero no es correcto decir: b) La señora Kennedy madre nació a John F. en 1917. Como podemos observar en el ejemplo anterior, el verbo nacer no permite la misma construcción que el verbo matar. Por lo que las características que observamos anteriormente de los verbos, nos permite saber cuántas valencias puede tener un verbo. La tabla 4.1 muestra un ejemplo con verbos que utilizan distintas valencias. 40 Capítulo 4. Diseño de la base de datos del conocimiento lingüístico .9 No. de valencias 0 1 2 3 4 5 4.2. Tabla 4.1. Diversas valencias sintácticas de verbos. Ejemplo Nieva Pedro falleció Juan trabajó con Pedro Luis escribe una carta a María Luis compra unas flores para María en 80 pesos Luis renta un departamento para María por un año en 10,000 pesos Ejemplo de patrones de manejo sintáctico para verbos Los patrones de manejo sintáctico proporcionan información acerca de los tipos de complementos que puede tener cada verbo, al mismo tiempo indican si las valencias necesitan o no una preposición para su implementación, mostrando cuáles son las preposiciones usadas para cada valencia si es que procede. Dependiendo de la clase funcional del verbo que se esté utilizando en una oración, éste puede trabajar con diferentes valencias; es decir, si un verbo utiliza cuatro valencias dentro de una oración esto no significa que siempre será así, o viceversa, si un verbo aparece con una valencia en una oración no significa que no pueda utilizar más valencias dentro de otra oración. A continuación mostramos ejemplos de oraciones que utilizan verbos con distintas valencias: 1) Verbos sin valencia. Son aquellos verbos que sólo se conjugan en tercera persona del singular, conocidos también como verbos unipersonales, por ejemplo: granizar, nevar, helar, amanecer, anochecer, obscurecer, etc. Se trata de un pequeño repertorio de verbos referentes a fenómenos meteorológicos o astronómicos y su principal característica sintáctica es que carecen de sujeto. 41 Capítulo 4. Diseño de la base de datos del conocimiento lingüístico 2) Verbos con una valencia. Algunos verbos del español de tipo intransitivo tienen únicamente la valencia que corresponde al sujeto, por ejemplo el verbo cojear. a) ¿Quién cojea? La valencia sintáctica es quién. b) Juan cojea. La valencia sintáctica es Juan. c) El perro cojea. La valencia sintáctica es el perro. Los verbos intransitivos no admiten el objeto directo ni pueden asumir la forma pasiva. Pero al igual que algunos transitivos, pueden tener objeto indirecto y algunos otros adjuntos [16] que permiten agregarle otras valencias, y es por ello que algunos verbos intransitivos pueden tener más de una valencia. 3) Verbos con dos valencias. Los verbos copulativos (sólo hay tres: ser, estar y parecer) son verbos que sirven de cópula, o sea de unión entre un sujeto y un predicativo [16], por ejemplo: a) Los chicos son trabajadores. Las valencias sintácticas son los chicos y trabajadores. b) La casa blanca parece una mansión. Las valencias sintácticas son la casa blanca y una mansión. 4) Verbos con cuatro valencias. A diferencia de los verbos intransitivos, los transitivos pueden tener un receptor gramatical (otra valencia) denominado objeto directo. Estos verbos son los únicos 42 Capítulo 4. Diseño de la base de datos del conocimiento lingüístico que aceptan una construcción pasiva dentro de las oraciones. En muchas lenguas europeas, el complemento directo se une al verbo directamente, sin el uso de preposiciones [6]; sin embargo, en el español existen dos posibles formas de unir el complemento directo. Por lo general los sustantivos inanimados se unen de forma directa con el verbo, mientras que los sustantivos animados utilizan la preposición a para unir el complemento directo con el verbo. Los siguientes ejemplos muestran verbos que utilizan cuatro valencias. a) Carlos ayer quebró la ventana con el martillo. Las valencias sintácticas son Carlos, ayer, la ventana y con el martillo. b) Juan escribe en su casa una carta para María. Las valencias sintácticas son Juan, en su casa, una carta y para María. 5) Verbos con cinco valencias. La mayoría de los verbos que utilizan cinco valencias son transitivos; sin embargo, no es muy usual entre las personas la construcción de estas oraciones, por lo general, la mayoría de las oraciones que las personas utilizan tiene entre una y tres valencias. Ejemplo de verbos con cinco valencias: a) Juan vendió su auto a su tío en 20,000 pesos el año pasado. Las valencias sintácticas son Juan, su auto, a su tío, en 20,000 pesos y el año pasado. b) Pedro rentó un departamento para su hermana en Guadalajara durante un año. Las valencias sintácticas son Pedro, un departamento, para su hermana, en Guadalajara y durante un año. 43 Capítulo 4. Diseño de la base de datos del conocimiento lingüístico 4.3. Diseño general de la base de datos Esta tesis está enfocada al análisis de aquellas oraciones que creemos que en algún momento dado pueden tener una equivalencia con las oraciones de SQL tales como las oraciones imperativas e interrogativas. (Actualmente en el CENIDET se está desarrollando una tesis doctoral denominada “Traductor de lenguaje natural español a SQL para un sistema de consultas a base de datos”.) La mayoría de los verbos que se utilizan para la construcción de oraciones interrogativas e imperativas manejan entre una y tres valencias; sin embargo, la base de datos del conocimiento lingüístico fue diseñada de forma general, es decir, con la capacidad de almacenar los patrones de cualquier verbo. Con el objetivo de que el sistema pueda analizar cualquier tipo de oración simple aun cuando ésta no se encuentre dentro del subconjunto de oraciones que nos interesan. Algunas de las características importantes de los verbos que hemos tomado en cuenta para la creación de la base de datos son: el tiempo del verbo, la clase funcional del verbo, la ambigüedad semántica de algunos verbos y la existencia de grupos de verbos que comparten los mismos patrones. A continuación exponemos los motivos que muestran la importancia de los aspectos mencionados anteriormente: 1) Hemos observado que en base al tiempo en el que se encuentre conjugado un verbo el número de valencias puede cambiar. Por ejemplo, el verbo trabajar en presente puede llevar dos valencias, pero cuando es conjugado en otro tiempo como puede ser en pretérito, surge la necesidad de implementar una valencia más (no es obligatorio su uso), correspondiente al tiempo y que a nivel sintáctico es conocida como complemento circunstancial. Los siguientes ejemplos ilustran este fenómeno sintáctico. a) Juan trabaja en México. b) Juan trabajó en México hace 3 años. 44 Capítulo 4. Diseño de la base de datos del conocimiento lingüístico 2) Ya hemos visto en la sección anterior (en la sección 4.2.), que la clase funcional es un aspecto importante para el manejo de patrones, en base a lo cual podemos saber cuántas valencias puede llevar un verbo. Por ejemplo, los verbos clasificados como unipersonales no tienen valencias, mientras que los verbos clasificados como transitivos peden tener distintas valencias. Éste es otro aspecto que se tomó en cuenta durante el diseño de la base de datos del conocimiento lingüístico. 3) Otra característica importante del español es la polisemia que un verbo pueda tener. Esto puede ocasionar que un verbo maneje distintos patrones dependiendo del significado que tenga en una oración. Por ejemplo, el verbo enajenar tiene dos significados distintos: vender y enloquecer dependiendo del contexto en que se maneje. Si consideramos que enajenar es enloquecer, podemos escribir la siguiente oración: Juan se enajenó, en la cual el verbo tiene una valencia; pero si tomamos el significado de vender, podemos escribir: Juan enajenó libros en 30 pesos, en donde el verbo de esta oración posee tres valencias. 4) Otro punto importante que se tomó en cuenta, fue considerar que algunos verbos tienen los mismos patrones que otros verbos o patrones similares. Esto con la finalidad de optimizar el manejo de patrones dentro de la base de datos. Para ello se analizó el comportamiento de las personas; es decir, si una persona desconoce el significado de un verbo, lo más seguro es que no sabrá cuáles son los patrones para ese verbo y como consecuencia no podrá construir una oración con dicho verbo; sin embargo, al momento de saber el significado del verbo consideramos que los seres humanos hacen un tipo de relación con aquellos verbos que son sinónimos de éste, lo que implica que las personas puedan construir una oración con el patrón adecuado para dicho verbo. Consideramos que este aspecto que hemos tomado en cuenta dentro del diseño de la base de datos, facilita el proceso del llenado automático de los patrones de cada verbo. 45 Capítulo 4. Diseño de la base de datos del conocimiento lingüístico La base de datos del conocimiento lingüístico para el manejo de patrones está implementada en PostgreSQL 7.2.1 y consta de cuatro tablas como lo muestra la figura 4.1. La tabla denominada verbos contiene tres columnas: una columna para la clave primaria (denominada claveverbo), una columna para introducir los verbos en infinitivo (denominada verbo) y una columna que permite clasificar los verbos como impersonales, copulativos, transitivos e intransitivos (denominada clasefuncional). Esta tabla está relacionada con la tabla combinaciones. La relación que existe entre estas tablas es de uno a muchos (1-N). 17 Figura 4.1. Diseño de la base de datos del conocimiento lingüístico. La tabla denominada oraciones contiene dos columnas: la primera columna (tipooracion) permite manejar una clave primaria, y la segunda (estructuraoracion) permite definir si la oración está en forma activa, pasiva o imperativa. Al igual que la tabla anterior, la información que proporciona esta tabla es necesaria para determinar los patrones de cada verbo. El tipo de relación que existe entre esta tabla y la tabla combinaciones es de uno a muchos (1-N). 46 Capítulo 4. Diseño de la base de datos del conocimiento lingüístico La tabla combinaciones, también conocida como tabla de trabajo, contiene columnas para los diez tiempos que existen en el español y permite establecer las relaciones de las tablas mencionadas anteriormente. Con la finalidad de determinar los patrones para cada verbo, estos patrones se encuentran almacenados en la tabla denominada patrones. Los patrones proporcionan información acerca de las valencias que puede tener cada verbo, al mismo tiempo indican si las valencias necesitan o no una preposición para su implementación, mostrando cuáles son las preposiciones usadas para cada valencia si es que procede. La relación que existe entre esta tabla y la tabla combinaciones es de uno a muchos (1-N). Dentro de la tabla de patrones se manejan distintos caracteres especiales (símbolos) con la finalidad de facilitar la representación de los patrones de cada verbo. La tabla 4.2 muestra dichos caracteres. . 10 Tabla 4.2 Caracteres especiales de la tabla de patrones. Símbolo Descripción [] Indican que un verbo puede o no llevar la valencia que se encuentre dentro de los corchetes. () Los paréntesis se utilizan cuando una valencia puede ser introducida a través de distintas preposiciones. Se utiliza la coma para separar cada preposición. # Este símbolo se utiliza para indicar que una valencia puede introducirse sin utilizar una preposición. Si la valencia nunca utiliza preposiciones no es necesario utilizar este símbolo. Ejemplo Ver CD [CC] SMB1 S Ver CD CI(con,para,a) SMB2 SMB1 S Ver CD(a,#) SMB2 47 Capítulo 5 Diseño del analizador sintáctico El objetivo de este capítulo es presentar la arquitectura del analizador sintáctico, y el proceso que se realiza durante el análisis sintáctico de una oración. Para tal efecto se consideró el uso de dos fuentes distintas del conocimiento lingüístico, a las cuales nos estaremos refiriendo durante el desarrollo de este capítulo. La principal fuente del conocimiento lingüístico está relacionada con el método de dependencias; en el capítulo 4 se presentó una amplia descripción de este método. Las reglas gramaticales de producción son la segunda fuente del conocimiento lingüístico; en la sección 5.3 se muestra el compendio de reglas de producción consideradas para llevar a cabo las pruebas del sistema. Como se mencionó anteriormente (en la sección 2.1), la sintaxis trata sobre la correcta combinación de las palabras dentro de una oración. Es por ello que el objetivo del analizador sintáctico es determinar si la relación que existe entre las palabras de una oración es correcta, en base a la función que desempeña cada palabra dentro de la oración. Dentro de este trabajo no se considera verificar la 48 Capítulo 5. Diseño del analizador sintáctico concordancia de género y número entre palabras; sin embargo, el sistema incluye dicha información morfológica para que en un proyecto posterior se lleve a cabo esta labor. 5.1. Algoritmo de Earley Para la codificación del analizador sintáctico se utilizó el algoritmo de Earley. Como resultado de su tesis doctoral, J. Earley [17] diseñó e implementó el primer algoritmo de análisis gramatical basado en la idea de una tabla o chart activa. Esta tabla activa no está rellena de símbolos sino de reglas activas parcialmente reconocidas y de reglas completas. El algoritmo desarrollado por Earley podía reconocer cadenas de símbolos pertenecientes a un lenguaje representable mediante una gramática independiente de contexto sin restricciones de formato o eliminación de las cadenas vacías [18]. Este algoritmo es más eficiente para PLN que los algoritmos descritos en la sección 2.2. La eficiencia de este algoritmo es proporcional al cubo de la longitud de cada oración de entrada, y dependiendo de la ambigüedad que se tenga dentro de la gramática, el tiempo medio puede ser reducido a cuadrático e incluso lineal [17]. El algoritmo de Earley está conformado básicamente por tres operaciones: 1) Predecir. Si tenemos un estado {A ... •B ..., i} entonces necesitaremos desarrollar B, y por tanto, debemos recorrer la regla del tipo B ... para predecir lo que buscamos. 2) Completar. Si hemos llegado a un estado completo {B ... •, i}, algún estado previo debe haber predicho B y necesitará que le avancemos el puntero • quedando {A ... B • ..., i}. 3) Avanzar. Una vez realizadas todas las posibles predicciones de símbolos terminales, debemos comprobar que la cadena de entrada posee alguno de ellos y avanzar el puntero correspondiente del elemento {A ... a • ..., i}. 49 Capítulo 5. Diseño del analizador sintáctico A continuación presentamos una descripción del algoritmo de Earley en su forma básica [18]: 1) Inicializar algoritmo. Para cada regla con símbolo inicial O --> ... Crear una nueva arista Nuevo = AñadirElemento({O --> ·...,0},Tabla[0]) Fin Para 2) Realizar iteraciones de predecir y completar. Realizar Nuevo = 0 Si elemento {A --> ...·B...,0} de Tabla[0] Para cada regla B --> ... Crear una nueva arista Nuevo = AñadirElemento({B --> ·...,0},Tabla[0]) Fin Para Fin Si Si elemento {A --> ... ·,0} de Tabla[0] Para cada regla {B --> ...·A...,0} de Agenda[0] Crear una nueva arista Nuevo = AñadirElemento({B --> ...A·...,0},Tabla[0]) Fin Para Fin Si Mientras Nuevo = 1 3) Realizar iteraciones de avanzar, completar y predecir. Para cada elemento añadido Nuevo = 0 Para cada regla {A --> ...·a...,i} de Agenda[j-1] Si a pertenece a Entrada[j] Crear una nueva arista Nuevo = AñadirElemento({A --> ...a·...,i}, Tabla[j]) Fin Si Fin Para Si Nuevo = 0 Devolver ERROR Fin Si Realizar Nuevo = 0 Si elemento {A --> ...·B...,i} de Tabla[j] Para cada regla B --> ... Crear una nueva arista Nuevo = AñadirElemento({B --> ·...,j},Tabla[j]) Fin Para Fin Si Si elemento {A --> ... ·,i} de Tabla[j] Para cada regla {B --> ...·A...,k} de Agenda[i] 50 Capítulo 5. Diseño del analizador sintáctico Crear una nueva arista Nuevo = ...A·...,k},Tabla[j]) Fin Para Fin Si Mientras Nuevo = 1 Fin para Si existe algún elemento {O --> ... ·,0} en Tabla[N] Devolver BIEN Si no existe Devolver ERROR Fin Si AñadirElemento({B --> La representación gráfica del algoritmo de Earley se hace mediante un grafo dirigido. Los vértices representan posiciones entre las palabras y están numerados desde 0 hasta n, en donde n es el número de palabras que constituyen la oración, mientras que las aristas representan reglas gramaticales. 18 Figura 5.1. Grafo cíclico permitido. Figura 5.2. Grafo cíclico no permitido. 19 Figura 5.3. Grafo cíclico no permitido. 20 En la figura 5.1 se muestra un ciclo en el grafo. Este ciclo sí es permitido en el algoritmo de Earley; sin embargo, los ciclos que se muestran en las figuras 5.2 y 5.3 no son permitidos. Como se mencionó anteriormente las aristas representan las reglas gramaticales que se están aplicando, y el punto que se introduce en el lado derecho de estas reglas nos indica el grado en el que cada una de ellas ha sido confirmada, lo cual da lugar a aristas activas y aristas inactivas. Las aristas activas son aquéllas que contienen una 51 Capítulo 5. Diseño del analizador sintáctico o más hipótesis por confirmar y esto se puede observar cuando el punto se encuentra del lado izquierdo de algún símbolo terminal o no terminal; mientras que las aristas inactivas contiene hipótesis confirmadas, y por lo tanto el punto se encuentra al final de la regla gramatical. Para ilustrar lo anterior consideremos el siguiente ejemplo: Supongamos que deseamos analizar la siguiente oración “Juan vio un gato con un telescopio”, y para ello contamos con las siguientes reglas gramaticales: 1) O S FV CD CI 2) O S FV CD 3) S Sus 4) FV Ver 5) CD Art Sus 6) CD Art Sus CE 7) CI 8) CE Pre Art Sus Pre Art Sus Supongamos que la oración ya fue etiquetada por el analizador léxico, y por lo tanto el algoritmo de Earley trabajará con las categorías gramaticales de la oración etiquetada: “Sus Ver Art Sus Pre Art Sus”. Para comenzar a trabajar con este algoritmo, es necesario que el grafo contenga tanto aristas activas como aristas inactivas, por lo que el primer paso es predecir cuáles son los símbolos terminales y aplicar todas las reglas de producción que contengan el símbolo inicial. En nuestro caso el símbolo inicial es O, como lo muestra la figura 5.4. En la figura 5.4 podemos observar cómo se inicializa el algoritmo de Earley. Como en este caso se tienen dos reglas que permiten construir una estructura sintáctica para la oración, el algoritmo debe generar dos aristas activas que salen del vértice cero y llegan al mismo vértice, cada una con su respectiva regla de producción. El siguiente 52 Capítulo 5. Diseño del analizador sintáctico paso es aplicar la regla básica número uno que consiste en predecir. La figura 5.5 muestra la aplicación de esta regla. O 0 •S FV CD CI Sus 1 Ver 2 Art 4 Pre 5 Art 6 Sus 7 •S FV CD O 21 O 0 O 3 Sus Figura 5.4. Grafo inicializado. •S FV CD CI S •Sus Sus 1 Ver 2 Art 3 Sus 4 Pre 5 Art 6 Sus 7 •S FV CD 22 Figura 5.5. Aplicación de las reglas básicas. Como la hipótesis a verificar es S, es necesario crear tantas aristas como reglas de producción existan para la formación del sujeto. Debido a que en este ejemplo sólo tenemos una regla de producción para el sujeto y en ambas aristas activas la hipótesis a verificar es el mismo símbolo no terminal, sólo será necesario crear una nueva arista activa que saldrá del vértice cero y llegará al mismo vértice. Los siguientes pasos involucran la aplicación de las reglas básicas dos y tres, las cuales permitirán generar aristas inactivas y la comprobación de hipótesis. El algoritmo debe buscar si existe una arista que contenga el símbolo terminal de la hipótesis que se está analizando: S • @Sus. En este ejemplo sí existe una arista con esa información la cual va del vértice cero al vértice uno. Esto permitirá avanzar 53 Capítulo 5. Diseño del analizador sintáctico el punto para indicar que la hipótesis ha sido verificada, lo cual provoca la creación de una nueva arista que sale del vértice cero al vértice uno; sin embargo, como se ha llegado a la comprobación de la regla, esta nueva arista se conoce como arista inactiva. La figura 5.6 muestra cómo se comprueba la hipótesis generando una arista inactiva y permitiendo que el algoritmo siga adelante. Como se puede observar en la figura 5.6, al momento de comprobar una hipótesis se crean nuevas aristas para continuar con el análisis sintáctico de la oración. Al momento de comprobar la existencia de un sujeto en la oración (S), se crean nuevas aristas las cuales remplazan a las aristas iniciales, ya que éstas contienen la información de qué tanto se ha comprobado en la aplicación de las reglas y qué es lo que falta. O S •FV CD CI O •S FV CD CI S •Sus S Sus• Sus 1 Ver 0 O •S FV CD O S •FV CD 23 2 Art 3 Sus 4 Pre 5 Art 6 Sus 7 Figura 5.6. Aplicación de las reglas básicas. Para una mayor claridad hemos considerado eliminar las aristas que ya no son usadas por el algoritmo. Las siguientes figuras 5.7, 5.8, 5.9, 5.10 y 5.11 muestran cómo se repite el proceso descrito anteriormente y presentan de forma resumida el funcionamiento del algoritmo. El algoritmo se detiene en el momento en que se comprueban todas las hipótesis de las aristas o hasta terminar de aplicar todas las reglas posibles para la obtención de la estructura sintáctica de la oración. 54 Capítulo 5. Diseño del analizador sintáctico S •FV CD CI O FV •Ver Sus• Sus 1 Ver 2 Art 0 S 3 Sus 4 Pre 5 Art 6 Sus 7 S •FV CD O Figura 5.7. Proceso intermedio del algoritmo de Earley. 24 O S FV •CD CI O S FV •CD S Sus• FV Sus 1 Ver 0 FV Ver• Art 2 3 Sus 4 Pre 5 Art 6 Sus 7 •Ver Figura 5.8. Proceso intermedio del algoritmo de Earley. 25 S FV •CD CI O O S 0 S FV •CD Sus• FV Sus 1 Ver Ver• Art 2 3 Sus 4 Pre CD 5 Art 6 Sus 7 •Art Sus •Art Sus CE CD Figura 5.9. Proceso intermedio del algoritmo de Earley. 26 55 Capítulo 5. Diseño del analizador sintáctico O O S FV •CD CI •Art Sus CD CD S FV •CD Art •Sus 3 Sus 4 Pre S Sus• FV Ver• CD Art 0 Sus 1 Ver 2 •Art Sus CE CD 27 5 Art 6 Sus 7 Art •Sus CE CD CD Art Sus• CE Art Sus •CE •Pre Art Sus Figura 5.10. Proceso intermedio del algoritmo de Earley. En este ejemplo el algoritmo se detendrá hasta obtener un grafo similar al que se muestra en la figura 5.11, en donde se puede apreciar que se obtienen dos estructuras sintácticas para la construcción de esta oración (por simplicidad se han omitido la mayoría de las aristas intermedias que fueron generadas durante la aplicación del algoritmo). O S FV CD CI• O S FV CD• CD CD Sus• FV Ver• Art 0 Sus 1 Ver 2 Art Sus CE• Art Sus• CI Art Sus• S 28 3 Sus 4 Pre 5 Art 6 Sus 7 Figura 5.11. Grafo que representa una oración con dos estructuras sintácticas. Las dos estructuras sintácticas obtenidas en este ejemplo, se encuentran representadas por las dos aristas que van del nodo 0 al nodo 7. Después de haber obtenido el grafo final es fácil la construcción de los árboles sintácticos de la oración. 56 Capítulo 5. Diseño del analizador sintáctico Es oportuno mencionar que J. M. Montero [9] realizó una tesis en la que hace un análisis comparativo de éste y otros algoritmos para la creación de un analizador sintáctico. Otro trabajo similar fue realizado por J. F. Quesada [19]. 5.2. Diseño general del analizador sintáctico En la figura 5.12 se muestra el diseño general de la arquitectura del analizador sintáctico, en donde se puede observar el proceso que se realiza durante el análisis de una oración. Primeramente, es necesario etiquetar cada una de las palabras que conforman la oración (tokens), por lo que el analizador léxico tomará la oración de entrada y realizará un filtrado con el objetivo de eliminar todo símbolo no válido para el sistema, como es el caso de los signos de puntación. Una vez terminada esta fase, la oración pasa por el proceso de etiquetado, en donde el sistema interactúa con el lexicón para determinar la categoría gramatical de cada palabra. Si se llegara a encontrar dentro de la oración una palabra que no esté en el lexicón, ésta será etiquetada como un sustantivo indefinido para poder continuar con el análisis de la oración. Dependiendo de qué tanta ambigüedad léxica se presente en esta etapa, la oración podrá ser etiquetada de 1 o n formas distintas. Una vez que el analizador léxico ha etiquetado la oración, el resultado es transferido al analizador sintáctico para determinar, con base en las reglas de producción, si la oración tiene o no una estructura sintáctica válida. Debido a la ambigüedad que existe en los lenguajes naturales, es común que el sistema encuentre más de una estructura sintáctica de acuerdo con las reglas de producción. En caso de no encontrar ninguna estructura sintáctica válida, se terminará el análisis de la oración y el sistema notificará al usuario de que la oración es incorrecta, creando un archivo con la información utilizada durante el análisis, para que el usuario determine la causa por la cual el sistema no pudo obtener una estructura válida para dicha oración. 57 Capítulo 5. Diseño del analizador sintáctico Lexicón Filtrado de la oración Oración de entrada Marcado morfológico Oración etiquetada Etiquetado de la oración 1 cv bnzx 2- c bx vb 3- mc pqd : nbgn xvcb ::N ANALIZADOR LÉXICO Estructuras sintácticas temporales Estructuras finales ⌧ ⌧ ⌧ Sí ⌧ ⌧ ⌧ ⌧ ⌧ ⌧ ⌧ ⌧ ⌧ ⌧ ⌧ ⌧ ⌧ Filtrado de estructuras sintácticas Resultado>0 Constructor de estructuras sintácticas No Error Reglas de producción Conocimiento lingüístico ANALIZADOR SINTÁCTICO Figura 5.12. Arquitectura general del analizador sintáctico. 29 En caso de encontrar una o más estructuras sintácticas, el analizador sintáctico pasa por la fase de filtrado de estructuras (método de dependencias), en donde el sistema interactúa con la base de datos del conocimiento lingüístico para comparar los patrones de la oración, con el objetivo de disminuir el número de estructuras sintácticas previamente encontradas. El sistema da dos posibles resultados: un mensaje de error en caso de que el sistema determine que ninguna estructura es válida de acuerdo con los patrones, o un subconjunto de las estructuras encontradas anteriormente. 58 Capítulo 5. Diseño del analizador sintáctico 5.3. Compendio de reglas gramaticales de producción Las reglas gramaticales constituyen el primer conocimiento que se tiene para que el analizador sintáctico construya la estructura sintáctica de una oración. El método basado en reglas gramaticales es uno de los más sencillos para su implementación; sin embargo, no es muy eficiente cuando se trata de trabajar con lenguajes ambiguos debido a que puede generar estructuras sintácticas incorrectas. Por lo que es conveniente utilizar el método de dependencias para solventar este problema. La finalidad de utilizar las reglas de producción o reglas gramaticales es obtener tanto los patrones de la oración como las primeras estructuras sintácticas, las cuales serán filtradas usando el método de dependencias. En las tablas 5.1 y 5.2 se define la simbología utilizada para la construcción de las reglas de producción, y en la tabla 5.3 se muestra el listado de las reglas de producción utilizadas para llevar a cabo las pruebas del sistema. Se pretende que con el tiempo esta lista de reglas se vaya incrementando. Tabla 5.1. Categoría gramatical de símbolos no terminales. 11 Símbolo Categoría gramatical O Oración S Sujeto FV Frase verbal CD Complemento directo CINTD1 Primer complemento interno del complemento directo CINTD2 Segundo complemento interno del complemento directo CINTD3 Tercer complemento interno del complemento directo CINTD4 Cuarto complemento interno del complemento directo CINTD5 Quinto complemento interno del complemento directo CI Complemento indirecto CC Complemento circunstancial 59 Capítulo 5. Diseño del analizador sintáctico CINTC1 Primer complemento interno del complemento circunstancial SUS1 Segundo sujeto u objeto de una oración (sustantivo) CINTS1 Primer complemento interno de SUS1 Tabla 5.2. Categoría gramatical de símbolos terminales. 12 Símbolo Categoría gramatical Art Artículo Sus Sustantivo Adj Adjetivo AdjO Adjetivo ordinal Adj. Adjetivo cardinal Pro Pronombre Ver Verbo Aux Verbo auxiliar Adv Adverbio Pre Preposición Con Conjunción Int Interjección E Cadena vacía SMB1 Símbolo de interrogación inicial SMB2 Símbolo de interrogación final 13 No. Tabla 5.3. Reglas gramaticales de producción. Notación de las reglas gramaticales de producción 1 O = SMB1 S @FV CD SMB2 2 O = @FV CD CC 3 O = @FV CC CD 4 O = @FV CD 60 Capítulo 5. Diseño del analizador sintáctico 5 O = SMB1 CC @FV CD SMB2 6 S = @Pro 7 FV = @Ver 8 FV = @Ver Adv 9 CD = Adj Art @Sus CINTD1 10 CD = Art @Sus Adj CINTD1 11 CD = Art @Sus CINTD1 12 CD = @Sus 13 CD = Art @Sus Adj 14 CD = @Sus CINTD1 15 CD = Adj @Sus CINTD1 16 CD = Art @Sus SUS1 CINTD1 17 CD = AdjC @Sus CINTD1 18 CD = Art Adj @Sus Adj 19 CINTD1 = Pre @Sus CINTD2 20 CINTD1 = Pre Art @Sus Adj 21 CINTD1 = Pre Art @Sus CINTD2 22 CINTD1 = Pre @Sus 23 CINTD1 = Pre Art @Sus Adj SUS1 24 CINTD1 = Pre Art @Sus Adj CINTD2 25 CINTD1 = Pre Art @Sus 26 CINTD1 = Pre Art Adj @Sus 27 CINTD1 = Pre Adj @Sus 28 CINTD1 = Pre @Sus SUS1 29 CINTD1 = Pre AdjC @Sus 30 CINTD1 = Pre @Sus SUS1 CINTD2 31 CINTD1 = Pre @Sus Adj CINTD2 32 CINTD2 = Pre Art @Sus 33 CINTD2 = Pre @Sus 34 CINTD2 = Pre AdjC Con AdjC @Sus 61 Capítulo 5. Diseño del analizador sintáctico 35 CINTD2 = Pre Art @Sus CINTD3 36 CINTD2 = Pre @Sus Adj 37 CINTD2 = Pre Art @Sus Adj CINTD3 38 CINTD2 = Pre @Sus Adj CINTD3 39 CINTD2 = Pre AdjO @Sus SUS1 40 CINTD2 = Pre @Sus CINTD3 41 CINTD2 = Pre AdjO @Sus CINTD3 42 CINTD2 = Pre @Sus SUS1 CINTD3 43 CINTD2 = Pre Art AdjO @Sus 44 CINTD2 = Pre Art AdjO @Sus CINTD3 45 CINTD2 = Pre Art @Sus Adj 46 CINTD3 = Pre @Sus 47 CINTD3 = Pre AdjC @Sus 48 CINTD3 = Pre @Sus CINTD4 49 CINTD3 = Pre Art @Sus Adj 50 CINTD3 = Pre Art @Sus CINTD4 51 CINTD3 = Pre AdjC @Sus CINTD4 52 CINTD3 = Pre Adj @Sus 53 CINTD4 = Pre Art @Sus CINTD5 54 CINTD4 = Pre Art @Sus Adj 55 CINTD4 = Pre @Sus 56 CINTD5 = Pre @Sus 57 CC = Pre @Sus 58 CC = Pre @Sus Adj Adj 59 CC = Pre @Sus CINTC1 60 CC = @Adv 61 CC = Pre Art @Sus CINTC1 62 CINTC1 = Pre @Sus 63 CINTC1 = Pre Art @Sus AdjC 64 SUS1 = Con @Sus 62 Capítulo 5. Diseño del analizador sintáctico 65 SUS1 = Con Adj @Sus 66 SUS1 = Con Art @Sus CINTS1 67 SUS1 = Con Pre @Sus 68 SUS1 = Con Art @Sus 69 CINTS1 = Pre Art @Sus El símbolo arroba lo hemos introducido en las reglas de producción con la finalidad de indicar al sistema cuál es el elemento gramatical rector en cada una de las reglas de producción. Esto es necesario ya que, al aplicar las reglas de producción, obtenemos árboles sintácticos de tipo constituyentes, por lo que el símbolo arroba nos ayuda durante el proceso de conversión de estos árboles a árboles de dependencias. Considerando el sentido apropiado del idioma, es fácil observar que, si bien todas estas reglas gramaticales de producción son posibles y correctas en el español, no hemos incluido otras reglas que también son correctas en el español. Afortunadamente el sistema le permite al usuario la posibilidad de ir agregando más reglas de producción, para que el analizador sintáctico incremente sus conocimientos y así poder ir abarcando cada vez más un mayor subconjunto del lenguaje español. 5.4. Diagrama de casos de uso Para llevar a cabo el desarrollo del sistema se utilizó UML con la finalidad de hacer un modelado del prototipo a implementar. La figura 5.13 muestra el diagrama de casos de uso considerados en el sistema. El objetivo de este diagrama es presentar la funcionalidad que ofrece el sistema en lo que se refiere a su interacción con el usuario. 63 Capítulo 5. Diseño del analizador sintáctico 30 Figura 5.13. Diagrama de casos de uso. 1) Primer caso de uso. a) Nombre del caso de uso: Crear gramática. b) Precondición: Que el usuario tenga los conocimientos necesarios para definir reglas de producción. c) Poscondición: Definir las reglas de producción. d) Condición final de éxito: Una vez que el usuario ha definido las reglas de producción, el sistema crea un archivo en donde se guarda esta información. e) Condición final de fallo: Si el usuario no define correctamente las reglas de producción o la ruta para guardar el archivo es incorrecta, el sistema presentará al usuario un mensaje de error indicándole la causa del error. 64 Capítulo 5. Diseño del analizador sintáctico 2) Segundo caso de uso. a) Nombre del caso de uso: Editar gramática. b) Precondición: Que el usuario tenga los conocimientos necesarios para definir reglas de producción. c) Poscondición: Añadir, eliminar o modificar reglas de producción. d) Condición final de éxito: Después de que el usuario realice las modificaciones a las reglas de producción, éstas deben verse reflejadas en el archivo que guarda dichas reglas de producción. En caso de que el usuario modifique las reglas de producción que el sistema está usando actualmente, entonces el analizador sintáctico deberá actualizar su información y esto se verá reflejado en el funcionamiento del sistema. e) Condición final de fallo: Si las modificaciones que realiza el usuario en las reglas de producción son incorrectas (≠ contradictorias), el sistema informará al usuario acerca del error que ha generado y le impedirá guardar las modificaciones realizadas. 3) Tercer caso de uso. a) Nombre del caso de uso: Configurar sistema. b) Precondición: Que el usuario tenga los conocimientos necesarios para configurar el sistema. c) Poscondición: Que el usuario defina la ruta del archivo que contiene las reglas de producción e indique cuál será el símbolo inicial y la cadena vacía. d) Condición final de éxito: Una vez que el usuario ha terminado de configurar el sistema, las modificaciones se verán reflejadas en el funcionamiento del analizador sintáctico, debido a que el sistema actualizará la información de las reglas de producción a utilizar. e) Condición final de fallo: Si la ruta del archivo de las reglas de producción es incorrecta o el archivo no existe, el sistema notificará al usuario del error generado y le impedirá llevar a cabo la modificación a la configuración del sistema. Otro error que se puede presentar es cuando el usuario no define correctamente el símbolo inicial y la cadena vacía, por lo que el sistema 65 Capítulo 5. Diseño del analizador sintáctico notificará al usuario el problema que se ha presentado y no le permitirá guardar los cambios a la configuración hasta que corrija el problema. 4) Cuarto caso de uso. a) Nombre del caso de uso: Analizar oración. b) Precondición: Que el usuario conozca el lenguaje español para que pueda construir una oración. c) Poscondición: Que el usuario introduzca una oración en el sistema. d) Condición final de éxito: Cuando el sistema analiza una oración se espera obtener como resultado la estructura sintáctica de la oración en cuestión. e) Condición final de fallo: Si el analizador sintáctico no contara con las reglas de producción necesarias para realizar el análisis de la oración, entonces el sistema enviará un mensaje de error y creará un archivo con la información necesaria para que el usuario determine la causa del error. Otra condición final de fallo ocurriría cuando la base de datos del conocimiento lingüístico no contara con los patrones para la oración que se está analizando, por lo que el sistema enviaría un mensaje de error al usuario indicándole las causas por las que el análisis de la oración ha fallado. 5.5. Diagrama de clases El objetivo del diagrama de clases es mostrar el análisis y el diseño realizado para la implementación del sistema. En la figura 5.14 se muestra el diagrama de clases para el análisis de una oración y el tipo de relaciones estructurales de cada una de las clases que fueron implementadas en el sistema. La case VentanaMDI_Principal de la figura 5.14 pertenece al entorno gráfico del usuario y es la que permite efectuar el análisis tanto léxico como sintáctico de una oración. A continuación se describe de forma detallada cada una de las clases diseñadas para el sistema. 66 Capítulo 5. Diseño del analizador sintáctico 31 Figura 5.14. Diagrama de clases del análisis de oraciones. Sintactico. La función de esta clase es inicializar la ejecución del sistema invocando la clase VentanaMDI_Principal a través del método main(). VentanaMDI_Pricipal. La labor de esta clase es ofrecerle al usuario una interfaz gráfica a través del uso de los paquetes de entorno gráfico que ofrece Java. Otra tarea de esta clase es comunicar las clases: LeeReglasGramaticales, AnalisisLexico y AnalisisSintáctico a través del método actionPrformed(). LeeReglasGramaticales. La labor de esta clase es cargar en memoria las reglas de producción que utiliza la clase AnalisisSintactico durante la obtención de la estructura sintáctica de una oración. Los principales métodos de esta clase son: VerConfiguración(), CargaReglas(), getSimboloInicial() y getSimboloVacio(). AnalisisLexico. La labor de esta clase es etiquetar cada una de las palabras que constituyen la oración de entrada. Los principales métodos de esta clase son: ConsutlaLexicon(), SeparaporToken(), Combinaciones(), getLongitud(), 67 Capítulo 5. Diseño del analizador sintáctico SeparaporTokenporTuplas(), CombnacionesTuplas(), getNoCombinciones() y getResultado(). AnalisisSintáctico. La labor de esta clase es obtener los posibles árboles sintácticos que pueda tener una oración. Los principales métodos de esta clase son: AlgoritmoEraleyInicializa(), NoResultados(), getPatronX(), ImprimeenPantalla() e ImprimeProcesoenArchivo(). Nodo. Esta clase es utilizada para la creación de cada uno de los nodos necesarios en la generación de un árbol sintáctico. Los datos que almacena un ejemplar de la clase nodo son: un símbolo terminal, un símbolo no terminal o una palabra de la oración, los accidentes gramaticales si es que existen, un enlace hacia el nodo padre en caso de no ser el nodo raíz del árbol y un enlace hacia los nodo hijos sí es que existen. Los métodos principales de esta clase son: setIzq(), setCen(), setDer(), setPadre(), CreaEnlacesDependencia() y RecorridoAmplitud(). 68 Capítulo 6 Pruebas del sistema Para realizar la evaluación del analizador sintáctico, se recopiló un pequeño corpus de oraciones en español. Estas oraciones fueron obtenidas de distintas personas, las cuales tenían entre 20 y 40 años de edad y con diferentes niveles de estudio. En este capítulo se muestra el corpus de oraciones utilizado en la fase de pruebas. Sólo describiremos en este capítulo las pruebas realizadas con algunas oraciones representativas de todas las pruebas realizadas (50 pruebas en total). Los casos de prueba que hemos contemplado documentar son cuatro. Para tal efecto será necesario primeramente presentar el escenario de pruebas utilizado para la evaluación del sistema. 6.1. Compendio de oraciones Durante la evaluación del analizador sintáctico, el sistema analizó cada una de las oraciones que se presentan en esta sección, obteniéndose un resultado satisfactorio. 69 Capítulo 6. Casos de prueba 1. ¿Cuál es el salario de los gobernadores de México? 2. Muéstrame todas las especialidades en ciencias de la computación en México. 3. ¿Cuál es el nombre del presidente actual? 4. Muéstrame las enfermedades más padecidas por la población mexicana en orden alfabético descendente. 5. Muéstrame por índice de mortalidad las enfermedades del estado de Morelos. 6. Dame el expediente clínico de Juan Pérez. 7. Muéstrame la cantidad de mexicanos entre 25 y 30 años. 8. Dame los nombres de los alumnos del área de sistemas distribuidos. 9. ¿Quiénes son compañeros de Arturo? 10. ¿Cuándo nació Rosy? 11. ¿Quiénes son los amigos de Gabriel y Arturo? 12. ¿Cuál es la cotización del dólar? 13. Muéstrame los alumnos inscritos en el periodo agosto-diciembre del año 2004. 14. Muéstrame un listado de los alumnos regulares y sus promedios. 15. Muestra un listado de los alumnos dados de baja. 16. Haz un listado de los maestros por especialidad. 17. Muestra un listado de las materias por especialidad. 18. Obtén información del equipo de cómputo disponible por área. 19. Dame un reporte de los nombres completos de los alumnos mayores de 18 años. 20. Muéstrame la calificación del grupo de segundo “A” y los nombres de los alumnos. 21. Busca el promedio general del grupo de segundo “A” del año pasado. 22. Dame los nombres de los empleados. 23. Muéstrame el registro del empleado Francisco. 24. Muéstrame la nómina de este periodo. 25. Muéstrame los departamentos de esta institución. 26. ¿Cuál es el número de personas con síndrome de Down? 27. ¿Quién descubrió América? 28. Muéstrame el nombre de las empresas extranjeras en México. 70 Capítulo 6. Casos de prueba 29. Muéstrame la calificación de los alumnos de la especialidad de sistemas distribuidos del departamento de computación. 30. ¿Cuáles son actualmente los alumnos con los mejores promedios? 31. Muéstrame los clientes mayores de 18 años. 32. Presenta un resumen de los resultados de las ventas de los empleados del año pasado. 33. Dame el historial de los depósitos realizados en efectivo o en cheques con un mes de antigüedad. 34. Muéstrame todos los retiros realizados en caja. 35. Dame el historial de ventas. 36. ¿Cuáles son mis transacciones de retiro y depósito del último mes? 37. Determina las ganancias de los automóviles vendidos en el primer trimestre de este año. 38. Busca el origen y el destino de los vuelos de las aerolíneas mexicanas. 39. Dame el número telefónico de los empleados del departamento de ventas. 40. Modifica los datos del empleado José Luis Rodríguez Ortiz. 41. Elimina los registros de los empleados despedidos. 42. Muéstrame el salario del personal del departamento de ventas. 43. ¿Dónde viven los proveedores de INFOSYS? 44. ¿Cuál es el salario del gerente de la tienda de Gigante? 45. ¿Cuál es el nivel de productividad de las empresas mexicanas? 46. ¿Cuál es la estrategia de mercadotecnia de la empresa Bimbo en México? 47. ¿Cuál es el canal de distribución utilizado por la empresa Bimbo? 48. Dame una lista del inventario de los equipos de cómputo. 49. ¿Quién ganará las próximas elecciones presidenciales? 50. Muéstrame las ventas agrupadas por productos del mes de agosto. 6.2. Escenario de pruebas El escenario de pruebas que se utilizó, está conformado por el compendio de oraciones presentadas anteriormente (ver sección 6.1), el lexicón (ver sección 3.1), el 71 Capítulo 6. Casos de prueba cual permite etiquetar cada una de las palabras que constituyen una oración y la base de datos del conocimiento lingüístico (ver sección 4.3). Las figuras 6.1, 6.2, 6.3, 6.4 y 6.5 muestran como ejemplo parte de la información léxica y morfológica que el sistema utilizó para los casos de prueba. 32 Figura 6.1. Información léxica y morfológica de verbos. En la figura 6.1 se muestra parte de la información que se encuentra en la tabla de verbos. En ella podemos observar en las columnas 1 y 2 algunos verbos y sus etiquetas léxicas respectivas, y de la columna 3 a la 7 se tienen las claves correspondientes a la información morfológica de cada verbo. Figura 6.2. Información léxica y morfológica de sustantivos. 33 Al igual que la tabla de verbos, en la tabla de sustantivos se tiene información léxica y morfológica. Un problema que aún no se ha podido resolver es el poder tener en nuestro lexicón todos los sustantivos, por lo tanto en la figura 6.2 sólo presentamos 72 Capítulo 6. Casos de prueba algunos de los sustantivos utilizados en los casos de prueba. Sin embargo, para afrontar esta problemática el sistema supone que cualquier palabra desconocida por el lexicón será tratada como un sustantivo indefinido y será tarea del analizador semántico determinar si es correcta la función que desempeñan las palabras desconocidas por el lexicón. (Nota: en esta tesis no se implementa el analizador semántico.) 34 Figura 6.3. Información léxica y morfológica de adjetivos. La figura 6.3 muestra la información de los adjetivos que el sistema utilizó durante los casos de prueba. 35 Figura 6.4. Información léxica y morfológica de artículos. La figura 6.4 muestra la información de los artículos que el sistema utilizó durante los casos de prueba. La mayoría de las tablas que conforman el lexicón cuentan con información léxica y morfológica; sin embargo, existen algunas categorías 73 Capítulo 6. Casos de prueba gramaticales que carecen de información morfológica como es el caso de las preposiciones, las cuales se muestran en la figura 6.5. Figura 6.5. Información léxica de preposiciones 36 En las figuras 6.6, 6.7, 6.8 y 6.9 se muestra un ejemplo de la información que utiliza el sistema de la base de datos del conocimiento lingüístico, para realizar el filtrado de las posibles estructuras sintácticas de una oración. 37 Figura 6.6. Tabla de verbos en infinitivo. La información que proporciona la tabla de verbos es una clave primaria para cada verbo y el tipo de clase funcional del verbo. La figura 6.7 muestra la tabla de oraciones. La información que proporciona esta tabla es para clasificar la estructura que pueda tener una oración con base en el tipo de verbo que se esté utilizando. 74 Capítulo 6. Casos de prueba Figura 6.7 Tabla de oraciones. 38 En la figura 6.8 se muestra una tabla de trabajo denominada combinaciones, la cual permite relacionar la tabla verbos con la tabla oraciones y la tabla patrones. Como se puede observar en esta tabla se encuentran columnas para los diez tiempos distintos que se manejan en español. Figura 6.8. Tabla de combinaciones. 39 Por último, presentamos en la figura 6.9 un ejemplo de la información de los patrones que la base de datos del conocimiento lingüístico ofrece al sistema para realizar el filtrado de estructuras sintácticas. 75 Capítulo 6. Casos de prueba Figura 6.9 Tabla de patrones. 40 6.3. Caso de prueba 1. Análisis léxico y sintáctico de una oración ambigua Cuando se realiza el análisis léxico y sintáctico de una oración, se pueden obtener distintos resultados: un menaje de error indicando que la oración es incorrecta, una ventana con un árbol de análisis sintáctico o varias ventanas dependiendo de la ambigüedad léxica y sintáctica que se pueda tener dentro de la oración en cuestión. Considerando el modo del verbo, la oración que utilizaremos en este caso de prueba es de tipo imperativo: “Dame el expediente clínico de Juan Pérez.” Los resultados que esperamos obtener para el análisis de esta oración son los siguientes: 1. Un etiquetado léxico de la oración con las siguientes categorías gramaticales: Ver Art Sus Adj Pre Sus. 2. Una única estructura sintáctica de la oración conformada por un verbo y un complemento directo. Al introducir la oración en el sistema, el analizador léxico etiquetó la oración en base a los resultados previstos como lo muestra la figura 6.10. Primeramente el analizador 76 Capítulo 6. Casos de prueba léxico etiqueta cada palabra por separado y posteriormente busca si varias palabras pueden ser etiquetadas como un solo token, en este caso el sistema etiquetó Juan como un sustantivo y Pérez como otro sustantivo, sin embargo en una fase posterior el sistema determinará que Juan Pérez es un solo sustantivo. Figura 6.10. Caso de prueba 1: Etiquetado léxico de una oración. 41 Una vez terminada la labor del analizador léxico, el analizador sintáctico toma la oración etiquetada para aplicarle las reglas de producción. En base a este conocimiento lingüístico, el sistema determina que existen dos estructuras sintácticas posibles para la oración. Posteriormente estas estructuras son comparadas con los patrones de la base de datos del conocimiento lingüístico, en donde el sistema determina que una estructura es incorrecta enviando un mensaje de error al usuario e indicándole que se encontraron dos estructuras sintácticas pero que la primera es incorrecta como lo muestra la figura 6.11. 42 Figura 6.11. Caso de prueba 1: Mensaje de error del analizador sintáctico. 77 Capítulo 6. Casos de prueba La estructura sintáctica de la oración que el sistema considera como correcta, es la misma que habíamos considerado en los resultados esperados. El resultado es presentado en formato de texto como lo muestra la figura 6.12; sin embargo, el usuario tiene la opción de ver este resultado de forma gráfica. Figura 6.12 Caso de prueba 1: Resultado del analizador sintáctico en formato de texto. 43 Podemos observar en la parte superior izquierda de la ventana interna de la figura 6.12 que el analizador léxico etiquetó la oración de forma correcta. La información que el usuario puede observar del análisis sintáctico en esta ventana es: identificador de nodo, contenido del nodo, identificador del nodo del que desciende, identificador del nodo rector, identificadores de los nodos hijos y accidentes gramaticales de las palabras que constituyen la oración. La información que se presenta en esta ventana se obtiene del árbol sintáctico de dependencias y el árbol sintáctico de constituyentes. 78 Capítulo 6. Casos de prueba En la parte inferior derecha de la ventana interna, se encuentra un botón con la leyenda “graficar”, como lo muestra la figura 6.12, el cual le permite al usuario ver de forma gráfica el árbol sintáctico de la oración. Las figuras 6.13 y 6.14 muestran de forma gráfica el árbol sintáctico de dependencias y el árbol sintáctico de constituyentes respectivamente. 44 Figura 6.13. Caso de prueba 1: Árbol sintáctico de dependencias. Figura 6.14. Caso de prueba 1: Árbol sintáctico de constituyentes. 45 En este caso de prueba los resultados obtenidos fueron iguales a los resultados esperados. 79 Capítulo 6. Casos de prueba 6.4. Caso de prueba 2. Configuración y uso de una nueva gramática Si el usuario del sistema en un momento dado desea definir su propia gramática, el sistema le permite realizar esta labor sin mucha complejidad (ver manual de usuario en anexo A). Supongamos que el usuario quiere utilizar nuevas reglas de producción pero no desea modificar las reglas del sistema, entonces deberá utilizar la opción Nueva gramática del menú Herramientas o el icono de acceso rápido. La figura 6.15 muestra la ventana en donde el usuario puede definir sus propias reglas de producción. Figura 6.15. Caso de prueba 2: Definición de nuevas reglas de producción. 46 Como el objetivo de este caso de prueba es demostrar que el sistema es flexible y dinámico, crearemos un pequeño archivo con pocas reglas de producción para realizar el análisis de una oración. Las reglas que hemos definido para este ejemplo son las siguientes: 80 Capítulo 6. Casos de prueba 1) Oración = @FV CD 2) FV = @Ver 3) CD = Art @Sus Cmp1 4) Cmp 1 = Pre Art @Sus Cmp 2 5) Cmp 2 = Pre Art @Sus Cmp 3 6) Cmp 3 = Pre Art @Sus Cmp 4 7) Cmp 4 = Pre Art @Sus Adj 8) Cmp 4 = @Cadena_Vacía Una vez que se han definido las reglas de producción, es necesario configurar el sistema para indicarle en dónde se encuentran las reglas de producción que debe utilizar durante el análisis sintáctico de una oración e indicarle cuál será el símbolo inicial y la cadena vacía de estas nuevas reglas de producción. Para modificar la configuración del sistema, se utiliza la opción Configurar sistema… del menú Archivo o el icono de acceso directo. La figura 6.16 muestra la ventana en donde el usuario realiza la configuración. 47 Figura 6.16. Caso de prueba 2: Ventana para configurar el sistema. Como se puede observar en la figura 6.16, el usuario puede volver a utilizar la configuración predefinida del sistema y retomar las reglas de producción originales cuando lo desee. Por el modo del verbo, la oración que utilizaremos en este caso de prueba es de tipo imperativo: “Presenta un resumen de los resultados de las ventas de los empleados del año pasado.” 81 Capítulo 6. Casos de prueba Los resultados que esperamos obtener para el análisis de esta oración son los siguientes: 1. Debido a que en este caso de prueba utilizamos muy pocas reglas de producción, no se presentará ningún tipo de ambigüedad sintáctica. 2. El analizador léxico deberá etiquetar la oración de la siguiente forma: Ver Art Sus Pre Art Sus Pre Art Sus Pre Art Sus Pre Art Sus Adj. 3. El analizador sintáctico deberá obtener una única estructura para esta oración. Al introducir la oración en el sistema, el analizador léxico etiquetó la oración en base a los resultados previstos como lo muestra la figura 6.17. Como la palabra del está compuesta por una preposición y un artículo, el sistema primeramente descompone esta palabra en sus elementos básicos para etiquetarlas posteriormente. Figura 6.17. Caso de prueba 2: Etiquetado léxico de una oración. 48 82 Capítulo 6. Casos de prueba Una vez que el analizador léxico termina su labor, el analizador sintáctico aplica las reglas de producción para analizar la estructura sintáctica de la oración y así poder compararla con los patrones de la base de datos del conocimiento lingüístico. El resultado obtenido fue el mismo que el resultado esperado como lo muestran las figuras 6.18 y 6.19, las cuales corresponden al árbol sintáctico de dependencias y de constituyentes respectivamente de la oración. En este caso de prueba hemos omitido por simplicidad la vista en formato de texto. 49 Figura 6.18. Caso de prueba 2: Árbol sintáctico de dependencias. Figura 6.19. Caso de prueba 2: Árbol sintáctico de constituyentes. 50 83 Capítulo 6. Casos de prueba En este caso de prueba los resultados obtenidos fueron iguales a los resultados esperados. 6.5. Caso de prueba 3. Análisis léxico y sintáctico de una oración Considerando el modo del verbo, la oración que utilizaremos en este caso de prueba es de tipo imperativo: “Obtén un listado de los maestros por especialidad.” Los resultados que esperamos obtener para el análisis de esta oración son los siguientes: 1. Dos etiquetados léxicos de la oración con las siguientes categorías gramaticales: Ver AdjC Sus Pre Art Sus Pre Sus y Ver Art Sus Pre Art Sus Pre Sus. 2. Dos estructuras sintácticas de la oración conformadas por un verbo y un complemento directo. Al introducir la oración en el sistema, el analizador léxico etiquetó la oración en base a los resultados previstos como lo muestra la figura 6.20. Como se presentó una ambigüedad léxica con la palabra un, existe la posibilidad de obtener más de una estructura sintáctica. Como se puede observar en la figura 6.20, el analizador léxico etiquetó la palabra un como un articulo y como un adjetivo de tipo cardinal, y será trabajo del analizador sintáctico determinar cuál de las dos etiquetas es correcta. 84 Capítulo 6. Casos de prueba Figura 6.20. Caso de prueba 3: Etiquetado léxico de una oración. 51 Una vez que el analizador léxico ha terminado su labor, el analizador sintáctico toma la primera forma de etiquetar la oración y determina con base en las reglas de producción que existen dos estructuras sintácticas para la oración, las cuales son comparadas con la base de datos del conocimiento lingüístico de donde el sistema determina que la primera estructura sintáctica que encontró es incorrecta, mientras que la segunda sí es correcta. Posteriormente el analizador sintáctico toma la segunda forma de etiquetar la oración y encuentra que, de acuerdo a los patrones de producción, existen dos posibles estructuras sintácticas para la oración, las cuales se compraran con los patrones de la base de datos del conocimiento lingüístico para determinar si ambas son válidas; también en este caso el sistema vuelve a indicar que la primera estructura sintáctica es incorrecta presentando al usuario un total de dos estructuras sintácticas para la oración en lugar de mostrar cuatro posibles estructuras sintácticas. La figura 6.21 muestra en formato de texto las dos estructuras sintácticas para la oración, mientras que en las figuras 6.22 y 6.23 se muestra el árbol de dependencias de cada una de las estructuras sintácticas obtenidas. Como se puede ver en la figura 6.22 y 6.23, los árboles de dependencias obtenidos son iguales. Esto se debe a que la única diferencia que existe entre ellos es la forma en que está funcionando la palabra un. En la primera estructura sintáctica un 85 Capítulo 6. Casos de prueba funciona como un adjetivo que denota cantidad (ejemplo: un listado, dos listados, etc.), y en la segunda estructura sintáctica la palabra un funciona como un artículo indeterminado masculino, por lo que será tarea del analizador semántico desambiguar esta oración determinando cuál es la interpretación correcta de la palabra un para este caso. En este caso de prueba los resultados obtenidos fueron iguales a los resultados esperados. Figura 6.21 Caso de prueba 3: Resultado del analizador sintáctico en formato de texto. 52 86 Capítulo 6. Casos de prueba 53 Figura 6.22. Caso de prueba 3: Primer árbol sintáctico de dependencias. Figura 6.23. Caso de prueba 3: Segundo árbol sintáctico de dependencias. 54 6.6. Caso de prueba 4. Edición de reglas gramaticales de producción Para este caso de prueba utilizaremos la misma oración que se utilizó en el caso de prueba 3, pero modificando el orden de palabras, es decir, en lugar de escribir en el sistema obtén un listado de los maestros por especialidad escribiremos: “Obtén por especialidad un listado de los maestros.” 87 Capítulo 6. Casos de prueba Muchas personas podrían considerar que no existe ninguna diferencia entre estas dos oraciones y en un momento dado podrían afirmar que es la misma oración; sin embargo, para el sistema estas dos oraciones son diferentes. Es por ello que en el lenguaje natural existe una relación de n a n, es decir, un texto puede tener varios significados y un significado puede estar escrito de distintas formas. Los resultados que esperamos obtener para el análisis de esta oración son los siguientes: 1. Un mensaje de error, porque el sistema no tiene todas la reglas de producción necesarias para analizar esta oración aun cuando el sistema sí haya podido analizar la oración en el caso de prueba 3. Al igual que en el caso de prueba anterior, el analizador léxico etiquetó la oración de dos formas distintas debido a la ambigüedad léxica que existe con la palabra un. Al tomar el analizador sintáctico el resultado del análisis léxico se encontró, en base a las reglas de producción, una posible estructura sintáctica para cada una de las formas de etiquetar la oración; sin embargo, el sistema presentó un mensaje de error debido a que la estructura sintáctica encontrada no coincidió con los patrones de la base de datos del conocimiento lingüístico, como lo muestra la figura 6.24. 55 Figura 6.24. Caso de prueba 4: Mensaje de error del analizador sintáctico. Como el analizador sintáctico toma dos resultados del analizador léxico, el mensaje de error de la figura 6.24 aparece dos veces ante el usuario. Podemos agregar las reglas de producción que le hacen falta al sistema para que pueda analizar este tipo de oraciones, las reglas que debemos introducir son las siguientes: 88 Capítulo 6. Casos de prueba 1) CD = Pre @Sus CINTD1 2) CINTD1 = Art @Sus CINTD2 3) CINTD1 = AdjC @Sus CINTD2 La opción Editar gramática del menú Herramientas nos permite agregar esta reglas al sistema o a través del icono de acceso rápido (ver manual de usuario en anexo A). Una vez agregadas estas reglas de producción en el sistema, el analizador sintáctico muestra dos estructuras consideradas como correctas como lo muestran las figuras 6.25 y 6.26, en donde podemos ver los árboles de constituyentes correspondientes a la oración analizada. En este caso de prueba, al igual que en el caso de prueba 3, se encontraron dos estructuras similares en donde el árbol de dependencias es el mismo; sin embargo, la diferencia la podemos observar en el árbol de constituyentes, en donde podemos ver que la palabra un puede tener dos funciones distintas: como adjetivo o artículo. Figura 6.25. Caso de prueba 4: Primer árbol sintáctico de constituyentes. 56 89 Capítulo 6. Casos de prueba 57 Figura 6.26. Caso de prueba 4: Segundo árbol sintáctico de constituyentes. 90 Capítulo 7 Conclusiones y trabajos futuros En este capítulo presentamos las conclusiones obtenidas después de haber realizado un análisis, diseño e implementación de un analizador sintáctico para oraciones en español usando el método de dependencias. También deseamos mencionar en este capítulo algunos de los tantos trabajos que faltan por realizar dentro de esta área de procesamiento de lenguaje natural, haciendo énfasis en el idioma español, debido a que la mayoría de los trabajos que se han realizado se encuentran enfocados para el tratamiento del inglés. 91 Capítulo 7. Conclusiones y trabajos futuros 7.1. Conclusiones En este trabajo se desarrolló e implementó un analizador sintáctico para las oraciones en español usando el método de dependencias que era el principal objetivo de esta tesis. De manera particular se obtuvieron los siguientes resultados: a) Se implementó un analizador sintáctico flexible y dinámico, permitiendo que con el tiempo el sistema pueda ir incrementando sus conocimientos lingüísticos con el objetivo de poder poco a poco abarcando un subconjunto mayor del español. b) Gracias a que el sistema es flexible y dinámico, cualquier usuario experto en PLN puede agregarle o modificarle al sistema la información sintáctica con la que actualmente cuenta, sin la necesidad de tener que trabajar con el código fuente (Java), ni compilar nuevamente el sistema. c) Observamos en las pruebas realizadas que, aun cuando no pudimos eliminar la ambigüedad sintáctica que puede tener una oración, la implementación del método de dependencias mejora notablemente la eficiencia del analizador sintáctico. d) Una aportación importante de esta tesis, es la mejora realizada al diseño de la base de datos del conocimiento lingüístico, lo cual permite que un verbo pueda tener los mismos patrones que otro verbo y además permite que los patrones de un mismo verbo sean diferentes, dependiendo del tiempo en el que se encuentre conjugado. Otro aspecto que contempla el diseño de la base de datos es la existencia de verbos con polisemia, los cuales pueden manejar patrones distintos dependiendo del contexto en el que se usen. 92 Capítulo 7. Conclusiones y trabajos futuros 7.2. Trabajos futuros En la actualidad existe todavía mucho qué realizar en esta área de investigación, y aún estamos lejos de poder crear un sistema que sea capaz de entender a la perfección a un ser humano. Algunos trabajos futuros que se pueden realizar para complementar este trabajo son los siguientes: 1) Diseñar un sistema para la extracción automática de patrones con el objetivo de llenar la base de datos del conocimiento lingüístico de forma automática o semiautomática. Dicho trabajo evitará el extremadamente tedioso trabajo de llenar de forma manual una base de datos del conocimiento lingüístico. 2) Realizar un trabajo enfocado al español que aborde toda la problemática que existe en el tratamiento del lenguaje por computadora. El español, al igual que otros lenguajes naturales, presenta excepciones que los sistemas de cómputo deben poder tratar. Es por ello que surge la necesidad de realizar una tesis de este tipo. 3) Otro trabajo futuro que se puede realizar es sobre la optimización en el funcionamiento del algoritmo de Early. Este algoritmo es muy eficiente pero no se consideró en su diseño que una oración pueda ser etiquetada de distintas formas. Esto provoca una pérdida de tiempo y esfuerzo debido a que por lo general sólo una o dos palabras pueden tener ambigüedad léxica, permitiendo así aprovechar aquellas partes de la oración que son iguales. 4) Otro problema que existe actualmente es que las reglas gramaticales del español no se encuentran expresadas de tal forma que sean fáciles de implementar en un sistema de cómputo, por lo que surge la necesidad de realizar un trabajo en donde se compile un conjunto lo más grande posible de reglas de producción. 93 Capítulo 7. Conclusiones y trabajos futuros 5) Por último, sería conveniente crear una gramática especial que permita expresar varias reglas de producción sin la necesidad de repetir reglas similares; es decir, en el español existe la libertad para escribir una oración empezando con el sujeto, el verbo o el predicado, entonces en lugar de escribir tres veces la misma regla pero en orden diferente, se debería realizar un trabajo para definir una gramática que exprese lo mismo pero con menos reglas. 94 Referencias bibliográficas [1] J. A. Zárate, R. A. Pazos, A. Gelbukh, “Las Ontologías como un Medio de Hacer Portable una Interfaz en Lenguaje Natural a Base de Datos”, Ingeniería de Software en la Década del 2000, Cartagena de Indias, Colombia, Agosto 2003, pp. 242-244. [2] M. Moens, “Natural Language Analysis”, University of Edinburgh, 1998, http:// ieeexplore.ieee.org/ search/basicsearch.jsp. [3] M. Saiz, “Procesamiento del Lenguaje Natural: Presente y Perspectivas Futuras”, Ingeniería de Software en la Década del 2000, Cartagena de Indias, Colombia, Agosto 2003, pp. 196-198. [4] A. V. Aho, R. Seit, J. D. Ullman, Compiladores Principios, Técnicas y Herramientas, Addison Wesley Longman, 1998, pp. 164-264. [5] S. V. Cavadini, “Herramientas para la Construcción de Compiladores”, 2004, http://www.ucse.edu.ar/fma/compiladores/tools.html. [6] S. N. Galicia, Análisis Sintáctico Conducido por un Diccionario de Patrones de Manejo Sintáctico Investigación en para Lenguaje Computación del Español, IPN, tesis México, doctoral, D.F., Centro Agosto de 2000. http://www.gelbukh.com/Tesis/Sofia/tesisfinal.htm [7] M. García Q., “Estructura Definicional Terminográfica en el Subdominio de la Oncología Clínica”, EliEs Estudios de Lingüística Española, vol. 14, 2001, http://elies.rediris.es/elies14/index.html#indice. 95 [8] Laboratorio de Inteligencia Artificial, “Proyecto Análisis”, Universidad Politécnica de Madrid, 2004, http://delicias.dia.fi.upm.es/areas/procesamiento_del_lenguaj_ Esp_frames.html. [9] J. M. Montero M., “Desarrollo de un Entorno para el Análisis Sintáctico de una Lengua Natural”, Universidad Politécnica de Madrid, España, 2004, http:// lorien.die.upm.es/~juancho/pfcs/JMMM/pfc_jmmm.pdf. [10] A. Fernández R., “Construcción de un Sistema de Recuperación de Información Multilingüe en la Web”, Universidad de Alicante, España, 2003, http:// www.dlsi.ua.es/projectes/srim/informacion.html. [11] A. Ferrández, “Slot Unification Parser for Anaphora Resoultion”, 2004, http:// citeseer.ist.psu.edu/462369.html. [12] R. A. García, Modelado Gramatical de un Subconjunto del Lenguaje Español, tesis de maestría, Centro Nacional de Investigación y Desarrollo Tecnológico, Cuernavaca, Mor., Mayo 2003. [13] M. Y. Hernández P., Modelo de Interpretación de Expresiones Gráficas y de Lenguaje Natural para una Interfaz Inteligente, Tesis de maestría, Centro Nacional de Investigación y Desarrollo Tecnológico, Cuernavaca, Mor, Mayo 1997. [14] N. Parada, Uso de Gramáticas de Rasgos para Reconocimiento de Oraciones en Español, tesis de maestría, Laboratorio Nacional de Informática Avanzada A.C., Xalapa, Ver., Diciembre 1997. [15] J. I. Padrón, Analizador Morfológico-Sintáctico de Oraciones en Lenguaje Español, propuesta de tesis de maestría, Centro Nacional de Investigación y Desarrollo Tecnológico, Cuernavaca, Mor., Agosto 2001. 96 [16] La Redacción OCÉANO, Gramática Práctica, editorial OCÉANO, Barcelona España, 1999. [17] J. Earley, “An Efficient Context-Free Parsing Algorithm”, tesis Doctoral, University of California, Berkeley, California, Febrero 1970, pp. 94-102, http://www-2.cs.cmu.edu/afs/cs.cmu.edu/project/cmt-55/lti/Courses/711/Class-no tes/p94-earley.pdf. [18] J. C. Pasamontes, “Estrategias de Incorporación de Conocimiento Sintáctico y Semántico en Sistemas de Comprensión de Habla Continua en Español”, Escuela Técnica Superior de Ingenieros de Telecomunicaciones, Madrid, España, 2004, http://elies.rediris.es/elies12/cap632.htm. [19] F. Quesada, “A General, Sound and Efficient Natural Language Parsing Algorithm Based on Syntactic Constraints Propagation”, Centro de Información Científica de Andalucía, Sevilla, España, 1998, http://arxiv.org/ PS_cache/cmplg/pdf/9801/9801005.pdf. 97 Anexo A Manual de usuario 98 Descripción del sistema En esta sección presentamos una descripción del sistema diseñado durante el desarrollo de esta tesis. La figura A.1 ilustra el ambiente gráfico desarrollado. 58 Figura A.1. Entorno gráfico del sistema. Como se puede observar en la figura A.1, el sistema cuenta con una barra de menú y una barra de iconos, los cuales le permiten al usuario realizar diversas actividades. Menú Archivo. Este menú está formado por dos opciones: Configurar sistema… y Salir. 99 Configurar sistema… Esta opción le permite al usuario indicarle al sistema en dónde se encuentra el archivo que contiene las reglas gramaticales de producción, así como determinar qué carácter será considerado como símbolo inicial y cuál será considerado como cadena vacía. La figura A.2 muestra la ventana que le permite al usuario configurar el sistema. 59 Figura A.2. Ventana para configurar sistema. Salir. Esta opción le permite al usuario terminar la ejecución del entorno del analizador sintáctico. Menú Ver. Este menú está constituido por tres opciones que le permiten al usuario organizar las ventanas de distintas formas. Si el usuario desea tener el análisis sintáctico de varias oraciones, entonces tendrá una ventana por cada resultado obtenido durante el análisis sintáctico de las oraciones, por lo cual, el menú Ver cuenta con las opciones Maximizar, Mosaico y Cascada. Maximizar. Esta opción le permite al usuario maximizar la ventana que contiene el resultado del análisis sintáctico. Si el usuario tiene más de una ventana con resultados, sólo podrá ver una ventana a la vez. 100 Mosaico. Si se tiene más de una ventana con un resultado de análisis sintáctico, esta opción permite acomodar las ventanas de tal forma que el usuario pueda observar todos los resultados al mismo tiempo. Entre más ventanas se tengan el tamaño de éstas irá disminuyendo. Cascada. Como su nombre lo indica, esta opción le permite al usuario acomodar todas las ventanas que contengan los resultados del análisis sintáctico en forma de cascada. Menú Herramientas. Este menú contiene las opciones Nueva gramática y Editar gramática, las cuales permiten respectivamente crear o modificar reglas gramaticales de producción para que el sistema trabaje con ellas si así lo desea. Nueva gramática. Esta opción le permite al usuario crear un archivo, el cual contendrá un conjunto de símbolos no terminales, un conjunto de símbolos terminales y un conjunto de reglas gramaticales. La correcta definición de las reglas gramaticales de producción es responsabilidad del usuario y no del sistema. La figura A.3 muestra la venta que se le presenta al usuario para realizar esta actividad. La ventana diseñada para la definición de nuevas reglas gramaticales de producción, está dividida en tres partes importantes. La primera parte le permite al usuario definir los símbolos no terminales que se van a utilizar, con la finalidad de tener un mejor control de cuáles símbolos no terminales están siendo utilizados particularmente en este archivo; además si lo desea, el usuario puede agregar algún comentario a cada símbolo que defina, para lo cual deberá utilizar el carácter apóstrofe y en seguida se puede teclear la descripción del símbolo. En la segunda parte de esta ventana se encuentran definidos por defecto todos los símbolos terminales con los que puede trabajar este sistema, a excepción del símbolo que representa cadena vacía, el cual 101 deberá ser definido por el usuario. Al igual que en la parte anterior, en esta sección también se pueden agregar comentarios. Por último, la tercera sección está reservada para la definición de las reglas gramaticales de producción, en donde el usuario es el único responsable de la definición correcta de las reglas gramaticales, y el comportamiento del sistema dependerá de la definición que el usuario realice. En la sección de definición de reglas gramaticales de producción, sólo se podrán utilizar los símbolos terminales y no terminales que fueron definidos previamente. 60 Figura A.3. Ventana para definir nuevas reglas gramaticales. La única limitante para la creación de las reglas gramaticales de producción, es evitar definir reglas que tengan recursividad por la derecha. Por defecto el sistema trabaja con un conjunto de reglas gramaticales de producción previamente definidas; sin 102 embargo, si el usuario desea crear sus propias reglas gramaticales de producción, con esta opción lo puede hacer. Editar gramática. Esta opción le permite al usuario modificar el archivo de reglas gramaticales de producción en caso de que lo desee. La figura A.4 muestra la ventana en la que el usuario puede llevar a cabo esta tarea. Figura A.4. Ventana para editar reglas gramaticales. 61 Menú Ayuda. Este menú está constituido por las opciones Temas de ayuda y Acerca de… 103 Temas de ayuda. Esta opción le presenta al usuario un manual de ayuda, con el objetivo de que éste conozca a fondo todas y cada una de las actividades que puede realizar con el analizador sintáctico. La figura A.5 muestra la ventana que contiene los temas de ayuda. Figura A.5. Ventana de ayuda del analizador sintáctico. 62 Acerca de… Esta opción presenta al usuario una ventana informativa, con el objetivo de dar a conocer el lugar de origen de esta tesis, así como los nombres de las personas que colaboraron en su desarrollo. 104 Anexo B Diagramas de secuencia 105 En este anexo se presentan los diagramas de secuencia correspondientes al diagrama de casos de uso de la figura 5.13 de la sección 5.4. 106 63 Figura B.1. Secuencia para crear un archivo con reglas de producción. 107 108 Figura B.2. Secuencia para editar un archivo de reglas de producción. 64 109 Figura B.3. Secuencia para configurar el sistema. 65 110 111 112 66 Figura B.4. Secuencia para analizar una oración. 113