Une petite bibliothèque légère pour Fuzzy Search.
J'ai créé cette bibliothèque suite à l'apprentissage de l'algorithme de distance de Levenshtein pour calculer le nombre minimum de modifications d'un seul caractère (insertions, suppressions ou substitutions) nécessaires pour transformer un mot en un autre par Vladimir Levenshtein.
Note
Remarque : la bibliothèque en est à ses débuts, donc si vous souhaitez contribuer à son amélioration, veuillez ouvrir un numéro.
Vous pouvez consulter la démo ici.
avec yarn
yarn add fuzzify
avec 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 ) ;
L'API search
donne des chaînes correspondantes approximatives avec la requête transmise dans le format ci-dessous.
Attributs | Description |
---|---|
texte | La chaîne cible à laquelle la requête est comparée |
distance | Le nombre minimum de modifications (insertion/suppression/substitutions) requises pour transformer la requête en texte cible. |
[
{
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
- Détermine si les indices
auxquels les caractères correspondent doivent être renvoyés dans la réponse. Chaque élément match
se compose de deux indices -
Exemple ?
query = "ala" , target string = "Australia"
matches : [
[ 0 , 5 ] ,
[ 1 , 6 ] ,
[ 2 , 8 ] ,
] ,
Dans l'exemple ci-dessus ? des correspondances sont trouvées
a
au 0th
index dans les correspondances ala
avec le caractère a
au 5th
index en Australia
l
au 1st
index dans ala
correspond au caractère a
au 6th
index en Australia
a
au 2nd
index dans les correspondances ala
avec le caractère a
au 8th
index en Australia
La réponse complète serait ?
[
{
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
Détermine si un score doit être ajouté au résultat. Un score de 1
signifie une correspondance exacte, cependant un score de 0
signifie aucune correspondance et ces options sont supprimées du résultat. Si vous souhaitez obtenir toutes les options dans le résultat, veuillez ouvrir un problème et discutons-en.
caseSensitive
Détermine si la requête doit être sensible à la casse ou non. Par défaut, cette option est false
.
Installer les packages :
yarn
Démarrer le terrain de jeu de développement :
yarn start
Commande de construction :
yarn build
Veuillez ouvrir un problème afin que nous puissions commencer à discuter. Toute aide pour améliorer la bibliothèque est la bienvenue :).