¿Hay alguna biblioteca de Fuzzy Search o String Similarity Functions escritas para C #?

Hay una pregunta similar, pero no con respecto a las bibliotecas de C # que puedo usar en mi código fuente.

Gracias por toda tu ayuda.

Ya he visto lucene, pero necesito algo más fácil para buscar cadenas similares y sin la sobrecarga de la parte de indexación.

La respuesta que marqué tiene dos algoritmos muy fáciles, y uno también usa LINQ, así que es perfecto.

Implementación a distancia de Levenshtein:

  • Usar LINQ (no realmente, ver comentarios)
  • No usando LINQ

Tengo un proyecto .NET 1.1 en el que utilizo este último. Es simplista, pero funciona perfectamente para lo que necesito. Por lo que recuerdo, necesitaba un poco de ajuste, pero nada que no fuera obvio.

también puede ver la impresionante biblioteca titulada Sam’s String Metrics http://sourceforge.net/projects/simmetrics/files/ . esto incluye una gran cantidad de algoritmos.

  • Hamming distancia
  • Distancia Levenshtein
  • Distancia Needleman-Wunch o Algoritmo Sellers
  • Smith-Waterman distancia
  • Distancia de Gotoh o distancia de Smith-Waterman-Gotoh
  • Distancia del bloque o distancia L1 o distancia del bloque de la ciudad
  • Distancia Monge Elkan
  • Jaro distancia métrica
  • Jaro Winkler
  • Métrica de distancia SoundEx
  • Coeficiente de coincidencia
  • Coeficiente de dados
  • Coeficiente de Jaccard o coeficiente de Jaccard o coeficiente de Tanimoto
  • Coeficiente de superposición
  • Distancia euclidiana o distancia L2
  • Similitud coseno
  • Distancia variable
  • Distancia Hellinger o distancia Bhattacharyya
  • Radio de información (divergencia Jensen-Shannon)
  • Significado armonico
  • Divergencia oblicua
  • Probabilidad de Confusión
  • Tau
  • Métrico Fellegi y Sunters (SFS)
  • TFIDF o TF / IDF
  • FastA
  • BlastP
  • Partidos máximos
  • q-gram
  • Algoritmos de Ukkonen

No son mi propia invención, pero son mis favoritos y acabo de escribir sobre ellos y publiqué mis propias versiones modificadas de Coeficiente de dados, distancia de Levenshtein, subsecuencia común más larga y doble metafonía en una publicación de blog llamada Cuatro funciones para encontrar secuencias borrosas. Coincide con las extensiones C # .

¿Has echado un vistazo a Lucene.net ? Es un puerto de la API del motor de búsqueda Java Lucene para la plataforma .Net. Esa biblioteca ofrece mucha funcionalidad de búsqueda. Jugué con eso hace un año o así, así que no tomes mi sugerencia en base a toneladas de experiencia. Lo vi en el libro Windows Developer Power Tools y lo tomé para una prueba de manejo. Puede consultar su documentación API para ver si ofrece algo parecido a la búsqueda difusa que busca.

Echa un vistazo aquí.

Definitivamente vale la pena echar un vistazo por ti mismo.

http://en.wikipedia.org/wiki/Edit_distance

Existe el siguiente algoritmo de distancia de Levenshtein que asigna un valor a la similitud de dos cadenas (bueno, la diferencia en realidad), que podría usarse para construir sobre: http://www.merriampark.com/ldcsharp.htm

El Proyecto Beagle para Linux está escrito en c # (mono) y es una herramienta de búsqueda de escritorio de google. Puede tener algún código para este tipo de coincidencia de cadenas.

Si recuerdo correctamente, usa la biblioteca Lucene para buscar y recuperar datos. Tal vez eso también puede ser útil para su proyecto.

He usado “Diccionario de árbol de búsqueda ternario en C #” ( http://www.codeproject.com/KB/recipes/tst.aspx ) para buscar cadenas similares.

Saludos, Patricio