web-dev-qa-db-fra.com

Existe-t-il des bibliothèques de recherche floue ou de fonctions de similarité de chaînes écrites pour C #?

Il y a une question similaire, mais pas concernant les bibliothèques C # que je peux utiliser dans mon code source.

Merci à tous pour votre aide.

J'ai déjà vu lucene, mais j'ai besoin de quelque chose de plus facile pour rechercher des chaînes similaires et sans la surcharge de la partie d'indexation.

La réponse que j'ai notée a deux algorithmes très faciles, et l'un utilise aussi LINQ, donc c'est parfait.

63
Luca Molteni

Implémentation de la distance Levenshtein:

J'ai un projet .NET 1.1 dans lequel j'utilise ce dernier. C'est simpliste, mais fonctionne parfaitement pour ce dont j'ai besoin. D'après ce dont je me souviens, il fallait un peu de peaufinage, mais rien de ce qui n'était pas évident.

31
George Mauer

vous pouvez également consulter la bibliothèque très impressionnante intitulée Sam's String Metrics http://sourceforge.net/projects/simmetrics/files/ . cela comprend une multitude d'algorithmes.

  • Distance de Hamming
  • Distance Levenshtein
  • Distance Needleman-Wunch ou algorithme de vendeurs
  • Distance Smith-Waterman
  • Distance Gotoh ou distance Smith-Waterman-Gotoh
  • Distance de bloc ou distance L1 ou distance de bloc de ville
  • Distance Monge Elkan
  • Mesure de distance Jaro
  • Jaro Winkler
  • Métrique de distance SoundEx
  • Coefficient d'appariement
  • Coefficient de dés
  • Similitude de Jaccard ou coefficient de Jaccard ou coefficient de Tanimoto
  • Coefficient de chevauchement
  • Distance euclidienne ou distance L2
  • Similitude cosinus
  • Distance variationnelle
  • Distance Hellinger ou distance Bhattacharyya
  • Rayon d'information (divergence Jensen-Shannon)
  • Moyenne harmonique
  • Divergence asymétrique
  • Probabilité de confusion
  • Tau
  • Mesure Fellegi et Sunters (SFS)
  • TFIDF ou TF/IDF
  • FastA
  • BlastP
  • Correspondances maximales
  • q-gram
  • Algorithmes Ukkonen
28
Zaffiro

Ils ne sont pas ma propre invention, mais ils sont mes favoris et je viens de bloguer à leur sujet et j'ai publié mes propres versions modifiées de Dice Coefficient, Levenshtein Distance, Longest Common Subsequence et Double Metaphone dans un article de blog intitulé Four Functions pour trouver des correspondances de chaînes floues dans les extensions C # .

13
Tyler Jensen

Avez-vous jeté un coup d'œil à Lucene.net ? Il s'agit d'un port de l'API Java Lucene Search Engine vers la plate-forme .Net. Cette bibliothèque offre de nombreuses fonctionnalités de recherche. J'ai joué avec elle il y a environ un an, alors ne le faites pas prendre ma suggestion comme basée sur des tonnes d'expérience. Je l'ai vu dans le livre Windows Developer Power Tools et l'ai pris pour un essai routier. Vous pourriez regarder à travers leur documentation API pour voir si elle offre quelque chose comme la recherche floue que vous recherchez.

2
Jason Jackson

Ce document de projet de code a une fonction de similitude de chaîne utilisant la distance Levenshtein .

1
Ed Schwehm

Il existe l'algorithme de distance Levenshtein suivant qui attribue une valeur à la similitude de deux chaînes (enfin, la différence en fait), qui pourrait être utilisée pour s'appuyer sur: http://www.merriampark.com/ldcsharp.htm

1
benefactual

J'ai utilisé "Ternary Search Tree Dictionary en C #" ( http://www.codeproject.com/KB/recipes/tst.aspx ) pour rechercher des chaînes similaires.

Cordialement, Patricio

0
patriciovidal

Beagle Project pour Linux est écrit en c # (mono) et est un outil de recherche de type google-desktop. Il peut contenir du code pour ce type de correspondance de chaînes.

Si je me souviens bien, il utilise la bibliothèque Lucene pour rechercher et récupérer des données. Peut-être que cela peut aussi être utile pour votre projet.

0
Isak Savo