Showing posts with label corrección ortográfica. Show all posts
Showing posts with label corrección ortográfica. Show all posts

Monday, May 31, 2021

La versión final de mi artículo sobre corrección ortográfica



Ya hablé aquí de la aceptación de mi artículo para el Congreso Mexicano de Inteligencia Artificial, que se llevó a cabo de manera virtual a fines de mayo. El tema que traté fue un sistema experto para hacer corrección ortográfica a partir de reglas gramaticales, en lugar de usar un enorme diccionario de términos. 

Brevemente, la historia de este artículo viene desde 1988, cuando hice el posgrado en el Reino Unido, en Inteligencia Artificial, en la Universidad de Essex. Ahí aprendí a usar algunas herramientas y metodologías para trabajar con los problemas que bien podían ser parte de lo que hoy llamamos la Inteligencia Artificial. Así, aprendí Prolog y este nuevo paradigma de programación resultó la herramienta fundamental para el desarrollo de mi corrector ortográfico.

Cuando regresé a México, un par de años depués (1991), comencé a escribir el mencionado corrector, que bauticé como Lapsus. Usé Turbo Prolog 2.0, el cual era una de las versiones más sencillas y poderosas del momento, aún en MsDOS. Esta versión del lenguaje me permitió un desarrollo rápido y en un par de semanas tenía una primera versión, la cual tomaba como entrada un archivo de texto y hacía la corrección en modo batch, es decir, no en tiempo real sino una vez que el documento ya estaba todo escrito. Eran los tiempos en donde había limitaciones de hardware y software mucho más serias que ahora. De hecho, la versión en Prolog incluía un editor tipo WordStar, el estándar de facto de la época, en donde el usuario podía escribir su documento.

Pero pasaron los años y las interfaces gráficas hicieron su aparición. Entonces las suites de Office, como MsOffice, tendrían un desarrollo acelerado y se convertirían en parte de las herramientas de software que prácticamente todos los usuarios deben tener en una computadora moderna. Entonces pensé que Lapsus debía ser portado de manera que se comunicara con Word, que era el software que mucha gente usaba, y así hacer la corrección ortográfica vía reglas.

Primero usé Data Dynamic Exchange (DDE), de Microsoft, que resultó muy difícil de usar, con un sinfín de problemas. La solución llegó cuando la empresa de las ventanas sacó el protocolo OLE (Object Linking and Embedded), el cual permitía una comunicación entre programas de terceros y Office. Usando entonces Delphi, escribí la versión de Lapsus para Windows, la cual permite al usuario de MsOffice usar el corrector por reglas, pues éste se comunica con Word automáticamente y pasa cada palabra a Lapsus, la revisa y si halla problemas, regresa el resultado con los mensajes de error apropiados.

Una simpática anécdota fue cuando hablé con algunos amigos de Microsoft y les pedí que revisarán mi idea, a ver si la incorporaban eventualmente en Word. Se tomaron la molestia de hacerlo y concluyeron que la idea era simpática, pero que no veían en ella un gran futuro. 

Aún así, el trabajo estaba hecho y ahora con el Congreso de IA, decidí probar suerte para publicar formalmente el trabajo realizado. Fue aceptado y ya tengo la versión final. He aquí el borrador final para quién le interese. Se puede descargar de este enlace.


Wednesday, May 12, 2021

Aceptaron mi artículo para el XIII Congreso de Inteligencia Artificial


Hace unas semanas salió la convocatoria del Congreso Mexicano de Inteligencia Artificial (COMIA), el cual se llevará a cabo -de manera virtual- del 18 al 21 de mayo de este año 2021. Organiza la Sociedad Mexicana de Inteligencia Artificial (SMIA), que tiene sede en la Universidad de Sonora. 

Así que decidí mandar un artículo sobre una idea que tuve, que fue la motivación para hacer la maestría, y que consiste en hacer corrección ortográfica usando reglas. El español tiene una estructura muy interesante y muchas palabras caen en ciertas reglas. Por ejemplo, la palabra "enbiar" está mal escrita porque hay una regla que dice: "las palabras que contienen "nb" siempre se escriben con "v", es decir, "nv". Por tanto, "enviar" debe escribirse así.

En el manual de ortografía de Larousse, hay alrededor de 260 reglas de uso frecuente en el español. Así entonces, desde 1991 comencé a trabajar en esta idea. Primero hice una versión en Prolog, la cual es en realidad un sistema experto tradicional, con reglas IF THEN. Codifiqué las reglas ortográficas como predicados de Prolog e hice un sistema que permitía la corrección de textos a partir de las mismas. La virtud es que para esto no se necesita un diccionario enorme de palabras, como en el caso de correctores como Word, por ejemplo.

Desde luego que un buen corrector requiere de diversos tipos de técnicas para la corrección de las palabras. Nunca sobra un buen diccionario. Igualmente, se puede tener un diccionario de palabras de uso común, el cual nos permite incluso insertar términos que podrían estar mal escritos pero que por alguna razón se escriben de esta manera. Por ejemplo, la palabra "Volzas" la usan en una empresa que hace bolsas. Desde luego está mal escrita pero si yo tuviese esta palabra en mi diccionario personal, podría aceptar el término sin necesidad de indicar que formalmente está mal escrito. Igualmente, hay muchos términos que se usan en las profesiones que no ncesariamente se pueden encontrar en muchos diccionarios. Si se pudiesen alimentar estos términos en un diccionario del usuario, la corrección podría ser mucho más ágil.

Lapsus, como bauticé a mi software, tiene pues una larga historia... He aquí lo que publiqué en el blog hace tiempo:

Lapsus: anatomía de un corrector ortográfico I

Lapsus: anatomía de un corrector ortográfico II

Lapsus: anatomía de un corrector ortográfico III

Lapsus: anatomía de un corrector ortográfico IV

Lapsus: anatomía de un corrector ortográfico V

Lapsus: anatomía de un corrector ortográfico VI

Lapsus: anatomía de un corrector ortográfico VII

En fin, escribí mi artículo y me acaban de avisar que se publicará en un número especial de la revista Research in Computing Science, de publicación periódica con ISSN, indexada en Latinindex y DBLP.

Este sería mi segundo artículo publicado en revista arbitrada... 


Friday, June 05, 2020

Reto lúdico: procesadores de palabras y diccionarios



Hoy en día prácticamente todas las aplicaciones usan un diccionario de palabras, el cual funciona en tiempo real, marcando (muchas veces subrayando en rojo o pintando con algún color específico) las palabras que de acuerdo a cómo se escriben las palabras, están mal escritas. Esto lo usan muchos procesadores de palabras que añaden esta capacidad para hacer más valioso su software y ayudar al usuario a escribir con mayor corrección.

Hay que decir que los idiomas humanos muchas veces son más complicados para corregir que simplemente hacer una búsqueda en un diccionario a ver si existe una palabra o no. Hay giros idiomáticos, hay anglicismos que muchas veces no se encuentran en los diccionarios, amén de que hay palabras que tienen que ver con el contexto en el que se escriben. Pongamos un ejemplo: la palabra "solo" se escribe sin acento si es de soledad. Si es adverbio, entonces se le pone la tilde en la primera sílaba. Así, "estoy solo" está bien escrito, pero "estoy sólo" no lo está. Y sí, sé que la Rel Academia de la Lengua Española estaba quitando estos acentos diacríticos. Sin embargo, mientras no se decida cómo quedará la cosa, yo seguiré con la regla antigua.

Los elementos de una buena corrección ortográfica

En 1988 hice la maestría en Inteligencia Artificial. Mi proyecto era un corrector ortográfico inteligente. Después de analizar a detalle la problemática, llegué a la conclusión que, para tener un corrector razonablemente bueno, se requería lo siguiente:

  • Ser capaz de usar reglas ortográficas: Hay más de doscientas reglas en el español. Por ejemplo, "En una palabra, después de una n va una v, después de una m va una b". Así, "enbiar" está mal escrito y "homvre" también está mal. Si usamos las reglas, podemos olvidarnos en algunos casos de consultar las palabras en el diccionario.
  • Ser capaz de usar un diccionario con miles de palabras: Mientras más palabras se tengan en un diccionario, la corrección puede ser mejor.
  • Ser capaz de usar diccionarios personalizados: Muchas palabras no están en los diccionarios, por ejemplo, aquellas que usan términos científicos o un lenguaje especializado. Sería pues conveniente poder agregar esta funcionalidad de tener (o crear) diccionarios especializados.
  • Ser capaz de usar otras tecnologías para buscar errores, como patrones equivocados de letras: En muchas ocasiones los usuarios cambian la letras de orden y estoi hace que la palabra esté mal escrita. Si podemos detectar esto, la corrección puede hacerse sin necesidad de un diccionario.
  • Ser capaz de usar de un diccionario de verbos ya conjugados: Curiosamente, los diccionarios normalmente traen los verbos en infinitivo pero no vienen conjugados. La conjugación es un proceso mecánico y por ende, bien podría añadirse a las capacidades del corrector. Cada verbo tiene, en general unas 50 conjugaciones y hay unos 10 mil verbos. Esto haría posible tener un diccionario -sólo de verbos (¿notaron la tilde?)- de 500 mil palabras.


Tres tipos de corrección: interactiva, por lotes y rápida

Normalmente los procesadores de palabras corrigen mientras el usuario está escribiendo un texto. Esto es relativamente ágil para el usuario pues puede detectar errores de inmediato. Sin embargo, hay otros escenarios. Supongamos que nos mandan un texto de muchas cuartillas. Pues bien, sería recomendable ejecutar el corrector ortográfico de manera tal que se haga automáticamente mientras hago otra cosa. Cuando termine, que guarde un reporte con las correcciones que hay que hacer en un archivo que pueda consultar. Una tercera opción es hacer una "corrección rápida", usando para ello una lista de palabras más frecuentemente usadas en el español. Estas pueden encontrarse aquí.

Con esto dicho, va el reto: hágase un editor de textos (puede ser del tipo bloc de notas, es decir, sin necesidad de tipos y tamaños diferentes de letras), que corrija un texto usando estas posibilidades, mientras más, mejor. Es decir, mientras más características puedan usarse (de las descritas), será un mejor candidato a ganar el premio del reto lúdico.

Más de uno preguntará: ¿Y de dónde saco el diccionario de palabras a usar? Buscando en el oráculo de Internet, encontré este sitio, que Giusseppe Domínguez tecleó las 91 mil palabras del diccionario de la RAE y las puso en un archivo de texto, el cual puede descargarse de este enlace. El autor de semejante esfuerzo nos da algunas estadísticas sobre las palabras:


  • Palabras en a.txt = 11135
  • Palabras en b.txt = 3861
  • Palabras en c.txt = 12697
  • Palabras en d.txt = 5880
  • Palabras en e.txt = 7332
  • Palabras en f.txt = 2966
  • Palabras en g.txt = 3000
  • Palabras en h.txt = 2215
  • Palabras en i.txt = 3308
  • Palabras en j.txt = 982
  • Palabras en k.txt = 117
  • Palabras en l.txt = 2531
  • Palabras en m.txt = 5598
  • Palabras en n.txt = 1351
  • Palabras en ñ.txt = 82
  • Palabras en o.txt = 1468
  • Palabras en p.txt = 7951
  • Palabras en q.txt = 521
  • Palabras en r.txt = 4603
  • Palabras en s.txt = 4713
  • Palabras en t.txt = 4980
  • Palabras en u.txt = 500
  • Palabras en v.txt = 2031
  • Palabras en w.txt = 28
  • Palabras en x.txt = 48
  • Palabras en y.txt = 267
  • Palabras en z.txt = 774


Palabras en total = 90939

Con esto todo está en la mesa. ¡A programar!

El ganador (si es de la Ciudad de México), se hará acreedor a una taza con el logotipo de la Morsa. Si es de otro país o de provincia, le mandaremos un USB de al menos 16 GB.



Cabe señalar que este concurso busca simplemente alentar el trabajo de la programación y mostrar que puede ser lúdica. Es un concurso de buena fe. Si hay, por ejemplo, dos o más respuestas satisfactorias, ganará quien la haya mandado primero.

El ganador cede su código fuente a la comunidad. Los que estén interesados deberán mandar sus programas a morsa@la-morsa.com. Quien resulte ganador deberá entregar el código fuente para compartirlo con la comunidad.

Digamos que la idea es promover la creación de software y además, hacer que ésta sea de código abierto. Si el autor decide no poner su código accesible, perderá su premio.



Friday, March 11, 2016

El esfuerzo cooperativo al escribir software



Llevo tiempo pensando en que debía hacer algún software que me permitiera corregir los textos que escribo de manera más rápida. Para ello -es claro- se necesita un buen diccionario en español y hasta donde sé, no hay muchos buenos diccionarios que sean gratuitos. Hay sin embargo algunas alternativas, por ejemplo, tratar de usar el diccionario en español que viene con MsWord a través de OLE (Object Linking & Embedded), que es en realidad un protocolo para compartir información entre aplicaciones.

El caso es que me puse a investigar qué debía hacer y empecé por buscar componentes para Delphi (Turbo Pascal para Windows), que ya hiciese esta labor de corrección de forma sencilla, sin tenerme que poner a diseñar la estructura de datos del diccionario. Hallé en www.torry.net, algunos componentes. O eran de demostración o bien, costaban sus buenos dólares. Así que seguí investigando y eventualmente dí con un sitio web, el cual contiene un par de componentes para hacer corrección ortográfica en Delphi: TSpellChecker y TSpellLanguageComboBox. TSpellerChecker es un componente no-visual diseñado para poder añadir la corrección ortográfica a cualquier aplicación. Para ello usa los diccionarios de ISpell, un corrector que nació en una PDP y que eventualmente se portó a otros sistemas. Lo interesante de ISpell es que usa un formato que otros sistemas han imitado. ISpell tiene además otra virtud, hay muchos diccionarios de muchísimos idiomas, entre ellos el español.

Partiendo de esto, este par de componentes parecen ser los idóneos para el trabajo que quiero hacer. Hallo que incluso estos componentes de Delphi pueden usar los diccionarios instalados en MsOffice 95 o 97. El autor de la página indica que no puede garantizar que funcione con versiones más avanzadas de Office. Una ventaja más de estos componentes es que incluyen el código fuente, por lo que en principio, pueden modificarse para las necesidades particulares de los programadores.

Considerando esto, bajé e instalé los componentes en mi Delphi 7, que me sigue pareciendo una de las versiones más estables a pesar de que han salido actualizaciones que sin duda deben ser más poderosas pero para este particular programa, me basta el poder que me da. Cabe señalar que el autor original de los componentes es Alexander Obukhov, de Minsk, Bielorrusia, quien los escribió para Delphi 3. Sin embargo, Luzius Schneider, un suizo, se aplicó para actualizarlos.

Escribí pues un programa sencillo, que hace la corrección ortográfica de manera muy eficiente. Debo decir que la ventana de corrección tiene aún los botones de acciones (cambiar, saltar, ignorar, etcétera), en inglés, lo cual suena ridículo que sigan en ese idioma si la corrección es para el idioma castellano. Tengo que sentarme a leer el código fuente de los componentes para hacer los cambios, pero en realidad "se me quemaban las habas" por ver si el sistema podría funcionar con el diccionario en español de ISpell.

Y sí, funciona y lo hace bastante bien. He empezado a jugar con este programa y lo estoy usando para escribir mis artículos de unocero, buscando que los errores de dedo se minimicen. Igualmente, en algunos artículos pongo referencias y entonces he definido una serie de opciones del menú -que podrían cambiar- para insertar automáticamente texto como el de "Referencias:" u otros que me sean comunes. Vamos a ver cómo evoluciona el software.

Lo más interesante de esta experiencia es que de alguna forma el trabajo en equipo, colectivo, de diversos programadores, da la posibilidad de hacer una aplicación que bien podría considerarse complicada de escribir en algo que me llevo unas pocas horas. Bendito Internet y toda la gente que colabora porque el generar código se vuelva una labor menos complicada.

El programa me lo pueden pedir a mi correo morsa@la-morsa.com, el cual les mandaré para que lo prueben, incluso con el código fuente, para que vean cómo en el cómputo moderno se pueden hacer programas sumamente complejos en tan pocas líneas.


Referencias:

LS Speller