Крошечная легкая библиотека для нечеткого поиска.
Я создал эту библиотеку в результате изучения алгоритма расстояния Левенштейна для расчета минимального количества односимвольных правок (вставок, удалений или замен), необходимых для преобразования одного слова в другое Владимира Левенштейна.
Примечание
Примечание. Библиотека находится на очень ранней стадии, поэтому, если вы хотите помочь ее улучшить, откройте проблему.
Вы можете проверить демо здесь.
с yarn
yarn add fuzzify
с 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 ) ;
API search
выдает приблизительно совпадающие строки с переданным запросом в приведенном ниже формате.
Атрибуты | Описание |
---|---|
текст | Целевая строка, с которой сопоставляется запрос. |
расстояние | Минимальное количество правок (Вставка/Удаление/Замены), необходимое для преобразования запроса в целевой текст. |
[
{
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
— определяет, следует ли возвращать в ответе indices
, по которым совпадают символы. Каждый элемент match
состоит из двух индексов —
Пример ?
query = "ala" , target string = "Australia"
matches : [
[ 0 , 5 ] ,
[ 1 , 6 ] ,
[ 2 , 8 ] ,
] ,
В приведенном выше примере? совпадения найдены
a
в 0th
индексе в ala
совпадает с символом a
в 5th
индексе в Australia
l
в 1st
индексе в ala
совпадает с персонажем a
в 6th
индексе в Australia
a
на 2nd
индексе в ala
совпадает с персонажем a
на 8th
индексе в Australia
Полный ответ будет?
[
{
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
Определяет, следует ли добавлять баллы к результату. Оценка 1
означает точное совпадение, однако оценка 0
означает отсутствие совпадения, и эти варианты удаляются из результата. Если вы хотите получить в результате все варианты, пожалуйста, откройте тему и давайте обсудим.
caseSensitive
Определяет, должен ли запрос учитывать регистр или нет. По умолчанию эта опция имеет значение false
.
Установить пакеты:
yarn
Начать разработку игровой площадки:
yarn start
Команда сборки:
yarn build
Пожалуйста, откройте тему, чтобы мы могли начать обсуждение. Любая помощь по улучшению библиотеки приветствуется :).