Algoritmo Levenshtein (fuzzy) para detección de errores de tipográficos u ortográficos

Problemática en la búsqueda de información: El error tipográfico u ortográfico ¿ Quién no ha cometido un error de tipo tipográfico u ortográfico en una búsqueda de información ? Evidentemente, los resultados obtenidos no son los esperados, o simplemente no obtenemos ningún tipo de información. En el caso del error tipográfico, lo solucionamos corrigiendo el […]

Problemática en la búsqueda de información: El error tipográfico u ortográfico

¿ Quién no ha cometido un error de tipo tipográfico u ortográfico en una búsqueda de información ?

Evidentemente, los resultados obtenidos no son los esperados, o simplemente no obtenemos ningún tipo de información. En el caso del error tipográfico, lo solucionamos corrigiendo el error introducido y volvemos a realizar la búsqueda, pero ¿ y en el caso del ortográfico ? Puede que realicemos búsquedas en un idioma que no es nuestro idioma materno, o simplemente desconozcamos la ortografía de una palabra en concreto.

En newuibcn, después de haber trabajado en multitud de proyectos, y con diferentes roles de usuarios, hemos observado que es importante para la experiencia del usuario, incorporar la posibilidad del error en las pantallas de selección de datos cuando el campo a filtrar es un texto libre.

Algoritmo de Levehnstein

Para tener en cuenta el error tipográfico u ortográfico en nuestros algoritmos de obtención de información, hemos incorporado el algoritmo de Levehnstein en nuestros procesos de búsqueda, añadiendo variantes propias a dicho algoritmo para dotar de mas prestaciones a nuestras pantallas de búsqueda.

¿ Y en qué consiste Levehnstein ?

La distancia de Levenshtein, distancia de edición o distancia entre palabras es el número mínimo de operaciones requeridas para transformar una cadena de carácteres en otra. 

Por ejemplo, la distancia de Levenshtein entre «casa» y «calle» es de 3 porque se necesitan al menos tres ediciones elementales para cambiar uno en el otro.

  1. casa → cala (sustitución de ‘s’ por ‘l’)
  2. cala → calla (inserción de ‘l’ entre ‘l’ y ‘a’)
  3. calla → calle (sustitución de ‘a’ por ‘e’)

Imaginemos un ejemplo práctico. Pongamos

Un ejemplo práctico

como ejemplo mi nombre: Pere. Pere es un nombre catalán, que fonéticamente suena como ‘pera’ en castellano. Por eso, muchas personas castellanoparlantes, en un proceso de búsqueda por nombre por ejemplo, escribirían ‘Pera’, con lo cual no obtendrían los resultados parlantes.

Aplicando Levehnstein, este problema quedaría solucionado, ya que entre ambas palabras, hay una distancia de 1 (la sustitución de la ‘e’ por la ‘a’).

En nuestros algoritmos, por experiencia, hemos observado que es conveniente solo permitir un único error, ya que si se permiten mas. el conjunto de resultados obtenidos contiene muchos mas resultados de lo esperado, ya que al incrementar la distancia máxima, más valores cumplen la condición, y eso puede llegar a confundir al usuario.

Variantes introducidas

Aplicamos variantes para mejorar el rendimiento en nuestros procesos de búsqueda como por ejemplo:

  • Mínimo de caracteres por palabra para aplicar el algoritmo (Evitamos aplicar control de errores a palabras con pocos caracteres (artículos. preposiciones, interjecciones, etc…), donde difícilmente se produce un error y así no obtener mas resultados de los necesarios).
  • Buscar el texto introducido al principio y final de las palabras, además de en su totalidad.
  • Buscar el texto al final de una palabra y al principio de otra (En caso que nuestro texto de búsqueda contenga 2 palabras o más).