facultad matemática, física y computación
Post on 29-Dec-2021
8 Views
Preview:
TRANSCRIPT
Universidad Central “Marta Abreu” de Las Villas.
Facultad Matemática, Física y Computación
TRABAJO DE DIPLOMA
Título: Traductor de Español a Latín para la
descripción de las especies botánicas.
AUTORES: Daril Alemán Morales
Fernando David García García
TUTORES: Dra. Zoila Zenaida García Valdivia
Dra. Susana Carreras Gómez
CARRERA: Licenciatura en Ciencia de la Computación
Curso 2012-2013
Hago constar que el presente trabajo fue realizado en la Universidad Central “Marta Abreu” de Las Villas
como parte de la culminación de los estudios de la especialidad de Ciencia de la Computación,
autorizando a que el mismo sea utilizado por la institución, para los fines que estime conveniente, tanto
de forma parcial como total y que además no podrá ser presentado en eventos ni publicado sin la
autorización de la Universidad.
________________ ________________
Firma de los autores
Los abajo firmantes, certificamos que el presente trabajo ha sido realizado según acuerdos de la
dirección de nuestro centro y el mismo cumple con los requisitos que debe tener un trabajo de esta
envergadura referido a la temática señalada.
______________ _______________ __________________
Firma de los tutores Firma del jefe del
Laboratorio
Pensamiento
I
No necesito saberlo todo, tan sólo necesito saber dónde encontrar aquello que me hace
falta, cuando lo necesite.
Albert Einstein
Dedicatoria
II
Dedicatoria
A mí, por tanto esfuerzo y noches sin dormir.
A mis padres, por su apoyo en todo momento.
A toda mi familia, por su preocupación.
A mis amigos, siempre presentes en momentos difíciles.
Daril Alemán Morales
Dedicatoria
III
Dedicatoria
En memoria de mi abuelo Fernando que siempre confió en mí y me brindó apoyo en todo
momento de su vida; y sé que está orgulloso de mí.
A toda mi familia que de una forma u otra me brindaron su apoyo.
Fernando D. García García
Agradecimientos
IV
Agradecimientos
A mis padres, por su incondicional apoyo en todos los momentos de mi vida y por hacer de
mí una mejor persona.
A mis abuelos, por preguntarme en todo momento aun cuando no entendieran nada.
A mi hermana Deyanira, por hacerme olvidar los problemas.
A todos mis tíos, por estar siempre presentes.
A Fernando, mi compañero de tesis, por su aporte en la realización de la misma.
A Víctor, Sergito y Ruperto por su ayuda en estos 5 años.
A todos los colegas que aún continuamos juntos después de tantas aventuras.
A los que ya no están.
A mis tutoras, por su paciencia y apoyo en estos meses difíciles.
A Maikel, por su ayuda a última hora.
A Dayana, por los buenos momentos, típico de ella.
A Nesty, por su apoyo en la distancia.
A todos los que contribuyeron en mi formación como estudiante.
Daril Alemán Morales
Muchas Gracias.
Agradecimientos
V
Agradecimientos
A mi madre, por haberme dado la fuerza necesaria durante todos estos años para enfrentarme
a las dificultades de la vida.
A mis abuelas, mi abuelo Marcelino, mis tías y mi padre, por preocuparse tanto por mí.
A mis hermanas Maité y Kemeelyt, por estar en todo momento disponibles para brindarme
su ayuda y cariño.
A mi novia Baby por su cariño y ayuda desinteresada.
A todos mis amigos, que estuvieron junto a mí en los buenos y malos momentos.
A mis compañeros de aula, especialmente a Victor Marrero, Sergito y Daril por su ayuda
académica incondicional.
A mis tutoras Zenaida y Susana por su inestimable ayuda.
A mis profesores de clases que con tanta sabiduría me prepararon para ser un buen
profesional.
A mi compañero de tesis Daril, por todo su apoyo y su paciencia infinita.
A mi compañero Maikel y a todas aquellas personas que de una forma u otra, ayudaron a la
realización de este trabajo.
GRACIAS A DIOS
Fernando D. García García
Muchas gracias.
Resumen
VI
Resumen
Los profesionales de la botánica requieren conocer un sistema preciso y universal que
les permita describir las nuevas unidades que van siendo incorporadas al sistema de su
ciencia. En la Universidad Central “Marta Abreu” de las Villas (UCLV) existe un Jardín
Botánico en el cual se llevan a cabo investigaciones acerca del mundo vegetal. Por
solicitud de esta entidad, surgió la idea de desarrollar una aplicación computacional que
dotara a sus especialistas de la herramienta básica en la práctica taxonómica.
Como antecedente de este trabajo, se desarrolló una primera versión del software con
el fin de automatizar el proceso taxonómico. El mismo fue desarrollado como trabajo de
Diploma por parte de dos estudiantes de la carrera Ciencia de la Computación en el año 2006.
Esta versión no cumplía aún con todos los requerimientos de la problemática en cuestión. Por
ello se decidió dar continuidad al tema a través del presente trabajo.
La aplicación se desarrolló en dos etapas. En la primera de ellas se realizó el diseño
del programa que daría solución al problema planteado. Para ello se utilizó la notación del
Lenguaje de Modelación Unificado. En la segunda etapa se procedió a la implementación del
programa utilizando conjuntamente la programación a través de un lenguaje declarativo,
como lo es Prolog, y la programación orientada a objeto, en este caso Java. De esta forma
quedó desarrollado EsLatín3, Traductor de Español a Latín para la descripción de las especies
botánicas, que constituye una herramienta muy útil y eficiente.
Abstract
VII
Abstract
The professionals of the botany need to know a precise and universal system that
allows them to describe the new units that are incorporated into the system of their science. In
the Central University “Marta Abreu“ of Las Villas (UCLV) exists a Botanical Garden in
which researches are carried out on the vegetable world. For request of this entity, arose the
idea of creating an application that will provide its specialists with the basic tool in the
taxonomic practice.
As precedent of this work, the first version of the software was developed in order to
automate the taxonomic process. It was developed like a Diploma Paper on the part of two
students of the major of Computer Science in 2006. This version was still not fulfilling with
all the requests of the issue in question. That is why it was decided to give continuity to that
topic through the present work.
The application was developed in two stages. The first one was the creation of the
design of the program that would answer the problem. For this, there was used the notation of
the Unified Modelling Language. The second stage was the implementation of the program
using jointly the programming through a declarative language, as it is Prolog, and the
programming faced to the object, in this case Java. This way was developed EsLatín3, a
Translator from Spanish to Latin for the description of the botanical species, which
constitutes a very useful and efficient tool.
Índice
VIII
Contenido
Dedicatoria .............................................................................................................................................. II
Dedicatoria ............................................................................................................................................. III
Agradecimientos .................................................................................................................................... IV
Agradecimientos ..................................................................................................................................... V
Resumen ................................................................................................................................................ VI
Abstract ................................................................................................................................................. VII
Introducción ............................................................................................................................................ 1
Planteamiento del problema .................................................................................................................... 1
Objetivo general ...................................................................................................................................... 2
Objetivos específicos .............................................................................................................................. 3
Preguntas de investigación ...................................................................................................................... 3
Justificación de la investigación ............................................................................................................. 4
CAPÍTULO 1: PROCESAMIENTO DEL LENGUAJE NATURAL EN LA INTELIGENCIA ARTIFICIAL ................. 5
1.1 Procesamiento del lenguaje natural ....................................................................................... 5
1.1.1 Introducción .................................................................................................................... 5
1.1.2 Historia ............................................................................................................................ 6
1.1.3 Problemática del lenguaje natural .................................................................................. 7
1.2 Traducción automática: métodos, problemas y potencial ..................................................... 9
1.2.1 ¿Qué es la traducción automática? ................................................................................ 9
1.2.2 Métodos de traducción automática ............................................................................... 9
1.2.3 Problemas de la traducción automática ....................................................................... 12
1.2.4 Futuro de la traducción automática ............................................................................. 13
1.3 La programación lógica y el lenguaje natural ....................................................................... 13
1.3.1 Las gramáticas en Prolog .............................................................................................. 14
1.3.2 Gramáticas Libres del Contexto .................................................................................... 15
1.3.3 Gramáticas de Cláusulas Definidas ............................................................................... 17
1.4 Descripción de plantas mediante el Latín Botánico .............................................................. 21
Índice
IX
1.4.1 Características del texto latino empleado en la descripción de las especies botánica. 21
1.4.2 El texto no comparativo en la descripción de las especies botánicas. ......................... 23
1.5 Conclusiones parciales .......................................................................................................... 25
CAPÍTULO II: IMPLEMENTACIÓN DE ESLATÍN 3, TRADUCTOR DE ESPAÑOL A LATÍN PARA LA
DESCRIPCIÓN DE LAS ESPECIES BOTÁNICAS ......................................................................................... 26
2.1 Introducción .......................................................................................................................... 26
2.2 Modelación del sistema ........................................................................................................ 26
2.2.1 Diagrama de Casos de Uso ............................................................................................ 27
2.2.2 Diagrama de Actividades............................................................................................... 28
2.2.3 Diagrama de Clases ....................................................................................................... 28
2.3 ¿Por qué se escogen los lenguajes JAVA y PROLOG? ........................................................... 33
2.3.1 La Gramática en Prolog ................................................................................................. 33
2.3.2 El archivo Diccionario .................................................................................................... 35
2.3.3 Predicados auxiliares en Prolog .................................................................................... 36
2.3.4 Enlace Java-Prolog......................................................................................................... 37
2.3.5 Acerca del instalador del Software. .............................................................................. 40
2.4 Conclusiones Parciales .......................................................................................................... 40
CAPÍTULO III: MANUAL DE USUARIO DE ESLATÍN 3 .............................................................................. 41
3.1 Características del software .................................................................................................. 41
3.2 Pasos para la instalación del software .................................................................................. 42
3.3 Trabajo con la aplicación ....................................................................................................... 42
3.4 El menú Archivo .................................................................................................................... 45
3.5 El menú Editar ....................................................................................................................... 46
3.6 El menú Diccionario .............................................................................................................. 47
3.7 El menú Herramientas .......................................................................................................... 54
3.8 El menú Ayuda ...................................................................................................................... 56
CONCLUSIONES ..................................................................................................................................... 59
Recomendaciones ................................................................................................................................. 60
Referencias bibliográficas ..................................................................................................................... 61
Anexos ................................................................................................................................................... 64
Introducción
1
Introducción
En la era de la comunicación y de las tecnologías, la difusión de información y de
ideas no debería tener obstáculos y, por lo tanto, la diversidad de lenguas existentes no
debería constituir una barrera. Sin embargo, ante la ausencia de una lengua común surge la
necesidad de contar con instrumentos que permitan acceder a cualquier tipo de información,
independientemente del idioma en que esté escrita o expresada.
Hoy día, los avances en la Tecnología de la Información y las Comunicaciones (TIC)
se han combinado para fomentar la automatización de la traducción. La relación entre la
tecnología y la traducción se remonta al período de la Guerra Fría, ya que en los años 50 la
competición entre los EEUU y la Unión Soviética era tan intensa a todos los niveles, que
miles de documentos tuvieron que ser traducidos del ruso al inglés y viceversa. Al mismo
tiempo, toda esta gran demanda puso de manifiesto la ineficacia de los procesos de
traducción, sobre todo en áreas especializadas del conocimiento, e hizo que aumentara el
interés por la traducción automática.
La importancia de los sistemas de traducción radica en que pueden contribuir a
eliminar las barreras de comunicación entre personas de diferentes culturas. Aunque en la
actualidad ya se comercializan algunos sistemas de traducción automática, la obtención de un
sistema de calidad y totalmente automático está lejos de haberse conseguido.
Haciendo uso de la computadora como herramienta de desarrollo ha sido posible
construir aplicaciones para el procesamiento del lenguaje natural, tales como: traductores,
diccionarios electrónicos, reconocedores de voz, procesadores de textos especializados,
correctores ortográficos, analizadores sintácticos, bases de datos terminológicos, entre otros.
Planteamiento del problema
El latín, lengua que tuvo su origen en la región del Lacio, Península Itálica, es el
idioma utilizado por los profesionales de la botánica para describir las nuevas unidades o
grupos taxonómicos que van siendo incorporados al corpus que conforma el sistema de su
Introducción
2
ciencia. El documento prescriptivo para la práctica de la nomenclatura botánica es el Código
Internacional de Nomenclatura Botánica (ICBN, por sus siglas en inglés). Aunque en la
actualidad no es obligatorio hacer estas descripciones en latín, muchos investigadores lo
continúan utilizando con el objetivo de mantener un consenso general y casi universal que
permita el global entendimiento acerca de este ámbito que, efectivamente, es patrimonio de
toda la humanidad.
El estudio del latín en Cuba no satisface todas las demandas profesionales de esta
lengua, pues sólo se imparte en el nivel universitario como parte de la carrera Licenciatura en
Filología. Por esta razón se hace muy difícil la capacitación de profesionales en el área de la
Botánica. Ante estos inconvenientes se decidió abrir un curso de postgrado de latín en el
Jardín Botánico Nacional impartido por la Dra. Susana Carreras Gómez, profesora titular del
Departamento de Lingüística y Literatura de la Facultad de Humanidades de la Universidad
Central “Marta Abreu” de Las Villas. El curso pretende dotar a los especialistas de los
conocimientos acerca de la lengua latina que se emplea en la nomenclatura botánica y la
práctica taxonómica. Como herramienta de ayuda en la impartición de este curso se utiliza el
software EsLatín versión 2, desarrollado como parte de un trabajo de diploma por los
estudiantes de Ciencia de la Computación Marvin Ávila Kotliarov y Noeslen Mendoza
Morales en el año 2006.
El trabajo anteriormente mencionado constituye el antecedente principal de la
presente investigación. Realiza traducciones de palabras aisladas y no de frases completas.
Con el objetivo de ampliar la ayuda, se decidió dar continuidad al tema por medio del
presente trabajo de diploma.
Objetivo general
Desarrollar un software que facilite el proceso de traducción de frases del español al
latín, mejorando la capacidad de traducción y las funcionalidades de la aplicación actual en
aras de sentar bases concretas en el proceso de construcción de un definitivo traductor
automático de una taxonomía completa.
Introducción
3
Objetivos específicos
1- Analizar los referentes teóricos y metodológicos que sustentan el estudio.
2- Dominar elementos básicos del latín empleado en la botánica.
3- Determinar el universo lingüístico que se incorporará al traductor.
4- Lograr un correcto análisis morfológico y sintáctico de las palabras para mejorar
el proceso de traducción.
5- Adicionar funcionalidades de modificación a la base de conocimiento.
6- Crear una interfaz visual tan cómoda y eficiente como la de la versión anterior del
software.
Preguntas de investigación
1- ¿Cuál de los métodos de traducción automática es el más adecuado para resolver el
problema?
2- ¿Es Prolog el lenguaje adecuado para representar el conocimiento?
3- ¿Se podrá utilizar la base de conocimiento de la versión actual del EsLatín en la nueva
aplicación?
4- ¿Cómo se tratará la ambigüedad de las palabras según el contexto en que estén
escritas?
Introducción
4
Justificación de la investigación
Entre los principios de Nomenclatura Botánica expresados en El Código de
Nomenclatura Botánica está el de escribir los nombres científicos en latín o latinizados,
aunque sus orígenes se encuentren en otro idioma. En el Jardín Botánico de la Universidad
Central “Marta Abreu” de Las Villas (UCLV), este proceso se realiza con ayuda de la
aplicación EsLatín versión 2 la cual efectúa traducciones palabra a palabra. Pero la práctica
taxonómica va más allá de la traducción de palabras y la creación de sintagmas nominales.
Los especialistas deben expresar las características de las especies, entre las que se
encuentran tamaño, color, forma, etc., y esto se realiza a través de la construcción de
oraciones, lo cual no puede hacerse en una única consulta en el EsLatín.
Sin dudas, un software que permita la traducción de una oración completa del español al latín
ha de constituir un aporte de gran valía para los profesionales de la botánica, que ahorrarían
tiempo, añadirían automatización al proceso y verían reducido el corpus de la lengua latina
que ellos deben incorporar a su conocimiento.
Una vez introducidos los aspectos generales del presente trabajo, se describe cómo se
ha estructurado la tesis en capítulos.
Capítulo I: En este capítulo se trata el tema del Procesamiento del Lenguaje Natural como
una rama de la Inteligencia Artificial para el desarrollo de este tipo de aplicaciones. Se hace
un análisis de los diferentes métodos de traducción automática, con el objetivo de determinar
cuál de ellos es el más adecuado para la investigación. Por último se hace referencia, al uso
de la programación lógica en la solución de problemas relacionados con el lenguaje natural.
Capítulo II: En el segundo capítulo se concentra toda la labor de análisis previo de los
problemas y los métodos a utilizar, el diseño y organización de las clases y la explicación de
la implementación del software EsLatín versión 3.
Capítulo III: El tercer y último capítulo constituye el manual de usuario donde se explican
las principales funcionalidades de la aplicación.
Capítulo 1
5
CAPÍTULO 1: PROCESAMIENTO DEL LENGUAJE NATURAL EN
LA INTELIGENCIA ARTIFICIAL
1.1 Procesamiento del lenguaje natural
Una meta fundamental de la Inteligencia Artificial es la manipulación del lenguaje
natural usando herramientas de computación, que les permitan a las computadoras
comunicarse con un humano en su propio lenguaje (español, inglés, francés, etc.). A esta
tarea se le denomina Procesamiento del Lenguaje Natural (Russell and Norvig 1995). El
mismo se ocupa de la formulación e investigación de mecanismos eficaces
computacionalmente para la comunicación entre personas o entre personas y máquinas.
1.1.1 Introducción
El Procesamiento del Lenguaje Natural (PLN) (Moreno, Palomar et al. 1999) es uno
de los campos relacionados con la Inteligencia Artificial, “que hace uso de un conjunto de
mecanismos que la computadora asimila en un lenguaje de programación definido (formal) y
le permite comunicarse con el ser humano en su propio lenguaje (español, inglés,
etc.)”.(Montero Martínez 2000). En sentido general se ocupa de la formulación e
investigación de mecanismos eficaces computacionalmente para la comunicación entre
personas o entre personas y máquinas por medio de lenguajes naturales. El PLN no trata de la
comunicación por medio de lenguajes naturales de una forma abstracta, sino de diseñar
mecanismos para comunicarse que sean eficaces computacionalmente, que se puedan realizar
por medio de programas que ejecuten o simulen la comunicación. El lenguaje natural es
inherentemente ambiguo a diferentes niveles: a nivel léxico, una misma palabra puede tener
varios significados, y la selección del apropiado se debe deducir a partir del contexto
oracional o conocimiento básico. Muchas investigaciones en el campo del PLN han estudiado
métodos para resolver las ambigüedades léxicas mediante diccionarios, gramáticas, bases de
conocimiento y correlaciones estadísticas. Desde este punto de vista, el conocimiento
humano sería incomprensible para una computadora, teniendo en cuenta que una
computadora puede almacenar un texto en archivos, con lo que poseería la misma
Capítulo 1
6
información que una persona, pero no podría extraer inferencias lógicas de ese texto,
generalizarlo, resumirlo, o responder a preguntas sobre dicho texto, porque no lo entiende,
simplemente lo conoce.
Por ello surgen un conjunto de disciplinas como el procesamiento del texto,
tecnologías del lenguaje, lingüística computacional, etc., entre las que se incluye igualmente
el procesamiento del lenguaje natural, que pretenden proporcionar a las computadoras la
habilidad de entender el texto y no sólo almacenarlo.
La experiencia práctica acumulada en este campo, señala la conveniencia de orientar
el reconocimiento del lenguaje natural más al análisis de frases, oraciones y textos en su
conjunto, que al reconocimiento de palabras aisladas. En otras palabras, dar más prioridad al
reconocimiento del sistema en su conjunto que al reconocimiento de cada una de las partes
que lo conforman.
1.1.2 Historia
Las primeras aplicaciones del procesamiento del lenguaje natural surgieron entre 1940
y 1960, teniendo como interés fundamental la traducción automática de textos entre
diferentes idiomas (Hutchins 2007). Los experimentos en este ámbito se basaban
fundamentalmente en la sustitución automática palabra por palabra, por lo que se obtenían
traducciones muy rudimentarias, que no proporcionaban unos resultados claros.
Surgió por tanto la necesidad de resolver ambigüedades sintácticas y semánticas, así
como la importancia de considerar la información contextual. Los problemas más relevantes
en este tiempo fueron la carencia de un orden de la estructura oracional en algunas lenguas, y
la dificultad para obtener una representación tanto sintáctica como semántica; pero una vez
que se empezaron a tener en cuenta, se dio paso a una concepción más realista del lenguaje en
la que era necesario contemplar las transformaciones que se producen en la estructura de la
frase durante el proceso de traducción.
En los años sesenta los intereses se desplazaron hacia la comprensión del lenguaje. La
mayor parte del trabajo realizado en este período se centró en técnicas de análisis sintáctico.
Hacia los setenta la influencia de los trabajos en inteligencia artificial fue decisiva, y
el interés se centró en la representación del significado. Como resultado se construyó el
Capítulo 1
7
primer sistema de preguntas-respuestas basado en lenguaje natural. En esta misma época
surgió la máquina Eliza (Giannetti 1997, Dávila, Astorga et al. 2007) que reproducía las
habilidades conversacionales de un psicólogo, para lo cual recogía patrones de información
de las respuestas del cliente y elaboraba preguntas que simulaban una entrevista.
Entre los años 70 y 80, ya superados los primeros experimentos, se hicieron intentos
más serios de construir programas más fiables, por lo que aparecieron numerosas gramáticas
orientadas a un tratamiento computacional, y la tendencia hacia la programación lógica
experimentó un notable crecimiento.
En Europa surgieron intereses en la elaboración de programas para la traducción
automática, y se creó el proyecto de investigación Eurotra (Benotti 2004) que tenía como
finalidad la traducción multilingüe. En Japón aparecieron equipos dedicados a la creación de
productos de traducción para su distribución comercial.
Los últimos años se caracterizan por la incorporación de técnicas estadísticas y el
desarrollo de formalismos adecuados para el tratamiento de la información léxica. Se han
introducido nuevas técnicas de representación del conocimiento muy cercanas a la
inteligencia artificial, y las técnicas de procesamiento utilizadas por investigadores
procedentes del área de la lingüística e informática son cada vez más próximas.
1.1.3 Problemática del lenguaje natural
Uno de los principales problemas encontrados al tratar el texto es la ambigüedad. En
el lenguaje humano es posible encontrar múltiples expresiones y palabras que pueden tener
varios significados dependiendo de las circunstancias de uso. En el campo del PLN el
problema de la ambigüedad puede tratarse desde distintas perspectivas. Desde la ambigüedad
debido a palabras polisémicas, hasta la ambigüedad producida por las distintas
interpretaciones que pueda tener una oración. Dentro del PLN, por tanto, se pueden distinguir
tres tipos de ambigüedad (Vázquez Pérez 2009):
Ambigüedad léxica (Kaplan, Doorn et al. 2010)
Ambigüedad sintáctica o ambigüedad estructural (Fernández Reyes 2011)
Ambigüedad semántica.(Gelbukh and Sidorov 2006)
Capítulo 1
8
La primera de ellas se produce cuando una misma palabra puede pertenecer a diferentes
categorías gramaticales. La segunda aparece cuando debido a la forma en que se asocian los
distintos constituyentes de una oración, esta se puede interpretar de varias formas. Por último,
la ambigüedad semántica se refiere a los distintos significados que puede tener una palabra
dependiendo del uso que se le esté dando en cada momento. Para tratar de eliminar la
ambigüedad es preciso dividir el lenguaje en partes, es decir, construir modelos más
pequeños donde cada uno de ellos se encarga de un determinado aspecto de la lengua. Según
(Sosa 1997) el lenguaje natural se estructura normalmente en cuatro niveles de análisis:
morfológico,
sintáctico,
semántico y
pragmático.
Análisis morfológico: Se ocupa de la formación y estructura de las palabras a partir de las
unidades más básicas de significado denominadas morfemas. Su función consiste en detectar
la relación que se establece entre las unidades mínimas que forman una palabra, como puede
ser el reconocimiento de sufijos o prefijos (Pereira and Shieber 2002).
Análisis sintáctico: Este módulo se ocupa de realizar el análisis sintáctico de tal forma que
selecciona la etiqueta gramatical más apropiada para cada palabra (Montero Martínez 2000).
El resultado de este proceso consiste en generar la estructura correspondiente a las categorías
sintácticas formadas por cada una de las unidades léxicas que aparecen en la oración.
Análisis semántico: En este caso se ocupa de asignar el sentido correspondiente a cada
palabra (resolver la ambigüedad semántica). Este módulo puede funcionar en paralelo con el
módulo de análisis sintáctico o posteriormente (Dagerman, Akan et al. 2013). En cualquier
caso, existen diferentes técnicas aplicables para resolver la ambigüedad: lógica de predicados,
redes semánticas, grafos de dependencias conceptuales, etc.
Análisis pragmático: Añade información adicional al análisis del significado de la frase en
función del contexto donde aparece. Da cuenta de la información no lingüística que influye
en el procesamiento e interpretación. En resumen, se ocupa de cómo las oraciones se utilizan
Capítulo 1
9
en diferentes situaciones y cómo el uso puede afectar a su interpretación. Se trata de uno de
los niveles de análisis más complejos (Reyes 1990).
1.2 Traducción automática: métodos, problemas y potencial
1.2.1 ¿Qué es la traducción automática?
Entre las dificultades históricas de la comunicación se puede mencionar la barrera del
lenguaje. Es por ello que la traducción ha cobrado gran interés aún antes del
nacimiento de la informática. Los avances tecnológicos han propiciado el desarrollo de
herramientas para la automatización de este proceso.
La traducción automática (en adelante: TA) es sin duda un desafío científico. Sin
embargo la razón por la cual despierta tanto interés no es de índole científica, sino
por una necesidad netamente práctica.
No existe en la bibliografía una definición formal de lo que significa TA. Según
(Hernández Mercedes 2002), en sentido estricto es “el proceso por el cual una máquina
traduce un texto de una lengua a otra, subdividiendo la sintaxis, identificando las partes del
discurso, intentando resolver eventuales ambigüedades y, por último, traduciendo los
componentes y la estructura en la lengua de destino”.
El propósito de este trabajo está en capturar el potencial de las técnicas y paradigmas
actualmente desarrollados en el área de la TA, para poder utilizar la mejor variante que
permita resolver el problema en cuestión.
1.2.2 Métodos de traducción automática
Enfoques basados en normas
Las estrategias basadas en normas, de acuerdo con (Hutchins 2007), se pueden dividir
en tres enfoques tradicionales, a saber: el sistema de traducción directa, el sistema interlingua
y el sistema de transferencia.
Capítulo 1
10
Sistema de traducción directa
El sistema de traducción directa es el enfoque más sencillo (Craciunescu and Gerding-
Salas 2007). Está diseñado para un par de lenguas determinado. Se traduce directamente de la
lengua fuente (LF) a la lengua meta (LM), su supuesto básico es que el vocabulario y la
sintaxis de los textos de la lengua fuente no necesitan ser analizados, sólo lo estrictamente
necesario para la resolución de ambigüedades. Normalmente, estos sistemas consisten en un
único diccionario bilingüe y un programa único para analizar el texto fuente.
Sistema interlingua
El segundo sistema básico es el sistema interlingua, que asume que es posible
convertir un texto de LF en representaciones sintácticas y semánticas comunes para más de
una lengua (Zapata and Benítez 2009). El texto en la LF se transforma en un lenguaje
intermedio mediante el componente “Análisis” (véase Figura 1.1). El texto en la LM se
obtiene a partir de la representación del texto en el lenguaje intermedio, mediante el
componente “Generación”. La estructura del lenguaje intermedio, llamado “interlingua”, es
independiente de la lengua fuente y de la lengua meta y está basada en una lengua artificial,
como por ejemplo el esperanto. Un argumento a su favor es el efecto de economía: con un
solo sistema se puede traducir a varias lenguas, aunque por otro lado, la construcción de tal
interlingua es un trabajo muy complejo.
Sistema de transferencia
Este sistema establece una representación intermedia entre las lenguas origen y meta,
alrededor de la cual se organiza el análisis y la síntesis. La transferencia separa el proceso de
traducción en tres fases: análisis, transferencia y síntesis y, a su vez, se puede producir en
varios niveles: léxico, sintáctico y semántico (Amores Carredano 2002).
Capítulo 1
11
Figura 1.1 El diagrama de la pirámide (Hutchins and Somers 1992)
Una manera sencilla para poder entender las relaciones entre los tres sistemas, es
reconocer que el sistema de interlingua elimina el componente “transferencia”, y que la
traducción directa traduce sin el componente “análisis” y “generación” (la traducción sólo
existe a partir del componente “transferencia”).
Enfoques basados en corpus
Los enfoques basados en corpus, también llamados “enfoques empíricos”, se pueden
distinguir en dos sistemas, a saber, la TA basada en ejemplos (Diéguez M. 1998) y la TA
estadística (Somers 2003).
Traducción automática basada en ejemplos
La idea básica de la traducción automática basada en ejemplos es reutilizar muestras
reales con sus respectivas traducciones como base de una nueva traducción (Muñoz and
Ramírez 2010). Se caracteriza por encontrar traducciones correspondientes a una base de
datos de traducciones reales. El proceso consiste en tres etapas: encontrar correspondencias,
alinear y recombinar. En la primera etapa el sistema encontrará, mediante correspondencias
con la entrada, muestras de traducciones que pueden contribuir a la traducción. La segunda
etapa, la alineación, consiste en identificar las partes útiles de la traducción correspondiente.
El tercer paso, llamado “recombinación”, recombina las partes correspondientes. Cuando se
sabe qué partes de los ejemplos se reutilizan, es preciso intentar que las partes correspondan
de manera legítima.
Capítulo 1
12
Traducción automática estadística
En su forma auténtica, la traducción automática estadística no usa datos lingüísticos
tradicionales. La esencia de este método es alinear frases, grupos de palabras y palabras
individuales de textos paralelos y calcular las probabilidades de que una palabra en una frase
de una lengua se corresponda con una palabra en una frase de una traducción con la que está
alineada. Dado que la TA estadística genera sus traducciones a partir de métodos estadísticos
basados en corpus de textos bilingües, la disponibilidad de un corpus grande de traducciones
fiables es una característica esencial de este sistema. Se suele ver este método como “anti-
lingüístico”. La idea de este sistema es modelar el proceso de traducción en términos de
probabilidades estadísticas. Para mayor información sobre este método puede consultar
(Tomás Gironés 2003).
1.2.3 Problemas de la traducción automática
Actualmente, la traducción automática perfecta sin la ayuda del ser humano no existe.
A pesar de ello, una tasa de precisión básica de más del 90% no es rara en los programas
modernos. Lo que sigue siendo más problemático son los momentos de ambigüedad y
complejidad que todos los idiomas poseen, donde tanto los análisis basados en las normas
como los basados en el análisis estadístico de frases se estrellan con ambigüedades básicas
como una referencia singular, una peculiaridad lingüística, algo que no tiene equivalencia
lingüística directa, etc. (Ledo Mezquita 2006). Una razón que explica la dificultad que tienen
los ordenadores con la traducción es simplemente el hecho de que traducir en sí es difícil,
incluso para los traductores humanos.
Un traductor se dedica a producir un texto “equivalente” en una lengua meta, que
tenga que servir autónomamente, siendo fiel al texto fuente y comprensible en la lengua meta.
El término “equivalencia” es difícil de precisar. Hay que tener en cuenta que las lenguas
difieren, y, por consiguiente, que una lengua meta no siempre permite expresar el mismo
contenido que una lengua fuente. Crear un texto equivalente en la lengua meta no es un
trabajo sencillo. El traductor no sólo debe “inventar” traducciones para los nuevos términos
que aparecen en el texto fuente, sino que también debe actuar como intermediario entre dos
culturas. Queda claro que incluso para los traductores humanos el trabajo de traducir es muy
Capítulo 1
13
difícil y requiere mucha creatividad. Encontrar una nueva terminología, un neologismo, es
más bien una cuestión de inventar una regla que seguir una regla. La mediación intercultural
es un trabajo muy complejo: el traductor no sólo tiene que ser capaz de extraer el sentido de
un texto, sino también tiene que ser capaz de prever el sentido que extraiga el lector potencial
del texto meta.
1.2.4 Futuro de la traducción automática
Si bien es cierto que la traducción perfecta no existe, hay que dejar constancia de que
el sueño de conseguir mecanizar la traducción se ha realizado. La existencia de numerosos
programas de ordenador capaces de traducir una gran variedad de textos de un idioma a otro
es ya un hecho y no una quimera (Gutiérrez and Figueroa 2011). Sin embargo, la realidad
nunca es perfecta. De hecho no existen máquinas de traducir que sean capaces de analizar
textos en cualquier idioma y producir una traducción perfecta a cualquier otro idioma sin
intervención humana. Esta es una aspiración para el futuro y sólo en ese futuro se podrá saber
si esto es realizable.
Se sigue investigando para poder crear sistemas rentables desde el punto de vista
lingüístico y comercial. Algunos sistemas resultan muy útiles cuando se trata de parafrasear
un texto para que lo entienda, por ejemplo, una determinada comunidad. Es decir, si se trata
de un lenguaje botánico, es posible que a un especialista de esta área le resulte muy útil un
sistema de TA que esté disponible en el mercado, pues no necesita una traducción de alta
calidad. El camino que se está siguiendo va orientado a la creación de sistemas de TA
basados en sublenguajes, como pueden ser el médico, el jurídico, el científico, etc. para poder
limitar el vocabulario y la sintaxis de estos textos y hacer más fácil su traducción.
1.3 La programación lógica y el lenguaje natural
Un paradigma de programación representa un enfoque particular o filosofía para la
construcción del software. No es mejor uno que otro, sino que cada uno tiene ventajas y
desventajas. También hay situaciones donde un paradigma resulta más apropiado que otro.
Para el caso del tratamiento del lenguaje natural el paradigma más apropiado es el lógico
Capítulo 1
14
(Warren 1983, Bratko 1986). Este paradigma, que resultó una apasionante novedad en la
década del 70, tiene como característica diferenciadora el hecho de manejarse de manera
declarativa y con la aplicación de las reglas de la lógica. Esto significa que en lugar de
basarse, como en el caso de los paradigmas procedurales, en el planteo del algoritmo para la
resolución del problema, se basa en expresar todas las condiciones del problema y luego
buscar un objetivo dentro de las declaraciones realizadas.
Esta forma novedosa de tratamiento de la información llevó a pensar en un
determinado momento en la revolución que significaría la existencia de “programas
inteligentes” que pudieran responder, no por tener en la base de datos determinados
conocimientos, sino por poder inferirlos a través de la deducción.
Actualmente es utilizado en aplicaciones que tienen que ver con la Inteligencia
Artificial, particularmente en dos campos:
Sistemas Expertos (Lezcano 2005, Riley and Giarratano 2012) y
Procesamiento de Lenguaje Natural (Rowe 1988).
En el caso del procesamiento del lenguaje natural se trata de dividir el lenguaje en
partes y relaciones y tratar de comprender su significado. Para plantear los problemas en
términos del paradigma lógico, es necesario en primer lugar poder plantearlos en términos de
reglas lógicas.
La resolución es una regla de inferencia que permite a la computadora decir qué
proposiciones siguen lógicamente a otras proposiciones. El software que utiliza el principio
de resolución trabaja con cláusulas lógicas. Utiliza la búsqueda a ciegas “primero en
profundidad” para intentar identificar las partes derecha e izquierda de las cláusulas de una
forma lógica, investigando los términos que unifican para permitir una identificación
correcta.
1.3.1 Las gramáticas en Prolog
Muchas de las investigaciones hechas hasta la fecha en la construcción eficiente de
sistemas de procesamiento del lenguaje natural, han concluido que las inferencias constituyen
Capítulo 1
15
un mecanismo poderoso mediante el cual el lenguaje puede ser analizado sintácticamente y
generado. La lógica de cláusulas definidas, el subconjunto de la lógica en el cual está basado
Prolog, ha mostrado un amplio uso para construir analizadores sintácticos y generadores.
Un lenguaje puede verse como un conjunto (normalmente infinito) de frases de
longitud finita. Cada frase está compuesta de símbolos de algún alfabeto, según una
combinación determinada para formar frases correctas. Para especificar cómo construir frases
correctas en cualquier lenguaje se utilizan como formalismo las gramáticas, que constituyen
un conjunto de reglas que definen la estructura legal en un lenguaje.
Las reglas de una gramática definen qué cadenas de palabras o símbolos son oraciones
válidas de la lengua. Además, la gramática generalmente brinda algún tipo de análisis de la
oración, en una estructura que hace su significado más explícito.
1.3.2 Gramáticas Libres del Contexto
Una clase fundamental de la gramática es la Gramática Libre de Contexto (GLC).
Según (Pereira and Shieber 2002), “constituyen un sistema para definir las expresiones de un
idioma en términos de reglas, que son las ecuaciones recursivas sobre tipos de expresiones,
llamadas no terminales, y expresiones primitivas, llamadas terminales.”
En las GLC, las palabras o símbolos básicos de la lengua se identifican por símbolos
terminales, mientras que las categorías o frases de la lengua se identifican por símbolos no
terminales (Wu 2011). Cada regla expresa una forma posible para un no terminal, como una
secuencia de terminales y no terminales. El análisis de una cadena de acuerdo con una GLC
es un árbol de análisis, que muestra las frases constituyentes de la cadena y sus relaciones
jerárquicas.
El siguiente ejemplo se expone en (Monferrer, Pacheco et al. 2001) y muestra de
forma sencilla el empleo de una GLC.
<oracion> <sintagma_nominal> <sintagma_verbal>
<sintagma_nominal> <determinante> <nombre>
<sintagma_verbal> <verbo> <sintagma_nominal>
Capítulo 1
16
<sintagma_verbal> <verbo>
<determinante> el
<determinante> la
<nombre> hombre
<nombre> manzana
<verbo> come
Los no terminales se escriben entre paréntesis angulados (esta notación para describir
gramáticas se denomina BNF —Backus-Naur Form—). La derivación de una frase a partir
del no terminal inicial de la gramática (que en el ejemplo anterior puede ser <oracion>) puede
describirse mediante el siguiente árbol de derivación:
A partir de esta gramática es sencillo construir un analizador en Prolog (Bratko 1986):
oración (Z):- conc (X, Y, Z), sintagma_nominal (X), sintagma_verbal (Y).
sintagma_nominal (Z):- conc (X, Y, Z), determinante (X), nombre (Y).
sintagma_verbal (Z):- conc (X, Y, Z), verbo (X), sintagma_nominal (Y).
sintagma_verbal (X):- verbo (X).
determinante ([el]).
determinante ([la]).
nombre ([hombre]).
Capítulo 1
17
nombre ([manzana]).
verbo ([come]).
Una de las deficiencias de las GLC es que no se pueden utilizar para describir la
concordancia de número, entre el nombre y el verbo o el artículo y el nombre, ya que ignoran
la interdependencia estructural de los constituyentes de la sentencia. Para superar estas
deficiencias, se extienden las gramáticas libres de contexto a las gramáticas de cláusulas
definidas.
1.3.3 Gramáticas de Cláusulas Definidas
Las gramáticas de cláusulas definidas (GCD) (Gurney, Claffy et al. 1989, Sterling
1994) son una clase particular de las gramáticas, usada para la construcción de sistemas del
lenguaje natural; hacen un uso eficiente del poder del Prolog como un lenguaje de
programación de propósito general. Son usadas de maneras específicas: ellas sirven como una
descripción del lenguaje y como una descripción del proceso para analizar dicho lenguaje.
Para entender completamente un lenguaje ya sea lenguaje natural o un lenguaje de
programación se tiene que comprender su gramática. La estructura de un lenguaje contiene
una secuencia de palabras ordenadas de acuerdo con reglas específicas. Estas reglas tienen en
cuenta modo, género, número y la estructura de la oración. Estas reglas son también aplicadas
a las descripciones y calificación de palabras y frases.
Las GCD son una extensión de las GLC donde se permite a los no terminales contener
argumentos que representen la interdependencia de los componentes de una frase (Monferrer,
Pacheco et al. 2001). Por ejemplo, se pueden añadir a los terminales del ejemplo anterior los
argumentos “singular” o “plural” para asegurar la concordancia de número (los no terminales
también tendrían un argumento más para definir una frase en singular o plural, etc.).
determinante ( singular, [el | S], S).
determinante (plural, [los | S], S).
Capítulo 1
18
Basado en el trabajo de (Gelbukh 2010) y (Villayandre Llamazares 2010), un
formalismo conocido como las GCD expresan las reglas libres del contexto como
declaraciones lógicas. Las GCD son más poderosas que las GLC. El problema de analizar
sintácticamente una cadena de un lenguaje se convierte en el problema de probar que un
teorema sigue los axiomas de cláusulas definidas del lenguaje.
Una oración en GCD se define por el sintagma nominal y el sintagma verbal. Un
ejemplo es el siguiente:
oración --> sintagma_nominal, sintagma_verbal.
Para leer una regla en una GCD se lee el símbolo “-->”, que significa puede tomar la
forma y el símbolo “,”, que significa seguido por. El ejemplo anterior se puede leer como:
una oración puede tomar la forma de un sintagma nominal seguido por un sintagma verbal.
Esta regla anterior es equivalente a la siguiente cláusula en Prolog:
oracion (S0, S):-
sintagma_nominal (S0, S1), sintagma_verbal (S1, S).
Dicha cláusula se puede leer como: una oración extiende de S0 a S si existe un
sintagma nominal de S0 a S1 y un sintagma verbal de S1 a S.
Una GCD para una gramática que acepte la oración “el músico toca el violín” es de la
siguiente forma:
oracion --> sintagma_nominal, sintagma_verbal.
sintagma_nominal --> determinante, nombre.
sintagma_verbal --> verbo, sintagma_nominal.
determinante --> [el].
nombre --> [músico].
nombre --> [violín].
verbo --> [toca].
Capítulo 1
19
GCD y los Analizadores Sintácticos del Lenguaje Natural
Muchos lenguajes de programación no están bien capacitados para transformar
gramáticas en analizadores sintácticos del lenguaje natural ni generadores. Prolog, sin
embargo, es un lenguaje particularmente conveniente para hacer esto.
Los programas escritos en notación GCD son transformados a Prolog usando el
predicado expand_term (T1, T2). Este predicado funciona de la siguiente forma: si T1 es un
término de Prolog retorna el término inalterado en el valor para T2. Si T1 es un término en
GCD, Prolog retorna el término equivalente de Prolog en T2. Esta transformación es hecha
automáticamente al mismo tiempo que las reglas son leídas, pero el procedimiento puede ser
útil también cuando se usa para propósitos específicos, como parte de los predicados consult
y reconsult. También es usado por el intérprete en el nivel superior. En el momento en que el
programa escrito en notación GCD es compilado o consultado es que se realiza la
transformación descrita anteriormente. Prolog traduce cada regla escrita en GCD en una
cláusula que pueda ser comprendida por su intérprete. El operador “-->” es transformado a “:-
“. Luego se traducen los no terminales en predicados con dos argumentos adicionales. El
primer argumento añadido es la lista de palabras que se pasaron dentro del símbolo no
terminal (se refiere a los token de entrada). El argumento final es la lista remanente cuando
está terminado (se refiere a los token de salida). Las secuencia de token son listas, un token
vacío es equivalente a una lista vacía, la lista vacía es escrita como “[ ]”.
El equivalente en Prolog a una GCD que acepte la oración “el músico toca el violín”
es de la siguiente forma:
oracion (S0, S) :- sintagma_nominal (S0, S1), sintagma_verbal (S1, S).
sintagma_nominal (S0, S) :- determinante (S0, S1), nombre (S1, S).
sintagma_verbal(S0,S) :- verbo (S0,S1), sintagma_nominal (S1, S).
sintagma_verbal (S0, S) :- verbo (S0, S).
determinante ([el|S], S).
nombre ([músico|S], S).
nombre ([violín|S], S).
verbo ([toca|S], S).
Capítulo 1
20
Sintaxis de las GCD
La sintaxis de las GCD es similar a la sintaxis en Prolog. A continuación se muestran
algunas reglas para el uso de dichas gramáticas (Corporation 1986).
- Los símbolos no terminales son escritos como cualquier átomo o estructura en Prolog
que no sea una lista.
- Los terminales son escritos como cualquier término en Prolog. Para distinguir los
terminales de los no terminales, una secuencia de terminales es escrita como una lista
en Prolog; una secuencia vacía es escrita como la lista vacía. Las secuencias de
terminales que son listas de caracteres se ponen entre comillas.
- La parte izquierda de la regla contiene solamente los no terminales, opcionalmente
seguidos por una secuencia de terminales escritos como una lista.
- La parte derecha de una regla puede contener terminales y no terminales.
- Las alternativas pueden ser tratadas explícitamente en la parte derecha de la regla,
usando el operador “;” o la barra vertical.
- El símbolo de corte puede ser incluido en la parte derecha de la regla y no es
necesario encerrarlo entre paréntesis.
Cómo llamar a una GCD
Una vez que se tiene la GCD se puede llamar en Prolog con el predicado que
representa el símbolo distinguido de la misma. Por ejemplo se puede llamar el predicado
oracion de la siguiente forma:
oracion ([‘el’, ‘músico’, ‘toca’, ‘el’, ‘violín’], L).
Si la variable L instancia con la lista vacía “[ ]”, quiere decir que la gramática
reconoce la oración. De lo contrario la oración no fue reconocida por la gramática.
Cuando se escribe una gramática utilizando GCD es necesario recordar que sigue
siendo Prolog y por tanto la resolución de la gramática se realizará mediante búsqueda
primero en profundidad y backtracking. Hay que tener por tanto especial cuidado de no
introducir recursividad infinita. Por otro lado, al utilizar backtracking la resolución puede
Capítulo 1
21
llegar a ser muy ineficiente, por eso es bastante recomendable el uso del corte (con
precaución).
1.4 Descripción de plantas mediante el Latín Botánico
El latín es una lengua indoeuropea de la rama itálica que fue hablada en la antigua
República Romana y el Imperio Romano desde el siglo IX A.C. Su nombre deriva de la
existencia de una zona geográfica de la península itálica denominada "Vetus Latium" o
'antiguo llano' (hoy llamado Lacio). Ganó gran importancia con la expansión del estado
romano, siendo lengua oficial del imperio en gran parte de Europa y África septentrional,
junto con el griego. Hoy día, el latín sigue siendo utilizado como lengua litúrgica oficial de la
Iglesia Católica de rito latino. Es la lengua oficial de la Santa Sede. Por otra parte, la
nomenclatura de especies y grupos de la clasificación biológica sigue haciéndose con
términos en latín o latinizados.
1.4.1 Características del texto latino empleado en la descripción de las
especies botánicas
La sintaxis del texto latino empleado en la descripción de las especies botánicas no
responde en sentido general a la sintaxis del latín clásico. Visto de manera integral, el texto
del latín botánico, sistema lingüístico que es considerado por algunos como una lengua
particular, comporta características singulares, que apuntan principalmente al rasgo de la
síntesis.
Existen dos tipos de texto que responden a los objetivos de dos tipos de descripción:
el texto de la descripción no comparativa, que se propone exponer una especie en su
integralidad fenoménica, es decir, en toda su apariencia, y que hace alusión a las
características de todos sus órganos y partes visibles, y el texto de la descripción comparativa,
que tiene como objetivo dar a conocer las características de una especie a partir de los rasgos
que la distinguen o que la acercan a otras especies.
Capítulo 1
22
Según (Carreras 2009) “Existen dos tipos principales de descripción: la descripción
positiva y la descripción comparativa. La primera es la inicial, la del holotipo o modelo
primario y paradigmático, el cual se conserva en el herbario, y describe todos los aspectos de
la especie; la segunda, como su nombre lo indica, es comparativa, y se utiliza para separar el
nombre de dos especies, subespecies, variedades que se pensaba hasta ese momento que
formaban parte de una misma categoría taxonómica”
En la simplificación del texto no comparativo se destaca la presencia de un tipo único
de oración: la oración atributiva, es decir, aquella que emplea los verbos ser o estar con valor
copulativo, donde además dichos verbos se omiten por quedar sobreentendidos. El texto de
carácter comparativo es más complejo que el anterior: en primer lugar, ofrece una mayor
libertad para el empleo de oraciones tanto atributivas como predicativas (aquellas que no
emplean los verbos ser o estar como copulativos), pero, aunque la gama de oraciones es
mayor, las mismas acaban repitiéndose y empleando los mismos verbos, adverbios y
complementos, con igual significado.
En cuanto a los elementos que componen estas estructuras, entre los que se destacan
por su frecuencia de uso los adjetivos y los adverbios, se puede apreciar una práctica
sostenida de composición y derivación sí presentes, pero no tan usuales en el latín clásico, lo
cual reduce la complejidad estructural de la sintaxis textual.
Tratándose de un sistema lingüístico para la comunicación científica dentro de una
lengua específica, está claro el hecho de que el referente del texto está acotado por aspectos
de la propia ciencia, de manera que los sujetos de las oraciones, que en este caso son los
elementos descritos, se repiten en cada texto. Asimismo se reiteran en los adjetivos las
características de las partes descritas, o sea, de los sujetos de las oraciones, que son por
decreto aspectos determinantes en el discernimiento de los diferentes grupos taxonómicos.
Las condiciones en que se presenta una especie: lugar, época del año, nivel de
desarrollo de la planta, están expresados tanto por adverbios como por sintagmas nominales,
que conforman el sistema de los complementos en las oraciones, y que asimismo suelen
repetirse.
Sobre la base de la consideración de Carreras, el presente trabajo se ocupa solamente
de la oración que estructura el texto no comparativo, o sea, de la oración atributiva latina
Capítulo 1
23
empleada en las descripciones botánicas: “En lo que respecta a la lógica del proceso
descriptivo, hay que aprender en primer lugar a desarrollar descripciones positivas, para crear
el referente de la comparación. […]. En lo que respecta al conocimiento de la lengua latina
que ha de permitir la práctica de la descripción comparativa, hay que partir del aprendizaje de
aquella que se emplea en la descripción positiva, más simple y esquemática, aunque todavía
notablemente compleja para los botánicos”.
1.4.2 El texto no comparativo en la descripción de las especies botánicas.
El texto no comparativo en la descripción de las especies botánicas ocupa un solo
párrafo para cada especie. Está compuesto por oraciones atributivas que omiten el verbo ser o
estar. Dentro del párrafo se encuentran segmentos gramaticales separados por coma, punto y
coma y punto y seguido, de acuerdo con la jerarquía del núcleo de cada segmento.
El texto está encabezado por el nombre de la especie y algunos datos de ayuda a la
labor del taxónomo. Generalmente la primera oración está compuesta por un sintagma
nominal que informa acerca del porte de la planta (árbol, arbusto, hierba, enredadera); dicho
sintagma es el núcleo del predicado nominal de una oración atributiva que omite el verbo
copulativo y cuyo sujeto está referido en el nombre de la especie.
Ejemplo:
Marila biflora URB. (spec. nov.). Arbor parva v. mediocris.
(Se expresa que la Marila biflora es una especie nueva, descrita por el conocido botánico
Ignatius Urban y que es un árbol pequeño o mediano).
Las oraciones restantes responden a una estructura que en teoría presenta seis elementos:
1. Sintagma nominal sujeto de la oración
2. Adjetivo núcleo del predicado nominal (NPN)
3. Adverbio o frase adverbial que modifica al adjetivo NPN
4. Sintagma nominal con preposición que modifica al NPN
Capítulo 1
24
5. Sintagma nominal sin preposición que modifica al NPN
6. Oración que modifica al núcleo del sujeto y que repite la estructura de los seis
elementos
El sujeto (elemento 1) de esta sexta oración, que es subordinada, puede estar
acompañado por los cinco elementos restantes, y teóricamente estas estructuras subsistémicas
pueden repetirse infinitamente, aunque generalmente no pasan de un segundo nivel; es decir,
que en un sistema estructural completo no suele aparecer más de una oración 6 subordinada a
otra oración 6.
Los sujetos principales (elemento 1) de las oraciones que componen el texto suelen
ser: ramas, hojas, flores, sépalos, pétalos, estambres, ovario, inflorescencias, frutos, semillas,
entre otros menos frecuentes. Como ya se ha dicho, las características que pueden presentar
estos sujetos están bien definidas dentro de la ciencia botánica, y se representan en las
oraciones atributivas a través de los adjetivos (elemento 2). Las condiciones en que se
presentan estas características expresadas en los adjetivos se expresan mediante los adverbios
(elemento 3), los sintagmas nominales con preposición (elemento 4) y los sintagmas
nominales sin preposición (elemento 5). Los elementos 4 y 5 en latín, suelen traducirse al
español por un sintagma nominal con preposición, lo que en esta lengua española los
convertiría a casi todos en un elemento 4.
Los denominados “elementos 5” son muy usuales, pero presentan muy poca variedad:
en 1111 descripciones revisadas, en las que casi siempre aparecen, no pasan de veinte
elementos diferentes.
En cada oración solamente puede aparecer un sujeto (elemento 1), pero el resto de los
elementos puede repetirse, pues de un mismo ente pueden expresarse varias características
(elemento 2), en condiciones diversas (elementos 3, 4 y 5).
La oración subordinada (elemento 6) aparece solamente cuando no es suficiente un
adjetivo para expresar determinada característica del sujeto; entonces es preciso crear una
estructura más compleja, pero que siempre coincide con la estructura de la oración
subordinante.
Ejemplos de oraciones atributivas en la descripción no comparativa:
Capítulo 1
25
Rami (1), elongati (2), graciles (2), hirsuti (2).
Ramas (1) alargadas (2), gráciles (2), hirsutas (2).
Rami (1) teretes (2), non (3) v. vix (3) striati (2), glabri (2), internodiis 2,5-4 cm longis (6).
Ramas (1) rollizas (2), no (3) o apenas (3) estriadas (2), lampiñas (2), que tienen entrenudos
de 2,5 a 4 cm de largo (6).
Rami (1) pallide (3) grisei (2).
Ramas (1) pálidamente (3) grisáceas (2).
Folia (1) inferne (3) sensim (3) in petiolum (4) angustata (2).
Hojas (1) por debajo (3) notablemente (3) estrechadas (2) hacia el peciolo (4).
Folia (1) alterna (2), basi (5 que pasa a 4 en español) parum (3) v. vix (3) in petiolum (4)
protracta (2), apice (5 que pasa a 4 en español) acuminata (2), nervo medio supra impresso,
subtus crasse prominente (6).
Hojas (1) alternas (2), en la base (4) poco (3) o apenas (3) protractas (2) hacia el peciolo (4),
acuminadas (2) en el ápice (4), que tienen el nervio medio impreso por encima y gruesamente
prominente por debajo (6).
Como puede apreciarse, la oración en español sigue la estructura del texto en latín,
salvo algunos cambios de posición dentro de cada sintagma, los cuales también son
previsibles, ya que se repiten sistemáticamente.
1.5 Conclusiones parciales
En este capítulo se abordaron temas del procesamiento del lenguaje natural, así como
el uso de la programación lógica y en especial de las gramáticas en Prolog en la solución de
problemas que involucren el lenguaje natural. También se hace un breve análisis de los
métodos de traducción automática para determinar cuál de ellos sería el más conveniente para
dar solución a este trabajo. Por último, se mencionan las características del texto latino
empleado en la descripción de las especies botánicas, para brindar al lector una rápida
familiarización con el tema.
Capítulo 2
26
CAPÍTULO II: IMPLEMENTACIÓN DE ESLATÍN 3, TRADUCTOR
DE ESPAÑOL A LATÍN PARA LA DESCRIPCIÓN DE LAS ESPECIES
BOTÁNICAS
2.1 Introducción
El traductor de español a latín EsLatín 3, como ya fue indicado en el capítulo I de esta
tesis tiene su versión 2 (Ávila Kotliarov and Mendoza Morales 2006) . Este nuevo software
ha retomado las ideas de ese trabajo anterior, además permite realizar traducciones referentes
a la descripción de plantas del idioma español al latín. También permite realizar
actualizaciones al diccionario que sirve como herramienta a la aplicación. La interfaz visual
se mantiene similar a la de la versión anterior para permitirle al usuario una rápida
familiarización con la herramienta.
En este capítulo se explica cuáles han sido las herramientas computacionales
utilizadas en la implementación del software, así como los diagramas correspondientes al
diseño del mismo.
2.2 Modelación del sistema
Los sistemas o aplicaciones toman forma cuando una o varias personas tienen la visión
de cómo la tecnología pueden mejorarlos. Los desarrolladores deben entender la idea
mientras crean el sistema, para ello debe existir un enlace entre quien tiene la idea y el
desarrollador.
El UML (Lenguaje Unificado de Modelado) es una herramienta que cumple con esta
función, se basa en símbolos y diagramas que permiten a los creadores generar diseños que
capturen la idea de un sistema para comunicárselo de una forma fácil de comprender a quien
realice el proceso de desarrollo.
Existen diversas herramientas que permiten la realización de diagramas UML y la
integración de los mismos en un modelo de diseño. Los más notables son Select Enterprise,
Rational Rose y Visual Paradigm que es el utilizado a lo largo del presente proyecto.
Capítulo 2
27
2.2.1 Diagrama de Casos de Uso
Un caso de uso es una descripción de las acciones de un sistema desde el punto de
vista de un usuario. Se representa la interacción con el sistema a desarrollar donde se
muestran los requisitos funcionales. Cada caso de uso, que representa el sistema, es una
colección de situaciones y cada una de estas una secuencia de pasos. A las entidades que
inician las secuencias se les conoce como actores.
En el problema que se aborda se han definido dos actores, cada uno con sus
respectivos casos de uso. El primero de ellos es el usuario encargado de interactuar con el
sistema y realizar cualquier traducción, así como de utilizar el visor de imágenes. El segundo
de ellos es el experto en el lenguaje latín, quien se encarga de actualizar el diccionario. Los
casos de uso son los siguientes:
Realizar traducción: Caso de uso que corresponde a las acciones de efectuar la
traducción y comprobar los resultados de la solución.
Visualizar imágenes: Utilizar el gestor de imágenes.
Actualizar diccionario: Caso de uso que incluye adicionar, eliminar o modificar
palabras del diccionario por parte del experto.
Figura 2.1 Diagrama de Casos de Uso
Capítulo 2
28
2.2.2 Diagrama de Actividades
Los diagramas de actividades describen cómo se desarrolla un flujo de actividades
entre elementos del sistema o del dominio.
Figura 2.2 Diagrama de Actividades
2.2.3 Diagrama de Clases
Figura 2.3 Diagrama de Clases
Capítulo 2
29
Visual: Es la clase principal del sistema. Se encarga mayormente de la administración de los
componentes gráficos del sistema.
Los principales métodos implementados para efectuar esta labor son los siguientes:
mostrar Diccionario( ){…}
Este método es el encargado de mostrar el diccionario donde se encuentran todas las palabras
con su significado.
mostrarImagen(File file){…}
Se encarga de mostrar el visor de imágenes que brinda utilidad para reconocer rasgos propios
de las plantas, y además sirve para orientar mejor cualquier tipo de búsqueda.
abrirFichero( ){…}
Es el encargado de abrir un fichero previamente confeccionado por el usuario con el texto a
traducir.
salvarFichero( ){…}
Se encarga de guardar un fichero con el texto a traducir y el resultado de la traducción.
Esta clase también controla las acciones de cada botón de la aplicación.
Encriptación: Esta clase es la encargada de la seguridad del sistema. Es necesario proteger
el diccionario de una incorrecta manipulación por parte de los usuarios en tiempo de
ejecución del programa. Con este fin se incluye en el sistema la posibilidad de establecer una
protección mediante el uso de una contraseña. Para acceder a la ventana de modificaciones
del diccionario es necesario introducir la contraseña correcta. La contraseña se protege
mediante un algoritmo criptográfico y luego se almacena en un fichero. Los métodos de la
clase son los siguientes:
encriptarMD5(String palabra){…}
Este método se encarga de encriptar la contraseña utilizando el algoritmo MD5 que es uno de
los más seguros y conocidos.
verificarPassword(String palabra){…}
Capítulo 2
30
Se encarga de verificar si está escrita correctamente la contraseña para permitir el acceso a las
modificaciones del diccionario.
mod_Password(String newPassword){…}
Permite la modificación de la contraseña en caso de que el usuario así lo desee; esta nueva
contraseña también es encriptada.
Diccionario: Esta clase es la encargada del trabajo con el diccionario. Permite adicionar,
eliminar y modificar las palabras y los significados que contiene. Los métodos que la
conforman son los siguientes:
insertarDicc(String pal, String sig){…}
Este método se encarga de insertar una palabra nueva en el diccionario.
eliminarDicc(String cadena){…}
Este método se encarga de eliminar una palabra existente en el diccionario.
modificarDicc(String pal, String sig, String pal_vieja){…}
Este método se encarga de modificar una palabra existente en el diccionario.
pal_vieja: palabra que se quiere modificar y por la cual se realizará la búsqueda en el método.
pal: palabra modificada lista para insertar en el diccionario.
sig: contiene el significado modificado listo para insertar al diccionario.
Gramática: Esta clase es la encargada del trabajo con la gramática. Permite adicionar,
eliminar y modificar las palabras que contiene. Los métodos que la conforman son los
siguientes:
insertarGram(String pal, String id, String id1, String gen, String num){…}
Este método permite insertar una nueva palabra a la gramática.
pal: contiene la palabra a insertar.
id: es el identificador que dice si la palabra a añadir es un sustantivo, adjetivo o un adverbio.
Capítulo 2
31
id1: es el identificador que permite añadir una palabra nueva en el lugar correcto de la
gramática.
gen y num: indican el género y número de la palabra a añadir.
eliminarGram(String cadena){…}
Este método permite eliminar una palabra de la gramática.
modificarGram(String pal, String pal_vieja){…}
Este método permite modificar una palabra existente en la gramática.
pal_vieja: palabra a modificar.
pal: palabra nueva.
compilarGram( ){…}
Este método se encarga de compilar la gramática. Es muy útil cuando se le realizan cambios a
la gramática.
Prolog: Es la clase que maneja los predicados construidos en el lenguaje Prolog. Los
principales métodos de esta clase son:
principal(String cadena){…}
Este método es el que se encarga de realizar el análisis sintáctico de cada oración. Además
elimina de la oración en español las palabras que son irrelevantes para el latín, como por
ejemplo los artículos y las conjunciones.
listarTodos( ) {…}
Este método se encarga de listar todos los artículos y las conjunciones que se encuentran en la
gramática. Utiliza el predicado listarTodos(L) que se encuentra en la gramática para realizar
dicha función. Para utilizar este predicado se utiliza la clase Query de la biblioteca Interfaz
Java Prolog (JPL, por sus siglas en inglés).
eliminar1_de_2(String L1, String L2){…}
Capítulo 2
32
Con este método se realiza la eliminación de los artículos y las conjunciones de la oración
introducida por el usuario, es decir, lo que se encuentra en lista 1 se elimina de la lista 2.
L1: lista de artículos y conjunciones.
L2: oración introducida por el usuario convertida en un lista.
Util: Esta clase contiene tres métodos principales para realizar la traducción, los cuales
conforman las reglas de traducción de las frases con un sentido correcto. Además se encarga
del trabajo con cadenas en Java. Por ejemplo: verificar si la oración a traducir tiene comas, si
las palabras tienen tilde, etc.
Los sustantivos tienen dos traducciones, la primera para el nominativo y la segunda para el
genitivo. Los adjetivos pueden tener una, dos o tres traducciones. Si tiene una traducción, la
misma se utiliza para el género femenino, masculino y neutro del latín al mismo tiempo; si
tiene dos traducciones, la primera se utiliza para el femenino y masculino y la segunda para el
neutro. Por último si el adjetivo tiene tres traducciones cada una representa los géneros
masculino, femenino y neutro respectivamente. Los adverbios cuentan con una sola
traducción.
traducir (String palabra){…}
Este método devuelve el primer significado de cada palabra independientemente de la
categoría gramatical a la que pertenezca.
traducir_genitivo(String palabra){…}
Este método devuelve la traducción en genitivo del sustantivo pasado como parámetro.
traducir_adjetivo(String sustantivo, String adjetivo){…}
Este método devuelve la traducción del adjetivo en correspondencia con el género del
sustantivo al que caracteriza.
Capítulo 2
33
2.3 ¿Por qué se escogen los lenguajes JAVA y PROLOG?
Los problemas a resolver en las diferentes áreas de la computación cada vez
demandan soluciones más complejas, en muchas ocasiones un solo paradigma de
programación no es lo suficientemente apropiado para enfrentar los diversos matices de la
solución de estas situaciones.
Aunque los lenguajes orientados a objetos son hoy día la corriente principal de
desarrollo de aplicaciones, varios contextos de investigación sugieren que un enfoque multi-
paradigmático constituye la mejor solución. En especial si se combina con la programación
lógica, la cual añade funcionalidades relacionadas con la inteligencia, adaptabilidad y
concisión en la expresión de algoritmos.
Para desarrollar la aplicación se hizo un análisis previo con el objetivo de determinar
cuáles eran las herramientas computacionales más eficaces que permitieran una solución
óptima, además de llevar a la práctica los conocimientos adquiridos durante la carrera. El
lenguaje Java fue escogido, en parte, por poseer un poderoso conjunto de bibliotecas gráficas,
las cuales facilitan el trabajo en la creación de la interfaz del usuario. Además, es un lenguaje
sumamente fácil de aprender, permite crear sistemas más complejos y posee características
como la posibilidad de reutilizar el código en diferentes partes del programa. Sin embargo,
los conceptos de razonamiento e inferencia son prácticamente imposibles de identificar en la
programación orientada a objetos. El lenguaje Prolog es especialmente indicado para resolver
estos inconvenientes; ofrece simplicidad, potencia, es ideal para el tratamiento del lenguaje
natural y añade características importantes como la modularidad, la cual deriva en mayor
rapidez de los programas.
2.3.1 La Gramática en Prolog
Por motivos de claridad en los códigos fue necesario crear dos archivos:
“Gramática.pl” y “Diccionario.txt”. El primero contiene la gramática definida para analizar el
texto introducido por el usuario y algunos métodos auxiliares que se explicarán más adelante.
El fichero “Diccionario.txt” contiene en sí las palabras y sus traducciones. Como se explicó
Capítulo 2
34
en el capítulo anterior la gramática que se implementó es una GCD, pues permite establecer
concordancias de género y número entre los diferentes constituyentes de la oración. El
símbolo distinguido de la gramática utilizada en la aplicación es “oracion”.
oracion --> cat1 (Gen, Num), cat4 (_, _), cat3, cat2 (Gen, Num).
Nótese que se utiliza el símbolo --> para separar la cabeza del cuerpo de la regla. Esta
es una característica de las GCD.
Es importante señalar que el símbolo distinguido puede tener más de un cuerpo, de
hecho, la lógica lo indica así, mientras más cuerpos se tengan, más oraciones se pueden
analizar con la gramática.
oracion --> sust (Gen, Num).
oracion --> adj (Gen, Num).
oracion --> adv.
Luego se definen los símbolos no terminales, que en este caso son las categorías de la
oración así como los sustantivos, adjetivos, adverbios, etc.
cat1 (Gen, Num) --> art (Gen, Num), sust (Gen, Num).
cat1 (Gen, Num) --> sust (_, Num), prep, art (Gen, Num), sust (Gen, Num).
cat2 (Gen, Num) --> adj (Gen, Num), cat2a (Gen, Num).
cat3 --> adv.
cat4 (Gen, Num) --> prep, sust (_, _).
cat4 (Gen, Num) --> prep, art (Gen, Num), sust (Gen, Num).
sust (m, s) --> [pétalo]; [ápice]; [invierno]; [ángulo].
adj (f, p) --> [estrechas]; [ramosas]; [surcadas].
adv --> [pálidamente]; [siempre]; [densamente].
art (m, s) --> [el].
Como es lógico esta es una pequeña muestra de la gramática. (Véase la gramática
completa en el anexo #1).
En el caso:
Capítulo 2
35
cat1 (Gen, Num) --> art (Gen, Num), sust (Gen, Num).
indica que la categoría 1 tiene género “Gen” (que es “m” para masculino y “f” para
femenino) y número “Num” (“s” para singular y “p” para plural) si está compuesto por
“art(Gen, Num)” y “sust(Gen, Num)”, es decir, por un artículo y un sustantivo cuyos género
y número no sólo deben coincidir respectivamente entre sí, sino que serán el género y el
número que se transfieran a la categoría.
Por último, toca comentar sobre el uso que se ha hecho del punto y coma “;”, que en
Prolog significa disyunción. En realidad, una regla como:
adj (f, p) --> [estrechas]; [ramosas].
equivale a:
adj (f, p) --> [estrechas].
adj (f, p) --> [ramosas].
Podrían haberse incluido las dos últimas en vez de la primera y la gramática sería
equivalente (en el sentido de que generaría y reconocería las mismas oraciones). Sin
embargo, para que sean más cortos los ficheros se ha preferido emplear el punto y coma.
2.3.2 El archivo Diccionario
Como se explicó anteriormente el archivo “Diccionario.txt” contiene las palabras y
sus traducciones. A continuación se muestra un fragmento del mismo.
adherido,,adpressus, adpressa, adpressum
adnato,,annexus, annexa, annexum
adnato,,adnatus, adnata, adnatum
adondequiera,,quolibet
adpreso,,adpressus, adpressa, adpressum
aeruginoso,,aeruginosus, aeruginosa, aeruginosum
(Para ver el Diccionario consultar anexo #2)
Para separar la palabra de sus significados se utilizaron dos comas “,,”, porque al
invocar el fichero Diccionario, retornaba caracteres ilegibles y fue necesario realizar un
complejo trabajo con las cadenas desde Java.
Capítulo 2
36
Las palabras se encuentran ordenadas de forma alfabética, de modo tal que cuando se
muestren al usuario no estén desordenadas. Al insertar una nueva palabra, primero se busca
dónde debe quedar y luego se inserta, para así mantener el orden en el fichero.
2.3.3 Predicados auxiliares en Prolog
Cuando el usuario inserta un texto para traducir, se pasa a la fase de análisis del
mismo. Para determinar a qué categoría gramatical pertenece cada palabra se construyeron
algunos predicados y procedimientos en Prolog. A continuación se muestran los más
importantes y la función que realizan.
listarTodos (L) :- findall (X, art(_, _, [X], U), Xs),
findall (Y, cont ([Y], M), Ys),
findall (Z, prep ([Z], O), Zs),
findall (W, conj ([W], P), Ws),
concatenar (Xs, Ys, LI),
concatenar (Zs, Ws, LD),
concatenar (LI, LD, L).
concatenar (Xs, Ws, L).
El procedimiento “listarTodos (L)”, al ser invocado desde Java, devuelve una lista
con todos los artículos, contracciones, preposiciones y conjunciones que se encuentran en el
fichero “Gramática.pl”. Como puede verse se utiliza el predicado concatenar/3 (esta
notación indica predicado con tres argumentos) y el predicado de segundo orden findall/3
para construir la lista resultante
esAdjetivo (P, G, N, adj) :- adj (G, N, [P], U).
esAdjetivo1 (P, G, N, adj1) :- adj1 (G, N, [P], U).
esSustantivo (P, G, N, sust) :- sust (G, N, [P], U).
esAdverbio (P, _, _, adv) :- adv ([P], U).
esPreposicion (P, _, _, prep) :- prep ([P], U).
esConjuncion (P, _, _, conj) :- conj ([P], U).
esContraccion (P, _, _, cont) :- cont ([P], U).
Capítulo 2
37
esArticulo (P, G, N, art) :- art (G, N, [P], U).
Los predicados anteriores determinan si la palabra insertada pertenece a alguna de las
categorías gramaticales correspondiente a cada uno de estos predicados.
queEs (P, G, N, Id) :- esAdjetivo (P, G, N, Id);
esAdjetivo1 (P, G, N, Id);
esSustantivo (P, G, N, Id);
esAdverbio (P, _, _, Id);
esPreposicion (P, _, _, Id);
esConjuncion (P, _, _, Id);
esContraccion (P, _, _, Id);
esArticulo (P, G, N, Id).
Este procedimiento define la categoría gramatical de la palabra insertada (P),
instanciando la variable Id con el identificador de la palabra.
Por último, el predicado elim_l1_de_l2/3, retorna en la lista L, el resultado de
eliminar los elementos que se encuentran en la lista L1 de la lista L2. Este predicado se usa
para eliminar los artículos, conjunciones y otras palabras irrelevantes (en la oración básica
latina que aquí se trata no existen formas verbales, artículos, preposiciones, etc.) del texto
introducido por el usuario.
elimina (X, [X|Xs], Xs).
elimina (X, [Y|Ys], [Y|Zs]):-
elimina (X, Ys, Zs).
elim_l1_de_l2 ([], L, L) :- !.
elim_l1_de_l2 ([X|M], L, S) :-
elimina_x (L, X, T), elim_l1_de_l2 (M, T, S).
2.3.4 Enlace Java-Prolog
Actualmente existen varios mecanismos y bibliotecas para enlazar Java con Prolog como los
que se muestran en la Figura 2.3.
Capítulo 2
38
Figura 2.3 Mecanismos de conexión Java-Prolog
Para dar solución al problema planteado se utilizó la biblioteca Interfaz Java-Prolog
(JPL, por sus siglas en inglés), pues está diseñada para el SWI-Prolog, el cual es un intérprete
de líneas de comandos pequeño y rápido y cuya máquina interna puede ser anidada en otros
programas. SWI facilita una compilación muy rápida, además es software libre.
La biblioteca JPL contiene numerosas clases que permiten la comunicación entre Java
y Prolog. De todas, la más importante es la clase Query, la cual permite ejecutar consultas
sobre la base de conocimientos como si se estuviera en la consola del SWI-Prolog. La
consulta que se va a realizar se pasa como parámetro tipo String en el constructor de dicha
clase. A continuación se muestran algunos métodos de la clase Query.
hasSolution: devuelve un valor booleano indicando si la consulta tuvo éxito o no.
oneSolution: devuelve la solución a una consulta, la cual debe haber tenido variables para
unificar. La representación de dicha solución viene en forma de una tabla hash, donde la llave
es la variable, y el valor, es el valor asignado por SWI-Prolog al efectuar la consulta.
allSolutions: devuelve un arreglo de tablas hash con la misma estructura de oneSolution de
todas las soluciones de la consulta.
hasMoreSolutions: devuelve un valor booleano indicando si existen más soluciones para la
consulta especificada, generalmente se usa en combinación con nextSolution.
Capítulo 2
39
nextSolution: devuelve la siguiente solución en una tabla hash similar a oneSolution,
generalmente se usa en combinación con hasMoreSolutions.
La primera consulta que se realiza es al archivo que constituye la base de
conocimiento. En la aplicación ese archivo es “gramática.pl”, compilado por el programa
SWI-Prolog. Luego se hacen preguntas sobre dicha base de conocimiento utilizando los
métodos descritos anteriormente.
String t1 = “consult (‘gramática.pl’)”;
Query q1 = new Query (t1);
If (q1.hasSolution ( ))
System.out.println ( “La conexión ha sido exitosa” );
else
System.out.println ( “La conexión ha fallado” );
Es recomendable insertar esta consulta en el constructor de la clase principal, con el
objetivo de mantener en memoria el fichero “gramática.pl”, evitando así cargarlo cada vez
que se haga una pregunta a la base de conocimientos. A continuación se muestran algunas
consultas realizadas al archivo “gramática.pl” a través de Java.
String instruccion1 = "listarTodos (L).";
Query q1 = new Query (instruccion1);
return q1.oneSolution( ).get ("L").toString( );
String instruccion2 = "elim_l1_de_l2 (" + "[" + l1 + "]" + "," + "[" + l2 + "]" + ",L).";
Query q2 = new Query (instruccion2);
return q2.oneSolution().get("L").toString ( );
Las consultas anteriores invocan a los predicados listarTodos(L) y
elim_l1_de_l2(L1,L2,L) respectivamente, que se encuentran en el archivo gramática.pl,
mediante la clase Query. Se utiliza el método oneSolution(), explicado anteriormente, para
obtener las soluciones .
Capítulo 2
40
2.3.5 Acerca del instalador del Software.
Se ha querido que esta aplicación, después de terminada, quede contenida en un
fichero de instalación. Esto sirve para agilizar su distribución y permite un control sobre las
carpetas y archivos que conforman el software. De esta forma después de haber sido
instalado, el traductor optimiza su funcionamiento, ya que los archivos están ordenados según
el uso que necesita darles la aplicación. Esto repercute favorablemente a favor del
rendimiento que tendrá la computadora que ejecute el software, y dará al usuario una mayor
comodidad para trabajar con el sistema en general.
El fichero de instalación ha sido creado utilizando la herramienta Nullsoft Install
System (NSIS) en su versión 2.46, para crear ficheros de instalación a partir de cualquier
aplicación Windows implementada en un lenguaje de programación determinado.
Primeramente se crea el archivo Traductor.nsi, el cual funciona como un script con
extensión .nsi; contiene la información donde se instalará el software, posee el desinstalador,
además de colocar los accesos directos al programa y las carpetas y archivos que contendrá el
mismo. Luego de creado este archivo, se compila usando la herramienta NSIS obteniéndose
como resultado el instalador EsLatín3.exe. (Para consultar el archivo Traductor.nsi ver anexo
#3)
2.4 Conclusiones Parciales
La implementación de EsLatín versión 3, implicó el uso de varias tecnologías como la
plataforma de Java y el SWI-Prolog. Al lograr una integración entre dichas tecnologías se
obtiene un software con una interfaz gráfica amigable que posee una gramática para
reconocer en el lenguaje español la oración básica que se utiliza en el latín para la descripción
de las especies botánicas. También cuenta con un diccionario de español a latín para realizar
las traducciones. Además se cumplen los requisitos de la creación de sistemas para modificar
dicha base de conocimiento obteniéndose un software seguro, flexible y portable.
Gracias a la creación de un instalador compuesto por un solo fichero ejecutable, el
software puede ser distribuido e instalado fácilmente.
Capítulo 3
41
CAPÍTULO III: MANUAL DE USUARIO DE ESLATÍN 3
El traductor de español a latín para la descripción de especies botánicas EsLatín
versión 3, es el segundo de su tipo desarrollado en la UCLV. La novedad de este software es
que tiene la capacidad de traducir frases, a diferencia de la versión anterior, la cual no
contaba con esta característica. En este capítulo se explica cuáles son los requisitos que deben
cumplirse para su correcto uso, al realizar una traducción o para actualizar los datos del
mismo. También se hace referencia a los pasos a seguir para la instalación del software.
3.1 Características del software
Las principales características del software son:
• La interfaz visual es sencilla, permitiendo que el usuario se familiarice rápidamente
con el uso de la herramienta. La ayuda del sistema posee suficiente información para que el
usuario comprenda cuáles son las definiciones de latín con las que va a tener que trabajar
constantemente.
• Se incluye un módulo visual de utilidad para reconocer rasgos propios de las plantas,
y además sirve para orientar mejor cualquier tipo de búsqueda.
• La ventana de modificación del diccionario cuenta con un buscador automático para
encontrar fácilmente las palabras que se desea modificar.
Para la instalación del software y la utilización del mismo, son necesarios los
siguientes requisitos mínimos:
• Sistema Operativo Windows XP o superior.
• Máquina Virtual de Java (jre5 o superior) instalada.
• SWI Prolog (versión 5.4 o superior) instalado.
• 120 Mega Bytes de espacio libre de disco duro.
• Macromedia Flash Player.
Capítulo 3
42
3.2 Pasos para la instalación del software
El sistema no puede ser utilizado hasta que sea instalado en una computadora, la cual
deberá cumplir los requisitos planteados en el epígrafe anterior. El archivo para la instalación
debe ser ejecutado en la computadora por un usuario con los privilegios necesarios para llevar
a cabo dicha operación. La guía para la instalación del sistema está escrita en idiomas inglés
y español. A continuación se describen los aspectos fundamentales de la instalación que
puedan servir de ayuda.
Primeramente la persona encargada de instalar el software debe asegurarse de que el
mismo quede alojado en una carpeta donde los usuarios con menos privilegios tengan
permiso de lectura. La guía del instalador ofrece un camino, que por defecto es donde el
sistema operativo Windows instala sus programas. El camino es C:\Program Files para su
versión en inglés, o C:\Archivos de Programas para su versión en español.
Después que se haya instalado satisfactoriamente, en el escritorio de la sesión de
trabajo se copiará un ícono de acceso directo al fichero ejecutable de la aplicación.
3.3 Trabajo con la aplicación
El software comienza presentando una imagen que muestra el nombre de la
aplicación, donde se observa el porciento de carga de los componentes necesarios para su
correcto funcionamiento.
Capítulo 3
43
Figura 3.1: Cargando aplicación.
A continuación se muestra una ventana que contiene el ambiente de trabajo, desde el
cual se accede a todas las opciones de la aplicación. Dicho ambiente constituye el punto de
partida del programa y por lo tanto se mantiene durante toda la ejecución de la aplicación. La
figura siguiente muestra el ambiente de trabajo.
Capítulo 3
44
Figura 3.2: Vista principal.
A partir de aquí la aplicación se encuentra lista para su uso. En esta ventana principal
se muestran dos áreas de texto que servirán para realizar las traducciones, la primera sirve
para insertar el texto a traducir y la segunda muestra el resultado de la traducción.
Texto a traducir
El usuario introduce el texto a traducir en el área de texto que se encuentra en la parte
superior.
Capítulo 3
45
Resultados de la traducción
La segunda área de texto, que se encuentra en la parte inferior, es la que muestra los
resultados de la traducción efectuada, o un mensaje de información que describa cualquier
error que pudiera haber ocurrido durante el proceso.
Traducir
Al presionar este botón se efectúa el proceso de traducir lo que se encuentra escrito en
el área de texto superior y aparecen los resultados en la parte inferior. Se puede ejecutar la
misma acción al presionar la combinación de teclas Ctrl + T.
Limpiar
Cuando se presiona este botón se eliminan el texto y su traducción en las ventanas
correspondientes. Se utiliza normalmente cuando se quiere realizar una nueva traducción.
Abrir
Cuando se da clic sobre este botón aparece una ventana, mediante la cual se puede
cargar hacia el editor un fichero de texto que el usuario haya guardado con antelación.
Salvar
Al oprimir este botón se muestra una ventana, mediante la cual el usuario puede salvar
hacia un fichero de texto (.txt) el resultado de la traducción, así como el texto original que
quiso traducir.
3.4 El menú Archivo
Al mismo se puede acceder dando clic sobre él. Ofrece una reducida cantidad de
operaciones a realizar principalmente sobre los editores de texto que muestra la ventana
principal de la aplicación. Las opciones Abrir y Salvar son las mismas descritas
anteriormente.
Capítulo 3
46
Figura 3.3: El menú Archivo.
La opción Salir finaliza la ejecución del programa. Antes de terminar se pregunta al
usuario si realmente está seguro de abandonar la aplicación, o si prefiere seguir trabajando en
el traductor.
Figura 3.4: Ventana de confirmación de salida.
3.5 El menú Editar
Incluye las opciones de realizar una traducción y limpiar el contenido de los editores
de texto. Dichas acciones han sido anteriormente descritas.
Capítulo 3
47
Figura 3.5: El menú Editar.
3.6 El menú Diccionario
Está formado por dos herramientas: Modificaciones y Visualizar Diccionario.
Figura 3.6: El menú Diccionario.
Modificaciones al diccionario
Esta opción está prevista para que un especialista en el idioma latín pueda realizar las
modificaciones que estime convenientes sobre el diccionario de la aplicación. Para prevenir
que se realicen modificaciones incorrectas se provee al software de protección por
contraseña; de esta manera sólo el experto en latín puede realizar dichas acciones.
Capítulo 3
48
Figura 3.7: Autentificación.
La ventana anterior cuenta con la opción Cambiar contraseña, que permite al experto
cambiar la misma.
Figura 3.8: Cambiar contraseña.
Si la contraseña introducida es incorrecta se emite un mensaje de error, en caso
contrario, se mostrará la ventana Modificaciones.
Capítulo 3
49
Figura 3.9: Modificaciones al diccionario.
Las opciones que ofrece esta ventana son las de adicionar, eliminar o modificar
cualquier palabra que se encuentra en el diccionario. Cada una de ellas se acciona
presionando sobre los botones redondos que aparecen en un grupo nombrado “Acción” que
se encuentra en la parte superior izquierda de la ventana. Cada uno de estos botones hace que
cambie lo que se observa en la misma con el objetivo de que el usuario comprenda mejor
cómo realizar los pasos para actualizar el diccionario.
Adicionar
Cuando se desea agregar una nueva palabra se muestra un segundo grupo de botones
circulares, nombrado “Clasificación”, situado a la derecha del primero. En ellos se puede
observar los tres tipos de palabras con las que trabaja el diccionario, en este caso: sustantivos,
adjetivos y adverbios.
Adicionar sustantivo
Para adicionar un sustantivo se debe especificar género y número, como se muestra en
la siguiente figura.
Capítulo 3
50
Figura 3.10: Adicionar sustantivo.
Adicionar adjetivo
Además de seleccionar género y número, se pueden añadir adjetivos que pertenezcan
a la categoría 1. Esto se hace seleccionando dicha categoría.
Figura 3.11: Adicionar adjetivo.
Adicionar adverbio
Para adicionar un adverbio basta con seleccionar dicha opción.
Capítulo 3
51
Figura 3.12: Adicionar adverbio.
Modificar
Para modificar una palabra basta con escribirla en el cuadro de texto o seleccionarla
de la lista. En este caso se auxiliará de una búsqueda automática de la palabra que se está
escribiendo.
Figura 3.13: Modificaciones.
Capítulo 3
52
Después de seleccionada la palabra se presiona el botón “Modificar”. En ese caso
aparecerá una nueva ventana como se muestra a continuación.
Figura 3.14: Modificar.
Eliminar
Para eliminar una palabra, la ventana se muestra igual que en la figura 3.14, con el
único cambio de que el botón “Modificar” cambia su nombre por “Eliminar”. Se puede
realizar una búsqueda, igual que en el caso anterior, de la palabra que se desea eliminar.
Después de seleccionada la palabra en la tabla basta con dar doble clic sobre ella o presionar
el botón “Eliminar”. Automáticamente la palabra quedará eliminada del diccionario.
Capítulo 3
53
Figura 3.15: Eliminar.
Visualizar diccionario
La aplicación cuenta con un diccionario donde se muestran todas las palabras con las
que el traductor trabaja. Está formado solamente por traducciones simples (palabra en
español – significado en latín).
Capítulo 3
54
Figura 3.16: Diccionario.
3.7 El menú Herramientas
Este menú cuenta con la opción Visor de imágenes mediante el cual el usuario puede
comprobar la similitud de las palabras con las características de las plantas.
Capítulo 3
55
Figura 3.16: El menú Herramientas.
Luego de presionar este botón se muestra la siguiente ventana.
Capítulo 3
56
Figura 3.17: Visor de imágenes.
3.8 El menú Ayuda
La figura que se muestra a continuación indica cómo se accede a la ayuda del
traductor. A través de ella se explican todas las funcionalidades de la aplicación.
Capítulo 3
57
Figura 3.18: El menú Ayuda.
Contenido
En la siguiente figura se muestra la ayuda de la aplicación que aparecerá al presionar
el botón “Contenido”.
Capítulo 3
58
Figura 3.19: Ayuda.
Acerca de
Al presionar el botón “Acerca de” se mostrará una ventana con los datos de los
desarrolladores de la aplicación.
Figura 3.20: Acerca de.
Conclusiones
59
CONCLUSIONES
Con este trabajo se logró construir una aplicación que permite realizar traducciones de
oraciones referentes a la descripción de las especies botánicas. Se creó una gramática de
cláusulas definidas para chequear sintácticamente las oraciones en el lenguaje español.
Durante este proceso se logró adquirir conocimientos básicos de latín lo cual permitió
determinar el universo lingüístico con que cuenta la aplicación.
Se utilizó un mecanismo que permite la comunicación entre Java y SWI-Prolog
haciendo uso de la biblioteca que ofrece este último denominada JPL (Java Prolog). Se
desarrolló una interfaz gráfica que permite al usuario final la interacción con el sistema de
forma agradable.
La actualización del diccionario de la aplicación se realiza de manera segura por el
usuario especialista en el latín, quien a través de una contraseña accede a esta opción para
agregar, eliminar o modificar palabras según lo desee.
Recomendaciones
60
Recomendaciones
- Incorporar a la Gramática las categorías 5 y 6 de la oración básica.
- El software actual no cuenta con la opción de añadir nuevas imágenes al módulo
visual desde la misma aplicación por lo que se recomienda implementar esta opción.
- Poner a disposición de instituciones científicas vinculadas a la Botánica el presente
trabajo para su uso y distribución, así como para realizar una correcta evaluación del
mismo.
- Someter a evaluación los resultados del trabajo.
Referencias Bibliográficas
61
Referencias bibliográficas Amores Carredano, G. (2002) Un mecanismo de transferencia para LFG DCG-Prolog. Revista "Procesamiento del Lenguaje Natural" pp 12
Ávila Kotliarov, M. and N. Mendoza Morales (2006). Traductor de español a latín para la nomenclatura botánica. Facultad Matemática, Física y Computación. Villa Clara, Cuba, Universidad Central “Marta Abreu” de Las Villas. Licenciatura en Ciencia de la Computación: 72.
Benotti, L., ROGER, Sandra (2004). Traducción Automática: Dimensiones y Estrategias. Departamento de Informática y Estadística, Universidad Nacional del Comahue, Argentina: pp 5.
Bratko, I. (1986). Prolog Programming for Artificial Intelligence, Addison-Wesley.
Carreras, S. (2009). Eslatín I. Latín básico para los profesionales de la Botánica. Universidad Central "Marta Abreu" de Las Villas, Santa Clara, Cuba.
Corporation, A. (1986). The Arity/Prolog Programming Language.
Craciunescu, O. and C. Gerding-Salas (2007). Traducción automática y asistida: ¿nuevas formas de traducir? S. Stringer-O’Keeffe: pp 17.
Dagerman, B., et al. (2013). "Semantic Analysis of Natural Language and Definite Clause Grammar using Statistical Parsing and Thesauri."
Dávila, J. A., et al. (2007). Introducción a la lingüística computacional con una perspectiva interdisciplinaria, Centro de Investigación y Proyectos en Simulación y Modelos, Escuela de Idiomas Modernos. Mérida, Venezuela.
Diéguez M., M. I., Riedemann H., Karin (1998). "Análisis del error en la traducción automática: algunos ejemplos de las formas -ing del inglés al español." pp 19.
Fernández Reyes, F. d. l. C. (2011). Integración de métodos para la desambiguación del sentido de las palabras en el contexto del procesamiento del lenguaje natural. Centro de Estudios de Ingeniería y Sistemas. Facultad de Ingeniería Informática. Ciudad de la Habana, Instituto Superior Politécnico “José Antonio Echeverría”. Master en Informática Aplicada.
Gelbukh, A. (2010). "Procesamiento de Lenguaje Natural y sus Aplicaciones." Komputer Sapiens Vol. I.: 6.
Referencias Bibliográficas
62
Gelbukh, A. and G. Sidorov (2006). Procesamiento automático del español con enfoque en recursos léxicos grandes. México, Centro de Investigación en Computación. Instituto Politécnico Nacional.
Giannetti, C. (1997). ESTÉTICA DE LA SIMULACIÓN. Arte en la era electrónica - Perspectivas de una nueva estética. Barcelona, España.
Gurney, J., John 0. , et al. (1989). Implementing a Definite Clause Grammar for Parsing Surface Syntax, U.S. Army Laboratory Command. Harry Diamond Laboratories.
Gutiérrez, I. C. and D. F. Figueroa (2011). "Traducción automática. Técnicas y aplicaciones."
Hernández Mercedes, P. (2002). En torno a la traducción automática. España, Editorial Cervantes: pp 17.
Hutchins, J. (2007). "Machine translation: a concise history." Retrieved febrero del 2013, from http://www.hutchinsweb.me.uk/CUHK-2006.pdf.
Hutchins, W. J. and H. L. Somers (1992). An Introduction to Machine Translation. New York, Academic Press.
Kaplan, G., et al. (2010). Ambigüedad léxica en los modelos de requisitos en lenguaje natural. XII Workshop de Investigadores en Ciencias de la Computación.
Ledo Mezquita, Y. (2006). Recuperación de información con resolución de ambigüedad de sentidos de palabras para el español. Centro de Investigación en Computación. México DF, Instituto Técnico Nacional. Tesis Doctoral.
Lezcano, M. (2005). Prolog y los Sistemas Expertos.
Monferrer, M. T. E., et al. (2001). El Lenguaje de Programación PROLOG. Castellón de la Plana.
Montero Martínez, J. M. (2000). Desarrollo de un entorno para el análisis sintáctico de una lengua natural. Aplicación al castellano. Departamento de Ingeniería Electrónica. Madrid, Universidad Politécnica de Madrid.
Moreno, L., et al. (1999). "Introducción al procesamiento del lenguaje natural." Servicio de Publicaciones Universidad de Alicante). Universidad de Alicante.
Muñoz, J. M. M. and M. V. Ramírez (2010). "Aplicaciones de traducción basadas en memorias de datos: desarrollo y perspectivas de futuro." Entreculturas: revista de traducción y comunicación intercultural(3): 109-123.
Referencias Bibliográficas
63
Pereira, F. C. N. and S. M. Shieber (2002). Prolog and Natural-Language Analysis. Brookline, Massachusetts, Microtome Publishing.
Reyes, G. (1990). La pragmática lingüística: el estudio del uso del lenguaje, Editorial Montesinos.
Riley, G. and J. Giarratano (2012). "Sistemas expertos."
Rowe, N. C. (1988). Artificial Intelligence Through Prolog, Prentice-Hall.
Russell, S. J. and P. Norvig (1995). Artificial Intelligence A Modern Approach. New Jersey, Prentice Hall.
Somers, H. (2003). Machine translation: latest developments. Oxford handbook of computational linguistics. Oxford, Oxford University Press.
Sosa, E. (1997). "Procesamiento del lenguaje natural: revisión del estado actual, bases teóricas y aplicaciones." 05/02/2013, from http://www.elprofesionaldelainformacion.com.
Sterling, S. (1994). The art of Prolog, MIT Press.
Tomás Gironés, J. (2003). Traducción automática de textos entre lenguas similares utilizando métodos estadísticos. Departamento de Sistemas Informáticos y Computación. Valencia, Universidad Politécnica de Valencia. Tesis Doctoral: pp 157.
Vázquez Pérez, S. (2009). Resolución de la ambigüedad semántica mediante métodos basados en conocimiento y su aportación a tareas de PLN. Departamento de Lenguajes y Sistemas Informáticos. Alicante, Universidad de Alicante. Tesis Doctoral.
Villayandre Llamazares, M. (2010). Aproximación a la Lingüística Computacional. Departamento de Filología Hispánica y Clásica, Universidad de León. Tesis Doctoral.
Warren, D. H. D. (1983). An abstract Prolog instruction set. California, SRI International.
Wu, J. (2011). Adaptation of language models and context free grammar in speech recognition, Google Patents.
Zapata, C. and S. Benítez (2009). "Interlingua: a-state-of-the-art overview." Revista Facultad de Ingeniería Universidad de Antioquia(47): 117-128.
Anexos
64
Anexos
1- Gramática.pl
Nota: las vocales con tilde han sido sustituidas por las respectivas vocales sin la tilde
seguidas del número 1. De igual forma la ñ por n1.
%GRAMATICA%
oracion --> cat1(Gen,Num),cat4(_,_),cat3,cat2(Gen,Num).
oracion --> sust(Gen,Num).
oracion --> adj(Gen,Num).
oracion --> adv.
oracion --> adj1(Gen,Num).
cat1(Gen,Num) --> art(Gen,Num),sust(Gen,Num).
cat1(Gen,Num) --> sust(Gen,Num).
cat1(Gen,Num) --> sust(_,Num),prep,art(Gen,Num),sust(Gen,Num).
cat1(Gen,Num) --> sust(_,_),cont,sust(m,_).
cat1(Gen,Num) -->
sust(Gen,Num),adj1(Gen,Num),prep,art(Gen1,Num1),sust(Gen1,Num1).
cat1(Gen,Num) --> art(Gen,Num),sust(Gen,Num),adj1(Gen,Num).
cat1(Gen,Num) -->
art(Gen,Num),sust(Gen,Num),adj1(Gen,Num),prep,art(Gen1,Num1),sust(Gen1,Num1).
cat1(Gen,Num) --> sust(Gen,Num),adj1(Gen,Num).
cat2(Gen,Num) --> adj(Gen,Num),cat2a(Gen,Num).
cat2a(Gen,Num) --> conj,adj(Gen,Num),cat2a(Gen,Num).
cat2a(Gen,Num) --> [].
cat3 --> adv.
cat3 --> [].
Anexos
65
cat4(Gen,Num) --> prep,sust(_,_).
cat4(Gen,Num) --> prep,art(Gen,Num),sust(Gen,Num).
cat4(Gen2,Num2) -->
prep,art(Gen,Num),sust(Gen,Num),prep,art(Gen2,Num2),sust(Gen2,Num2).
cat4(Gen,Num) --> prep,art(Gen,Num),sust(Gen,Num),adj(Gen,Num).
cat4(Gen,Num) --> [].
%SUSTANTIVOS%
sust(m,p) --> [pe1talos];[inviernos].
sust(m,s) --> [pe1talo];[apice];[invierno];[a1ngulo];[entrenudo];
[nervio];[tubo];[lobo];[pedu1nculo];[ovario];[ro1mulo];[limbo].
sust(m,s) --> [bulbo];[pseudobulbo];[escapo];[racimo];[nudo];
[arbusto];[alabastro];[pecio1lulo];[lo1culo];[disco];[hilacha];[hilo].
sust(f,p) --> [hojas];[llanuras];[corolas];[bra1cteas];[semillas].
sust(f,s) --> [aja];[anacordia];[barrera];[cabecita];[cima];[clase];
[conidia];[conidio1fora];[cresta];[estigma];[cuerda];[ca1scara].
sust(f,s) --> [altura];[anemocori1a];[ramificacio1n];[antera];[hoja];
[corola];[llanura];[rama];[esti1pula];[axila];[semilla];[bra1ctea];[ca1psula].
%ARTICULOS%
art(m,s) --> [el].
art(m,p) --> [los].
art(f,s) --> [la].
art(f,p) --> [las].
%CONTRACCIONES, PREPOSICIONES, CONJUNCIONES%
cont --> [al];[del].
prep --> [ante];[bajo];[cabe];[con];[contra];[de];[desde];
[durante];[en];[entre];[hacia];[hasta];[mediante];[para];[por];[segu1n];[sin].
conj --> [y];[ni];[pero];[sino];[conque];[luego];[tan];
[e];[o];[u];[sino];[que];[excepto];[salvo];[menos];[porque].
Anexos
66
%ADJETIVOS%
adj(m,p) --> [verdes];[azules];[rojos];[amarillos];[negros];[blancos];
[altos];[opuestos];[largos];[se1siles];[ceru1leos];[cortos];[pilos].
adj(m,p) --> [estrechos];[ramosos];[surcados];[fuertes];[robustos];
[pubescentes];[erectos];[rectos];[opuestos];[lanceolados];[lobados];[pinados].
adj(m,s) --> [verde];[azul];[rojo];[amarillo];[negro];[blanco];[alto];
[opuesto];[largo];[se1sil];[ceru1leo];[corto];[pilo];[puberulento];[agudo].
adj(f,p) --> [estrechas];[ramosas];[surcadas];[fuertes];[robustas];
[pubescentes];[erectas];[rectas];[opuestas];[lanceoladas];[lobadas];[pinadas].
adj(f,p) --> [uncinadas];[globosas];[crasas];[gruesas];[ovoideas];
[multifloras];[mucronadas];[armadas];[inermes];[agudas];[redondeadas].
adj(f,p) --> [enequila1teras];[terminales];[eli1pticas];[finas];[solitarias].
adj(f,s) --> [normal];[obclaviforme];[obtriangular];[urticante];[valva].
adj(f,s) --> [marro1n];[melaniforme];[meloniforme];[meniscoide];
[mensual];[modioliforme];[moniliforme];[montante];[muscariforme];[mutante].
%ADJETIVOS1%
adj1(m,p) --> [jo1venes];[viejos];[antiguos];[inferiores];[superiores];
[masculinos];[femeninos];[exteriores];[interiores];[mayores];[menores];[primarios].
adj1(m,s) --> [joven];[viejo];[antiguo];[inferior];[superior];[masculino];
[femenino];[exterior];[interior];[mayor];[menor];[primario];[infraestaminal].
adj1(f,p) --> [jo1venes];[viejas];[antiguas];[inferiores];[superiores];
[masculinas];[femeninas];[exteriores];[interiores];[mayores];[menores].
adj1(f,s) --> [joven];[vieja];[antigua];[inferior];[superior];[masculina];
[femenina];[exterior];[interior];[mayor];[menor];[primaria];[infraestaminal].
%ADVERBIOS%
adv --> [abiertamente];[abruptamente];[abultadamente];[abundantemente].
%PREDICADOS%
Anexos
67
miembro(X,[X|_]).
miembro(X,[_|R]):-miembro(X,R).
elimina(X,[X|Xs],Xs).
elimina(X,[Y|Ys],[Y|Zs]):-elimina(X,Ys,Zs).
elim_l1_de_l2([],L,L):-!.
elim_l1_de_l2([X|M],L,S):-elimina_x(L,X,T),elim_l1_de_l2(M,T,S).
elimina_x([],X,[]):-!.
elimina_x([X|M],X,Z):-elimina_x(M,X,Z),!.
elimina_x([R|M],X,[R|Z]):-elimina_x(M,X,Z),!.
aplanar([],[]).
aplanar([X|L],[X|K]):-not X=[M|_],aplanar(L,K).
aplanar([X|Tail],L):-X=[M|_],
aplanar(X,L1),
aplanar(Tail,L2),
concatenar(L1,L2,L).
concatenar([],L,L).
concatenar([X|L1],L2,[X|L3]):-concatenar(L1,L2,L3).
listarTodos(L):-findall(X,art(_,_,[X],U),Xs),
findall(W,conj([W],P),Ws),
concatenar(Xs,Ws,L).
prefijo([],M):-!.
Anexos
68
prefijo([X],[X|M]):-!.
prefijo([X|L],[X|M]):-prefijo(L,M).
prefijo([X|T],[L|M]):-lista(X),prefijo(X,L),prefijo(T,M).
lista([]):-!.
lista([X|Y]):-lista(Y).
esAdjetivo(P,G,N,adj):- adj(G,N,[P],U).
esAdjetivo1(P,G,N,adj1):- adj1(G,N,[P],U).
esSustantivo(P,G,N,sust):- sust(G,N,[P],U).
esAdverbio(P,_,_,adv):- adv([P],U).
esPreposicion(P,_,_,prep):- prep([P],U).
esConjuncion(P,_,_,conj):- conj([P],U).
esContraccion(P,_,_,cont):- cont([P],U).
esArticulo(P,G,N,art):- art(G,N,[P],U).
listarSust(L,Gen):- findall(X,sust(Gen,s,[X],U),L).
listarAdj(L,Gen):- findall(X,adj(Gen,s,[X],U),L).
listarAdj1(L,Gen):- findall(X,adj1(Gen,s,[X],U),L).
queEs(P,G,N,Id):-
esAdjetivo(P,G,N,Id);esAdjetivo1(P,G,N,Id);esSustantivo(P,G,N,Id);esAdverbio(P,_,_,Id);es
Preposicion(P,_,_,Id);esConjuncion(P,_,_,Id);esContraccion(P,_,_,Id);esArticulo(P,G,N,Id).
2- Diccionario.txt (esto es solo una pequeña muestra del archivo)
abaxial,,abaxialis, abaxiale
abayado,,baccatus, baccata, baccatum
abiertamente,,patule
abierto,,apertus, aperta, apertum
abrazante,,amplectus, amplecta,
amplectum
Anexos
69
abruptamente,,abrupte
abultadamente,,grosse
abundantemente,,longe
abundantemente,,abunde
acetabuliforme,,acetabuliformis,
acetabuliforme
aciculado,,aciculatus, aciculata,
aciculatum
acicular,,acicularis, aciculare
acicular,,acerosus, acerosa, acerosum
acinaciforme,,acinaciformis,
acinaciforme
acintado,,fasciarius, fasciaria,
fasciarium
acrecido,,accretus, accreta, accretum
acroleuco,,achroleucus, achroleuca,
achroleucum
acráceo,,achraceus, achracea,
achraceum
acrógeno,,acrogenus, acrogena,
acrogenum
aculeado,,aculeatus, aculeata,
aculeatum
acuminado,,acuminatus, acuminata,
acuminatum
adamascado,,armeniaccus,
armeniacca, armeniaccum
adaxial,,adaxialis, adaxiale
además,,insuper
además,,praeterea
adherido,,adpressus, adpressa,
adpressum
adnato,,annexus, annexa, annexum
adnato,,adnatus, adnata, adnatum
adondequiera,,quolibet
adpreso,,adpressus, adpressa,
adpressum
aeruginoso,,aeruginosus, aeruginosa,
aeruginosum
afín,,affinis, affine
agudamente,,subtiliter
agudamente,,acute
agudo,,acutus, acuta, acutum
aguijón,,spiculum, spiculi, n
ahora,,nunc
aisladamente,,simpliciter
aja,,stramen, straminis, n
alabardado,,hastatus, hastata,
hastatum
alabastro,,alabaster, alabastri, m
alado,,alatus, alata, alatum
alantoide,,botuliformis, botuliforme
alantoide,,allantoideus, allantoidea,
allantoideum
alargado,,elongatus, elongata,
elongatum
albescente,,albescens, albescentis
albumen,,albumen, albuminis, n
alegremente,,laete
almendro,,nux, nucis, m
almohadado,,pulvinatus, pulvinata,
pulvinatum
alternado,,alternativus, alternativa,
alternativum
Anexos
70
alterno,,alternus, alterna, alternum altura,,altitudo, altitudinis, f
3- Traductor.nsi
!include "WordFunc.nsh"
!include LogicLib.nsh
!include nsDialogs.nsh
InstType "full"
InstType "minimal"
!define name "EsLatín_3"
Var JRE
Var SWI
;Nombre del instalado
Name ${name}
;El Archivo de Salida
OutFile "EsLatín_3.exe"
Icon "icon\icono.ico"
;estilo XP
XPStyle on
;El directorio default para la
instalación
InstallDir
$PROGRAMFILES\${name}
; Registry key to check for
directory (so if you install again, it
will overwrite the old one
automatically)
InstallDirRegKey HKLM
"Software\${name}" "InstallDir"
Function PutShorcuts
StrCpy $R1 $R0 1
StrCmp $R1 ">" skip
SetShellVarContext All
CreateDirectory
$SMPROGRAMS\$R0
CreateShortCut
"$SMPROGRAMS\$R0\${name}.l
nk" $INSTDIR\EsLatin_3.bat
MessageBox MB_YESNO
$(deskshort) IDYES ok IDNO no
ok:
CreateShortCut
"$DESKTOP\${name}.lnk"
$INSTDIR\EsLatin_3.bat
no:
CreateShortCut
"$SMPROGRAMS\$R0\Desinstala
r ${name}.lnk"
$INSTDIR\uninstall.exe
WriteRegStr HKLM
SOFTWARE\${name}
"StartMenuFolder"
$SMPROGRAMS\$R0
skip:
FunctionEnd
Section !$(base) sec1
SectionIn RO
SetOutPath $INSTDIR
;ver si JRE esta instalado si no
instalarlo
StrCmp $JRE "si" 0 no
installJRE:
MessageBox MB_OK "Se ha
detectado que no se encuentra
Anexos
71
instalada la maquina $\nvirtual de
Java, o que la version instalada es
incompatible.$\n Se instalará
ahora"
SetOutPath $TEMP
File "Others\jre.exe"
ExecWait '"$TEMP\jre.exe"' $1
StrCmp $1 "1602" installFail
Goto installOK
installFail:
Call AbortarJRE
installOK:
installed:
SetOutPath $INSTDIR
Goto fn
no:
Call isJRERightVersion
StrCmp $0 "instalar" 0 fn
Goto installJRE
fn:
;ver si SWI esta instalado si no
instalarlo
StrCmp $SWI "si" 0 no1
installSWI:
MessageBox MB_OK "Se ha
detectado que no se encuentra
instalado $\nSWI-Prolog, o que la
version instalada es
incompatible.$\n Se instalará
ahora"
SetOutPath $TEMP
File "Others\swi.exe"
ExecWait '"$TEMP\swi.exe"' $1
StrCmp $1 "54" installFail1
Goto installOK1
installFail1:
Call AbortarJRE
installOK1:
installed1:
SetOutPath $INSTDIR
Goto fn1
no1:
Call isJRERightVersion
StrCmp $0 "instalar" 0 fn1
Goto installSWI
fn1:
;estos son los archivos y las
carpetas que se crearan
File /r images
File /r lib
File /r Licencia
File /r icon
File Gramatica.pl
File EsLatin_3.bat
File Eslatin_3.jar
File Diccionario.txt
File system.log
File Ayuda.exe
top related