Eine kleine, leichtgewichtige Bibliothek für Fuzzy Search.
Ich habe diese Bibliothek erstellt, nachdem ich von Vladimir Levenshtein den Levenshtein-Distanzalgorithmus kennengelernt hatte, um die Mindestanzahl der Einzelzeichenbearbeitungen (Einfügungen, Löschungen oder Ersetzungen) zu berechnen, die erforderlich sind, um ein Wort in ein anderes umzuwandeln.
Notiz
Hinweis: Die Bibliothek befindet sich in einem sehr frühen Stadium. Wenn Sie also zur Verbesserung beitragen möchten, eröffnen Sie bitte ein Problem.
Sie können die Demo hier ansehen.
mit yarn
yarn add fuzzify
mit 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 ) ;
Die search
API gibt ungefähr übereinstimmende Zeichenfolgen mit der übergebenen Abfrage im folgenden Format aus.
Attribute | Beschreibung |
---|---|
Text | Die Zielzeichenfolge, mit der die Abfrage abgeglichen wird |
Distanz | Die Mindestanzahl an Bearbeitungen (Einfügungen/Löschungen/Ersetzungen), die erforderlich sind, um die Abfrage in Zieltext umzuwandeln. |
[
{
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
– Bestimmt, ob die indices
, bei denen Zeichen übereinstimmen, in der Antwort zurückgegeben werden sollen. Jedes match
Element besteht aus zwei Indizes -
Beispiel ?
query = "ala" , target string = "Australia"
matches : [
[ 0 , 5 ] ,
[ 1 , 6 ] ,
[ 2 , 8 ] ,
] ,
Im obigen Beispiel? Übereinstimmungen gefunden werden
a
am 0th
Index in ala
stimmt mit Zeichen a
am 5th
Index in Australia
übereinl
am 1st
Index stimmt ala
mit dem Zeichen a
am 6th
Index in Australia
übereina
am 2nd
Index in ala
stimmt mit Zeichen a
am 8th
Index in Australia
übereinDie vollständige Antwort wäre ?
[
{
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
Legt fest, ob dem Ergebnis eine Punktzahl hinzugefügt werden soll. Ein Wert von 1
bedeutet eine genaue Übereinstimmung, ein Wert von 0
hingegen bedeutet keine Übereinstimmung und diese Optionen werden aus dem Ergebnis entfernt. Wenn Sie alle Optionen im Ergebnis erhalten möchten, öffnen Sie bitte ein Problem und lassen Sie uns darüber diskutieren.
caseSensitive
Legt fest, ob bei der Abfrage die Groß-/Kleinschreibung beachtet werden soll oder nicht. Standardmäßig ist diese Option false
.
Pakete installieren:
yarn
Entwicklungsspielplatz starten:
yarn start
Build-Befehl:
yarn build
Bitte eröffnen Sie ein Problem, damit wir mit der Diskussion beginnen können. Jede Hilfe zur Verbesserung der Bibliothek ist sehr willkommen :).