68 votes

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

Il y a des questions similaires, 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 indexation.

La réponse que j'ai marquée comporte deux algorithmes très faciles, et l'un d'entre eux utilise également LINQ, donc c'est parfait.

6 votes

Pourquoi ce hors-sujet m'échappe. L'OP demande s'il y a une fonction dans une bibliothèque qui prend en charge le SO en profondeur.

33voto

George Mauer Points 22685

Mise en œuvre de la distance de Levenshtein :

J'ai un projet .NET 1.1 dans lequel j'utilise cette dernière. C'est simpliste, mais cela fonctionne parfaitement pour ce dont j'ai besoin. Si je me souviens bien, il a fallu l'ajuster un peu, mais rien qui ne soit pas évident.

2 votes

Pourquoi dites-vous "Utiliser LINQ" ? Aucune de ces implémentations n'utilise Linq...

1 votes

En fait, ces implémentations sont identiques, sauf que la dernière utilise Substring, ce qui est beaucoup plus lent que d'utiliser l'indexeur car il crée de nouvelles instances String à chaque fois...

0 votes

En effet, vous avez raison. J'aurais pu jurer qu'il y avait un peu d'amour pour LINQ, ou au moins que le titre affirmait que c'était LINQy ou quelque chose comme ça.

30voto

Zaffiro Points 2004

Vous pouvez également consulter la très impressionnante bibliothèque intitulée Sam's String Metrics https://github.com/StefH/SimMetrics.Net . cela inclut une foule d'algorithmes.

  • distance de Hamming
  • distance de Levenshtein
  • Distance de Needleman-Wunch ou Algorithme de Sellers
  • Distance Smith-Waterman
  • Distance de Gotoh ou distance Smith-Waterman-Gotoh
  • Distance entre blocs ou distance L1 ou distance entre blocs urbains
  • Distance de Monge Elkan
  • Distance métrique de Jaro
  • Jaro Winkler
  • Métrique de distance SoundEx
  • Coefficient de concordance
  • Coefficient de Dice
  • Similitude de Jaccard ou coefficient de Jaccard ou coefficient de Tanimoto
  • Coefficient de chevauchement
  • Distance euclidienne ou distance L2
  • Similitude en cosinus
  • Distance variationnelle
  • Distance de Hellinger ou distance de Bhattacharyya
  • Rayon d'information (divergence Jensen-Shannon)
  • Moyenne harmonique
  • Divergence d'inclinaison
  • Probabilité de confusion
  • Tau
  • Métrique Fellegi et Sunters (SFS)
  • TFIDF ou TF/IDF
  • FastA
  • BlastP
  • Correspondances maximales
  • q-gram
  • Algorithmes Ukkonen

14 votes

Le lien dans cette réponse me donne une erreur 403. Vous pouvez utiliser le La machine à remonter le temps à la place.

0 votes

Je pense que la version .NET de la bibliothèque mentionnée ci-dessus est aquí . Après l'avoir converti en Visual Studio 2010, et mis à jour les références NUnit, il se construit. Il passe également 87 tests.

1 votes

J'ai trouvé une version .net de cette bibliothèque sur SimMetrics.Net sur GitHub . La même chose que la suggestion de @dalenewman, mais sur github peut-être ?

14voto

Tyler Jensen Points 541

Ils ne sont pas de ma propre invention, mais ce sont mes préférés et je viens d'en parler sur mon blog et de publier mes propres versions modifiées du coefficient de dés, de la distance de Levenshtein, de la plus longue suite commune et du double métaphon dans un article de blog intitulé Quatre fonctions pour trouver des correspondances de chaînes floues en C# Extensions .

1 votes

Ils sont prêts à l'emploi dans une classe que vous pouvez simplement intégrer à votre projet. C'est la méthode de l'homme facile.

0 votes

Code maintenant sur GitHub github.com/tylerjensen/duovia-fuzzystrings

0 votes

Mise à jour du lien vers l'article de blog : tsjensen.com/blog/post/2011/05/27/

2voto

Jason Jackson Points 11563

Avez-vous jeté un coup d'œil à Lucene.net ? Il s'agit d'un portage de l'API du moteur de recherche Java Lucene sur 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 croyez pas que ma suggestion soit basée sur une grande expérience. Je l'ai vu dans le livre Outils puissants pour les développeurs Windows et l'a pris pour un essai de conduite. Vous pouvez regarder leur Documentation de l'API pour voir s'il offre quelque chose comme la recherche floue que vous recherchez.

0 votes

Pouvez-vous nous dire comment obtenir le degré de similarité en utilisant Lucene ?

0 votes

Désolé, je ne l'ai pas utilisé professionnellement. Comme je l'ai mentionné dans mon message, j'ai juste joué avec, probablement vers 2007/2008.

0 votes

Peut-être que le livre Lucene en action, 2ed pourrait dire comment obtenir le degré de similarité.

1voto

Ed Schwehm Points 1323

Ce site document de projet de code dispose d'une fonction de similarité des chaînes de caractères utilisant le distance de Levenshtein .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X