Je recherche une bibliothèque JavaScript de recherche floue pour filtrer un tableau. J'ai essayé d'utiliser fuzzyset.js et fuse.js , mais les résultats sont terribles (il existe des démos que vous pouvez essayer sur les pages liées).
Après avoir lu quelques lectures sur la distance de Levenshtein, cela me semble être une mauvaise approximation de ce que les utilisateurs recherchent lorsqu'ils tapent. Pour ceux qui ne le savent pas, le système calcule le nombre d' insertions , de suppressions et de substitutions nécessaires pour faire correspondre deux chaînes.
Un défaut évident, qui est fixé dans le modèle Levenshtein-Demerau, est que les deux blub et seins sont considérés également semblable à l' ampoule (chacun nécessitant deux substitutions). Il est clair, cependant, que l' ampoule ressemble plus à blub qu'à boob , et le modèle que je viens de mentionner le reconnaît en permettant des transpositions .
Je veux utiliser cela dans le contexte de la complétion de texte, donc si j'ai un tableau ['international', 'splint', 'tinder']
et que ma requête est int , je pense que l' international devrait se classer plus haut que splint , même si le premier a un score (plus élevé = pire) de 10 contre ce dernier 3.
Donc, ce que je recherche (et je créerai s'il n'existe pas), c'est une bibliothèque qui fait ce qui suit:
- Pondère les différentes manipulations de texte
- Pondère chaque manipulation différemment en fonction de l'endroit où elles apparaissent dans un mot (les premières manipulations étant plus coûteuses que les manipulations tardives)
- Renvoie une liste de résultats triés par pertinence
Quelqu'un at-il rencontré quelque chose comme ça? Je me rends compte que StackOverflow n'est pas l'endroit où demander des recommandations logicielles, mais implicite (plus maintenant!) Dans ce qui précède est: est-ce que je pense à cela de la bonne façon?
Éditer
J'ai trouvé un bon article (pdf) sur le sujet. Quelques notes et extraits:
Les fonctions de distance d'édition affine attribuent un coût relativement inférieur à une séquence d'insertions ou de suppressions
la fonction de distance de Monger-Elkan (Monge & Elkan 1996), qui est une variante affine de la fonction de distance de Smith-Waterman (Durban et al.1998) avec des paramètres de coût particuliers
Pour la distance Smith-Waterman (wikipedia) , "Au lieu de regarder la séquence totale, l'algorithme Smith-Waterman compare des segments de toutes les longueurs possibles et optimise la mesure de similarité." C'est l'approche n-gramme.
Une métrique largement similaire, qui n'est pas basée sur un modèle de distance d'édition, est la métrique Jaro (Jaro 1995; 1989; Winkler 1999). Dans la littérature sur le couplage d'enregistrements, de bons résultats ont été obtenus en utilisant des variantes de cette méthode, qui est basée sur le nombre et l'ordre des caractères communs entre deux chaînes.
Une variante de ceci due à Winkler (1999) utilise également la longueur P du préfixe commun le plus long
(semble être principalement destiné aux chaînes courtes)
À des fins de complétion de texte, les approches Monger-Elkan et Jaro-Winkler semblent avoir le plus de sens. L'ajout de Winkler à la métrique Jaro pondère plus fortement les débuts des mots. Et l'aspect affine de Monger-Elkan signifie que la nécessité de compléter un mot (qui est simplement une séquence d'ajouts) ne le défavorisera pas trop.
Conclusion:
le classement TFIDF a obtenu les meilleurs résultats parmi plusieurs mesures de distance basées sur des jetons, et une mesure de distance d'édition affine-gap réglée proposée par Monge et Elkan a obtenu les meilleurs résultats parmi plusieurs mesures de distance d'édition de chaîne. Une métrique de distance étonnamment bonne est un schéma heuristique rapide, proposé par Jaro et étendu plus tard par Winkler. Cela fonctionne presque aussi bien que le schéma Monge-Elkan, mais c'est un ordre de grandeur plus rapide. Un moyen simple de combiner la méthode TFIDF et le Jaro-Winkler est de remplacer les correspondances de jetons exactes utilisées dans TFIDF par des correspondances de jetons approximatives basées sur le schéma Jaro-Winkler. Cette combinaison fonctionne légèrement mieux que Jaro-Winkler ou TFIDF en moyenne, et parfois beaucoup mieux. Il est également proche en termes de performances d'une combinaison savante de plusieurs des meilleures mesures prises en compte dans cet article.