viernes, 19 de junio de 2009

El problema de la traducción (Parte II)

Habiéndonos planteado el desafío de implementar un traductor Winka Süngun – Che Süngun, es necesario preguntarse hasta dónde queremos llegar. Debido a que no cuento con mucho tiempo libre para desarrollar algoritmos de alta complejidad (lo que implica utilizar el método ensayo-error muchas veces), el programa que implementaremos sólo traducirá oraciones simples, como por ejemplo:

• Mi tío tiene tres ovejas en el corral
• Nosotros vivíamos en la ciudad
• Mi abuela comerá carne

El traductor no podrá reconocer transiciones, gerundios, participios, verbos reflexivos,…

¿Serán demasiadas limitaciones?

¿El traductor brindará la utilidad que el usuario necesita?

Una vez determinadas las limitaciones generales del programa, nos centraremos en el lenguaje que nuestro sistema de traducción entenderá. Para ello definiremos una “metalengua” que será un híbrido entre el español y el Che Süngun y que facilitará el proceso de migración desde la lengua de Cervantes a la lengua de Pelontraru.

IMPORTANTE: desde aquí en adelante se intentará exponer, de la manera más simple posible, la lógica con la que nuestro futuro software traductor funcionará.

Los componentes superficiales de esta metalengua serán:

[S]: Sustantivo en singular, independiente del género (gato, gata, tierra, luna,…).
[ADJ]: Adjetivo calificativo (blanco, negro, grande, nuevo, antiguo,…).
[NAoP]: Numeral (un, uno, dos,…), Artículo (el, la, los, las) o Posesivo (mi, tu, su,…).
[PP]: Pronombre Personal (yo, tú, él, ella,…).
[LOC]: Localizador (a, en, dentro de).
[Neg]: Negador (no).
[V]: Verbo conjugado.

Cuando el usuario ingrese una oración, el sistema dividirá la cadena de caracteres (string) en palabras aisladas, detectando el carácter espacio ( ) entre palabras. Nótese que esto afecta al reconocimiento de palabras que juntas tienen un único significado, como es el caso de “arco iris”. Las palabras reconocidas serán almacenadas en un arreglo unidimesional (una fila o una columna).

Suena complicado… veamos un ejemplo de cómo funciona, teóricamente, el algoritmo que permite detectar las palabras que el usuario ha ingresado:

1. El usuario ingresa la cadena de caracteres: “Mi tío tiene tres ovejas en el corral”. Esta cadena está compuesta por 37 caracteres.
2. El sistema convierte mayúsculas en minúsculas por motivos que se explicarán posteriormente: “mi tío tiene tres ovejas en el corral”.
3. El sistema detecta los “espacios”, que en este caso son 7, ubicados en los caracteres: 3, 7, 13, 18, 25, 28 y 31.
4. De la cadena ingresada se obtienen 8 subcadenas (¿palabras?), las que guardaremos en una “tabla” de una sola fila y 8 columnas (o una columna y 8 filas), llamada “arreglo”. Por ejemplo, los caracteres 1 y 2 forman la primera palabra (mi) que será almacenada en la primera posición del arreglo, y los caracteres desde el 19 al 24 forman la quinta palabra ingresada por el usuario (ovejas) que será almacenada en la quinta posición del arreglo.
5. Llamaremos WS al arreglo anterior, y designaremos WS[i] a la palabra almacenada en la posición i. En el caso de nuestro ejemplo: WS[1]=mi; WS[2]=tío; WS[3]=tiene; WS[4]=tres; WS[5]=ovejas; WS[6]=en; WS[7]=el; WS[8]=corral.

Siguiendo los pasos anteriores, el software “sabrá” que el usuario ha ingresado 8 cadenas de caracteres en las que no está el carácter “espacio”.

El siguiente paso que deberá realizar el programa es intentar determinar si cada cadena de caracteres corresponde a una palabra y, además, identificar a qué clase de palabra de nuestra metalengua pertenece.

La lógica que el programa traductor será la siguiente:

1. ¿WS[1] es [S]? Sí: Pasa a 9. No: Pasa a 2.
2. ¿WS[1] es [ADJ]? Sí: Pasa a 9. No: Pasa a 3.
3. ¿WS[1] es [NAoP]? Sí: Pasa a 9. No: Pasa a 4.
4. ¿WS[1] es [PP]? Sí: Pasa a 9. No: Pasa a 5.
5. ¿WS[1] es [LOC]? Sí: Pasa a 9. No: Pasa a 6.
6. ¿WS[1] es [Neg]? Sí: Pasa a 9. No: Pasa a 7.
7. ¿WS[1] es [V]? Sí: Pasa a 9. No: Pasa a 8.
8. Palabra no encontrada o no válida. Se “devuelve” la palabra.
9. Siguiente WS[].

El mismo esquema se repetirá para WS[2] hasta WS[8].

Pero, ¿Cómo sabrá el computador las respuestas a las preguntas anteriores?

Para saber si, por ejemplo, WS[1] (mi) es un [NAoP] (Numeral, Artículo o Posesivo), es necesario que el programa cuente con listas de palabras clasificadas de acuerdo a los componentes definidos en la metalengua. Estas listas de palabras pueden ser tablas de 2 columnas (matrices previamente ingresadas al sistema), bases de datos y/o archivos “.txt”.

Supongamos que utilizamos un archivo de texto con el nombre “NAoP.txt”. El archivo tendría esta forma:

mi-tañi
tu-tami
su-tañi
el-chi
la-chi
los-pu
las-pu
un-kiñe
unos-kiñeke
dos-epu
tres-küla
cuatro-meli
cinco-kechu
seis-kayu
siete-srelge
ocho-pusra
nueve-ailla
diez-masri
cien-pataka
mil-wasranka

Vemos que el archivo “NAoP.txt” tiene 20 líneas. La idea es que el programa lea línea por línea hasta antes del carácter “-” y compare dicha subcadena con WS[i]. Si las dos cadenas son iguales, automáticamente se tendrá el equivalente en Che Süngun (los caracteres después de “-”). Si la palabra no se encuentra, entonces el sistema retornará la palabra ingresada.

Obsérvese que los artículos los y las serían el equivalente de pu en Mapuche. Esto sólo se aplica a seres (vivos) y a objetos que no “pueden” contener nada en su interior, ya que pu también admite la traducción “dentro de”: pu sruka = dentro de la casa.

El mismo proceso se repetirá para [S] (sustantivo), [ADJ] (adjetivo calificativo), [PP] (pronombre personal) y [LOC] (localizador). Importante es mencionar que el proceso descrito es el mismo que utilizan los Pichi Diccionarios.

En el caso de [Neg], sólo se admite el valor “no”. Pero en el caso de [V] (verbo conjugado), las cosas se nos tornan un poco más complicadas…


<<< >>>

Videos de YouTube