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:
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: