Jaro Winkler y Levenshtein: el derecho al error

Cuando realiza una búsqueda en un motor de búsqueda, probablemente ya haya cometido un error tipográfico o haya invertido dos letras. A pesar de esta falla, aún tiene resultados relevantes. Cómo es posible ? Vamos a ver dos algoritmos que permiten a tus usuarios cometer errores cuando realizan una búsqueda. O poder comparar dos cadenas de caracteres y ver su proximidad.

En SQL, cuando realiza consultas a la base de datos utilizando una cadena de caracteres como criterio de búsqueda, tendrá varias posibilidades de búsqueda:

  • con la cadena exacta (= ‘theString’)
  • comenzando con la cadena (COMO ‘theString%’)
  • terminando con la cadena (LIKE ‘%theString’)
  • que contiene la cadena (LIKE ‘%theString%)

Por otro lado, si comete un error de escritura o una inversión de caracteres (por ejemplo, ‘laChaien’), no encontrará ningún registro correspondiente. Mientras que, de hecho, su búsqueda está bastante cerca. Hay algoritmos para hacer comparaciones de cadenas y darle un nivel de similitud entre dos cadenas.

También puede usar estos métodos si está realizando una transferencia de datos o si está buscando integrar datos que se ingresaron a mano.

Jaro Winkler

Con la distancia de Jaro Winkler, podrá «medir» la similitud de dos cadenas de caracteres. El resultado obtenido estará entre 0 y 1, siendo 1 una perfecta igualdad entre las dos cadenas.

Si desea ver exactamente cómo funciona debajo del capó, puede consultar la entrada de Wikipedia .

Si quieres utilizarlo en tus desarrollos, puedes encontrar los códigos fuente en la red. Por ejemplo, el código fuente C , o si usa funciones y procedimientos MySQL, el código fuente .

Sin embargo, tenga cuidado, estas funciones de comparación de caracteres consumen muchos recursos y pueden tardar en ejecutarse. Especialmente si desea comparar la entrada de un usuario con miles o millones de entradas basadas en una cadena.

Esto es lo que da algunas ejecuciones de la función en MySQL con diferentes cadenas:

Investigación Jaro Winkler

Levenshtein

La distancia de Levenshtein indica el número de manipulaciones (suma, eliminación, reemplazo) que se deben realizar para pasar de una cadena a otra. Así que 0 es una igualdad perfecta, y cuanto más aumenta el número, más diferentes son las cadenas.

Si quieres saber más, puedes ir a la página de Wikipedia .

Para implementarlo, puedes encontrar el código en la web, por ejemplo el código fuente basado en MySQL . La misma observación que para Jaro Winkler, estas son funciones de consumo.

Esto es lo que da algunas ejecuciones de la función en MySQL con diferentes cadenas:

Investigación Levenstein

Deja una respuesta