Una biblioteca pequeña y ligera para búsqueda difusa.
Creé esta biblioteca como resultado de aprender sobre el algoritmo de distancia de Levenshtein para calcular la cantidad mínima de ediciones de un solo carácter (inserciones, eliminaciones o sustituciones) necesarias para transformar una palabra en otra por Vladimir Levenshtein.
Nota
Nota: La biblioteca se encuentra en una etapa muy temprana, por lo que si desea ayudar a mejorarla, abra una edición.
Puedes consultar la demostración aquí.
con yarn
yarn add fuzzify
con npm
npm install fuzzify
import Fuzzy from "fuzzify" ;
const countries = [
"Australia" ,
"France" ,
"Germany" ,
"Hungary" ,
"Iceland" ,
"India" ,
"Israel" ,
"Italy" ,
"Japan" ,
"Malawi" ,
"Malaysia" ,
"Maldives" ,
] ;
const fuzzy = new Fuzzy ( countries ) ;
const query = "ala" ;
const results = fuzzy . search ( query ) ;
console . log ( "RESULTS" , results ) ;
La API search
proporciona cadenas coincidentes aproximadas con la consulta pasada en el siguiente formato.
Atributos | Descripción |
---|---|
texto | La cadena de destino con la que se compara la consulta. |
distancia | El número mínimo de ediciones (Inserción/Eliminación/Sustituciones) necesarias para transformar la consulta en texto de destino. |
[
{
text : "Malawi" ,
distance : 3 ,
} ,
{
text : "Malaysia" ,
distance : 5 ,
} ,
{
text : "Australia" ,
distance : 6 ,
} ,
{
text : "Italy" ,
distance : 3 ,
} ,
{
text : "Japan" ,
distance : 3 ,
} ,
{
text : "Iceland" ,
distance : 5 ,
} ,
{
text : "Maldives" ,
distance : 6 ,
} ,
{
text : "Israel" ,
distance : 5 ,
} ,
{
text : "India" ,
distance : 4 ,
} ,
{
text : "France" ,
distance : 5 ,
} ,
{
text : "Germany" ,
distance : 6 ,
} ,
{
text : "Hungary" ,
distance : 6 ,
} ,
] ;
includeMatches
includeMatches
: determina si los indices
en los que coinciden los caracteres deben devolverse en la respuesta. Cada elemento match
consta de dos índices:
Ejemplo ?
query = "ala" , target string = "Australia"
matches : [
[ 0 , 5 ] ,
[ 1 , 6 ] ,
[ 2 , 8 ] ,
] ,
¿En el ejemplo anterior? se encuentran coincidencias
a
en el índice 0th
en ala
coincide con el carácter a
en el índice 5th
en Australia
l
en 1st
índice en ala
coincide con el carácter a
en 6th
índice en Australia
a
en 2nd
índice en ala
coincide con el carácter a
en el 8th
índice en Australia
¿La respuesta completa sería?
[
{
text : "Malawi" ,
distance : 3 ,
matches : [
[ 0 , 1 ] ,
[ 1 , 2 ] ,
[ 2 , 3 ] ,
] ,
} ,
{
text : "Malaysia" ,
distance : 5 ,
matches : [
[ 0 , 1 ] ,
[ 1 , 2 ] ,
[ 2 , 7 ] ,
] ,
} ,
{
text : "Australia" ,
distance : 6 ,
matches : [
[ 0 , 5 ] ,
[ 1 , 6 ] ,
[ 2 , 8 ] ,
] ,
} ,
{
text : "Italy" ,
distance : 3 ,
matches : [
[ 0 , 2 ] ,
[ 1 , 3 ] ,
] ,
} ,
{
text : "Japan" ,
distance : 3 ,
matches : [
[ 0 , 1 ] ,
[ 2 , 3 ] ,
] ,
} ,
{
text : "Iceland" ,
distance : 5 ,
matches : [
[ 1 , 3 ] ,
[ 2 , 4 ] ,
] ,
} ,
{
text : "Maldives" ,
distance : 6 ,
matches : [
[ 0 , 1 ] ,
[ 1 , 2 ] ,
] ,
} ,
{
text : "Israel" ,
distance : 5 ,
matches : [
[ 0 , 3 ] ,
[ 1 , 5 ] ,
] ,
} ,
{
text : "India" ,
distance : 4 ,
matches : [ [ 2 , 4 ] ] ,
} ,
{
text : "France" ,
distance : 5 ,
matches : [ [ 2 , 2 ] ] ,
} ,
{
text : "Germany" ,
distance : 6 ,
matches : [ [ 2 , 4 ] ] ,
} ,
{
text : "Hungary" ,
distance : 6 ,
matches : [ [ 2 , 4 ] ] ,
} ,
] ;
includeScore
Determina si se debe agregar una puntuación al resultado. Una puntuación de 1
significa una coincidencia exacta; sin embargo, una puntuación de 0
significa que no hay coincidencia y esas opciones se eliminan del resultado. Si desea obtener todas las opciones en el resultado, abra un problema y analicemos.
caseSensitive
Determina si la consulta debe distinguir entre mayúsculas y minúsculas o no. Por defecto, esta opción es false
.
Instalar paquetes:
yarn
Iniciar el desarrollo del patio de juegos:
yarn start
Comando de compilación:
yarn build
Abra un problema para que podamos comenzar a discutir. Cualquier ayuda para mejorar la biblioteca es bienvenida :).