Hace ya relativamente cierto tiempo de esto, me llegó un correo electrónico que decía
lo siguiente: «Sgeún un eiudsto de una uinsrvdiead iglensa, no iomtpra el odern en el que las lerats eátsn ectasirs, la úcina csoa inrmptoate es que la prirmea y úlimta lreta eétsn esracits en la poóicisn ccrertoa. El resto peduen eastr ttmeatolne mal y aún párdos lelreo sin poamblers. Etso es pruoqe no leeoms cdaa ltrea por sí mmsia, snio la pbarlaa cmoo un tdoo. Peonmrestalne me pacere ilnírebce«.
Aunque probablemente la mayoría de los lectores puedan entender el párrafo en cuestión, he aquí la «traducción» al español perfectamente correcto: «Según un estudio de una universidad inglesa, no importa el orden en el que las letras están escritas, la única cosa importante es que la primera y última letra estén escritas en la posición correcta. El resto pueden estar totalmente mal y aún podrás leerlo sin problemas. Esto es porque no leemos cada letra por sí misma, sino la palabra como un todo. Personalmente me parece increíble«.
Aparentemente esto ocurre no sólo en español sino en la mayoría de los idiomas. Así, si creíamos que leemos letra por letra un texto, pues nos hemos equivocado. Aparentemente nuestros cerebros han asimilado una serie de patrones, los cuales no son otras cosas que las palabras, las cuales se codifican y se guardan de manera misteriosa, pero sin duda, de forma muy eficiente, de manera que al ver una palabra, en lugar de leerla y armarla letra por letra, lo que estamos haciendo es simplemente buscar en nuestro acervo de palabras para ver si está y la reconocemos.
De ser cierta esta idea, lo cual parece serlo, encontraríamos una explicación a ese misterioso fenómeno de los errores en un texto que escribimos, y que solamente encontramos después de haberlo impreso. Es decir, no importa las veces que lo revisemos en la pantalla de la computadora. Es regla general que cuando se imprima el documento encontremos errores que nunca vimos.
A partir de esta idea me di a la tarea de escribir un programa que hiciese este intercambio de letras. Al principio, por cuestiones de simplicidad, utilicé un intercambio simple de letras, la segunda con la tercera, la cuarta con la quinta, etc. Más adelante puse un algoritmo más sofisticado que hace este intercambio de letras (recuérdese siempre dejar la primera y última letra de cada palabra igual), y lo incorporé al programa. Y así lo dejé, el ejercicio de programación funcionaba bien.
Pero he aquí que en un curso de reconocimiento de patrones, pensé que la labor inversa debía ser interesante de programar. Es decir, dado un texto escrito con esta técnica de poner al azar las letras de cada palabra (a excepción de la primera y última letra, repito), ¿se podrá hacer un programa que lo pase a un formato legible?
Ahí encontré, entre otras cosas, que el hecho de que podamos leer textos así escritos no significa simplemente que el cerebro reconoce la palabra que creemos que es, sino que tiene un acervo de palabras, el cual es enorme, y además, gracias al contexto, puede reconocer lo que está escrito. Para ser más claro, imaginemos que encontramos la siguiente palabra:
«Sirhdcogeenr»
Probablemente no pueda usted saber de qué palabra se trata, puesto que no hay contexto. Pero ahora veamos esta frase completa:
«Sirhdcogeenr fue uno de los más eairrtoarxnoids fiocíss de la mcáienca cnáituca»
probablemente nos cueste trabajo si jamás nos hemos ocupado de la física y mecánica cuántica. Para cualquier físico será relativamente fácil y podrá leer:
«Schroedinger fue uno de los más extraordinarios físicos de la mecánica cuántica»
Dicho en otras palabras, el mecanismo que usa el cerebro para entender un texto desarticulado con la técnica mencionada se puede volver a su sentido original si se cumplen dos factores:
- el lector tiene un buen conocimiento del lenguaje
- el lector tiene un conocimiento del mundo exterior o de temas particulares que le
facilitan el entendimiento de pasajes así escritos.
Esto en el fondo es un tema de la inteligencia artificial. ¿Se podrá hacer una rutina que lea un texto mal formado y lo ponga correctamente?
Para que esto sea posible, tenemos que alimentar al programa con una base de datos de palabras (nuestro conocimiento del lenguaje), para que así, al ver una palabra, el sistema pueda buscar en dicho archivo y hallar la que corresponde.
Curiosamente la búsqueda no es en ningún sentido algo común, como lo que se hace frecuentemente. Aquí tenemos que buscar con los siguientes criterios:
- La palabra a buscar debe ser mayor de tres letras (no hay cambio en «uno», «las», «si», «no», «y», por ejemplo)
- la primera y última letra de la palabra a buscra debe coincidir con la primera y última letra, además de la longitud en caracteres de la misma.
La palabra a buscar debe contener las mismas letras que la palabra original. - En el punto 3 surge un problema. Supongamos que buscamos la siguiente palabra: «dnrtmvaescutiete» (destructivamente).
De cada palabra que debo buscar en mi diccionario, debo saber que están todas las palabras de la palabra original sobre la que busco, en este caso el subconjunto ‘nrtmvaescutiet’. Al principio, pensé que lo más fácil sería sacar todas las permutaciones de estas letras y ver si se cumplían dentro de la palabra elegida en cada búsqueda, pero encontré que es una mala idea, porque si tengo 7 letras, hay que calcular 7! permutaciones. En el caso del ejemplo, hay que calcular 14!… Obviamente hay que buscar otra solución.
Al final de cuentas lo que se me ocurrió es crear una tabla de frecuencias para la palabra que busco y las opciones que tengo. Así me aseguro que ambas palabras (la que elegí como candidata y la original), tengan las mismas letras dentro de la primera y última que no cambian.
El algoritmo lo agregué al programa original y podría decir que de alguna manera busca tener un sistema con visos de inteligencia.
Cuando se le pide al programa que convierta un texto malformado a uno correctamente escrito, hallé que:
- Tuve que poner todas las palabras en minúsculas, pues mi diccionario de palabras está todo en mayú¿sculas
- El diccionario consta de casi 500,000 palabras, pero no tienen acentos y eñes. La razón de esto es que en el formato original del mismo los autores (para un proyecto de corrección ortográfica en Linux), pusieron caracteres especiales para señalar acentos, derivaciones de las palabras, etc. Como eso complicaba la búsqueda de las palabras en mi aplicación se los quité en esta primera versión.
- El programa tarda en relativamente en procesar el texto mal formado. La razón es que tiene que analizar prácticamente las casi 500 mil palabras, pues una búsqueda binaria simplemente en este caso no se puede hacer.
- Cuando el programa no encuentra una palabra, la marco en MAYÚSCULAS para que se vea el cambio de manera notable.
Quien le interese este programa, escríbame a morsa@la-morsa.com y se lo mando a vuelta de correo…