Uma pequena biblioteca leve para Fuzzy Search.
Fiz esta biblioteca como resultado de aprender sobre o algoritmo Levenshtein Distance para calcular o número mínimo de edições de um único caractere (inserções, exclusões ou substituições) necessárias para transformar uma palavra em outra por Vladimir Levenshtein.
Observação
Nota: A biblioteca está em um estágio muito inicial, então se você quiser ajudar a melhorá-la, abra um issue.
Você pode conferir a demonstração aqui.
com yarn
yarn add fuzzify
com 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 ) ;
A API search
fornece strings correspondentes aproximadas com a consulta passada no formato abaixo.
Atributos | Descrição |
---|---|
texto | A string de destino com a qual a consulta é correspondida |
distância | O número mínimo de edições (inserção/exclusão/substituições) necessárias para transformar a consulta em 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 se os indices
nos quais os caracteres correspondem devem ser retornados na resposta. Cada elemento match
consiste em dois índices -
Exemplo ?
query = "ala" , target string = "Australia"
matches : [
[ 0 , 5 ] ,
[ 1 , 6 ] ,
[ 2 , 8 ] ,
] ,
No exemplo acima? correspondências são encontradas
a
no índice 0th
em ala
corresponde ao caractere a
no 5th
índice na Australia
l
no 1st
índice em ala
corresponde ao caractere a
no 6th
índice na Australia
a
no 2nd
índice em ala
corresponde ao caractere a
no 8th
índice na Australia
A resposta completa seria?
[
{
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 se uma pontuação deve ser adicionada ao resultado. Uma pontuação 1
significa uma correspondência exata, porém uma pontuação 0
significa nenhuma correspondência e essas opções são removidas do resultado. Se você deseja obter todas as opções no resultado, abra um problema e vamos discutir.
caseSensitive
Determina se a consulta deve diferenciar maiúsculas de minúsculas ou não. Por padrão, esta opção é false
.
Instale pacotes:
yarn
Comece o playground de desenvolvimento:
yarn start
Comando de construção:
yarn build
Abra um problema para que possamos começar a discutir. Qualquer ajuda para melhorar a biblioteca é bem vinda :).