Esistono librerie di funzioni di ricerca fuzzy o di somiglianza delle stringhe scritte per C#?[Chiuso]

StackOverflow https://stackoverflow.com/questions/83777

  •  01-07-2019
  •  | 
  •  

Domanda

Ci sono domande simili, ma non riguardanti le librerie C# che posso utilizzare nel mio codice sorgente.

Grazie a tutti per il vostro aiuto.

Ho già visto lucene, ma ho bisogno di qualcosa di più semplice per cercare stringhe simili e senza il sovraccarico della parte di indicizzazione.

La risposta che ho contrassegnato ha due algoritmi molto semplici e uno utilizza anche LINQ, quindi è perfetto.

È stato utile?

Soluzione

Implementazione a distanza di Levenshtein:

Ho un progetto .NET 1.1 in cui utilizzo quest'ultimo.È semplicistico, ma funziona perfettamente per quello di cui ho bisogno.Da quello che ricordo necessitava di qualche ritocco, ma niente che non fosse ovvio.

Altri suggerimenti

puoi anche consultare l'impressionante libreria intitolata Sam's String Metrics http://sourceforge.net/projects/simmetrics/files/.questo include una serie di algoritmi.

  • Distanza di Hamming
  • Distanza di Levenshtein
  • Distanza Needleman-Wunch o algoritmo di Sellers
  • Distanza Smith-Waterman
  • Distanza Gotoh o distanza Smith-Waterman-Gotoh
  • Distanza dell'isolato o Distanza L1 o Distanza dell'isolato
  • Distanza Monge Elkan
  • Metrica della distanza Jaro
  • Jaro Winkler
  • Metrica della distanza SoundEx
  • Coefficiente di corrispondenza
  • Il coefficiente dei dadi
  • Somiglianza di Jaccard o coefficiente di Jaccard o coefficiente di Tanimoto
  • Coefficiente di sovrapposizione
  • Distanza euclidea o distanza L2
  • Somiglianza del coseno
  • Distanza variazionale
  • Distanza Hellinger o distanza Bhattacharyya
  • Raggio di informazione (divergenza di Jensen-Shannon)
  • Media armonica
  • Divergenza obliqua
  • Probabilità di confusione
  • Tau
  • Metrica Fellegi e Sunters (SFS).
  • TFIDF o TF/IDF
  • VeloceA
  • EsplosioneP
  • Corrispondenze massime
  • q-grammo
  • Algoritmi Ukkonen

Non sono una mia invenzione, ma sono i miei preferiti e ne ho appena scritto sul blog e ho pubblicato le mie versioni ottimizzate di Dice Coefficient, Levenshtein Distance, Longest Common Subsequence e Double Metaphone in un post sul blog chiamato Quattro funzioni per trovare corrispondenze di stringhe fuzzy nelle estensioni C#.

Hai dato un'occhiata? Lucene.net?È un port dell'API del motore di ricerca Java Lucene sulla piattaforma .Net.Quella libreria offre molte funzionalità di ricerca.Ci ho giocato circa un anno fa, quindi non prendere il mio suggerimento come basato su tonnellate di esperienza.L'ho visto nel libro Strumenti avanzati per sviluppatori Windows e l'ho portato a fare un giro di prova.Potresti dare un'occhiata al loro Documentazione dell'API per vedere se offre qualcosa come la ricerca fuzzy che stai cercando.

Questo documento di progetto del codice ha una funzione di somiglianza delle stringhe che utilizza il metodo Distanza di Levenshtein.

Esiste il seguente algoritmo della distanza di Levenshtein che assegna un valore alla somiglianza di due stringhe (beh, la differenza in realtà), che potrebbe essere utilizzato su cui basarsi: http://www.merriampark.com/ldcsharp.htm

IL Progetto Beagle per Linux è scritto in C# (mono) ed è uno strumento di ricerca simile a Google Desktop.Potrebbe contenere del codice per questo tipo di corrispondenza delle stringhe.

Se ricordo bene, utilizza il file Lucene libreria per la ricerca e il recupero dei dati.Forse può essere utile anche per il tuo progetto.

Ho utilizzato "Dizionario ternario dell'albero di ricerca in C#" (http://www.codeproject.com/KB/recipes/tst.aspx) per cercare stringhe simili.

Saluti Patrizio

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top