El mundo está lleno de grandes enfrentamientos. Espacios vs tabuladores, Android vs iOs, …. Hoy toca diccionarios vs algoritmos generadores. El motivo del enfrentamiento es que una palabra se puede tener diversas formas, por ejemplo los verbos tienen prácticamente una forma distinta dependiendo de la persona, el tiempo o el modo. Un nombre tiene masculino y femenino y sus respectivos plurales. ¿Como recopilamos todas esas variaciones? Hay dos opciones principales: diccionarios y algoritmos generadores.
Diccionarios:
Es el más simple de entender. Almacenamos un listado con cada palabra y sus posibles variaciones.
Ventajas:
- Es fácil de entender y de modificar.
- No tiene problemas con las excepciones.
Inconvenientes:
- Ocupa mucho espacio.
- No sabe qué hacer con las palabras nuevas que no están en el diccionario.
- Es costoso y difícil recopilar todos los casos.
Algoritmos generadores:
Se basan en usar un algoritmo que a partir de una forma de la palabra genera todas las demás.
Ventajas:
- Ocupa poco espacio.
- Pueden trabajar con palabras nuevas sin problemas.
Inconvenientes:
- No pueden trabajar con excepciones.
- Son difíciles de modificar.
- A veces tienes que aplicar varios algoritmos para ir de una forma a otra ya que no hay uno directo.
Algoritmos generadores con diccionarios de excepciones:
Siempre hay una tercera opción que es mezclar las otras dos. Se usan algoritmos generadores para generar la nueva forma de la palabra, y solo se almacenan en el diccionario las excepciones a estos algoritmos. Ocupa menos espacio y es capaz de tener en cuenta las excepciones.
Por ejemplo, podríamos tener un algoritmo generador realmente simple que tuviera esta regla:
«Si la palabra femenina acaba en ‘a’ el masculino remplaza la ‘a’ por ‘o'»
Funciona bien la mayoría de los casos, pero sería necesario tener un diccionario que indique que el femenino de ‘vaca’ es ‘toro’ y no ‘vaco’.
Pero no todo es alegría y regocijo. Aún con este sistema es difícil ser exhaustivo y tener en cuenta todos los posibles casos. Además de que el lenguaje es algo vivo que siempre está creciendo y cambiando por lo que hay que realizar un esfuerzo por mantenerlo actualizado.