Download 1 - Cenidet

Document related concepts

Analizador sintáctico wikipedia , lookup

Gramática formal wikipedia , lookup

TreeBank wikipedia , lookup

Compilador wikipedia , lookup

Historia de la construcción de los compiladores wikipedia , lookup

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