Una función de similitud de cadenas simple y liviana (~700 bytes minimizada) basada en comparar el número de bigramas en común entre dos cadenas cualesquiera. Devuelve una puntuación entre 0 y 1 que indica la fuerza del partido.
Basado en el coeficiente de Sørensen-Dice, este algoritmo es más eficaz para detectar palabras reorganizadas o errores ortográficos. Tiende a ser menos efectivo con cadenas muy cortas, a menos que quizás cambies a comparar caracteres individuales en común en lugar de bigramas.
No distingue entre mayúsculas y minúsculas a menos que especifique lo contrario. No ignora la puntuación ni los espacios. En algunos casos, eliminar la puntuación de antemano puede mejorar la precisión.
La versión 2.0 optimiza el algoritmo de complejidad temporal O(n 2 ) a O(n) y pasa del uso de una matriz para bigramas a un mapa, que resultó ser sustancialmente más rápido en las pruebas de rendimiento.
Esta biblioteca utiliza una estructura de datos de mapas integrada para un rendimiento óptimo. Por lo tanto, requiere al menos IE11 o un polyfill para Map.
import { stringSimilarity } from "string-similarity-js" ;
// Rearranged words
stringSimilarity ( "Lorem ipsum" , "Ipsum lorem" )
// Returns a score of 0.9
// Typos
stringSimilarity ( "The quick brown fox jumps over the lazy dog" , "The quck brown fx jumps over the lazy dog" )
// 0.92
// Even more different
stringSimilarity ( "The quick brown fox jumps over the lazy dog" , "The quack brain fax jomps odor the lady frog" )
// 0.65
// Completely different strings
stringSimilarity ( "The quick brown fox jumps over the lazy dog" , "Lorem ipsum" )
// 0.07
// Tiny strings are less effective with default settings
stringSimilarity ( "DMV" , "DNV" )
// Returns 0, because technically there are no bigrams in common between the two
// Passing in a substring length of 1 may improve accuracy on tiny strings
stringSimilarity ( "DMV" , "DNV" , 1 )
// Returns 0.67, the percentage of letters in common between the two
Este proyecto tiene la licencia MIT; consulte el archivo LICENSE.md para obtener más detalles.