2010-03-31 23 views
6

¿Podría alguien darme un ejemplo sobre cómo hacer la concordancia difusa de dos cadenas usando Lucene.NET (o usando la versión Java de Lucene, o en cualquier otro idioma que tenga puerto de Lucene).Lucene.NET (Strings fuzzy matching)

Respuesta

5

¿Podría ser un poco más específico sobre lo que quiere decir con la coincidencia difusa?

Lucene ofrece consultas difusas utilizando el operador tilde (~) y los comodines (* &?) See here

Si desea comparar la distancia de cadena de 2 cadenas, utilizando métodos como Levenshtein, Jaro-Winkler etc. es mejor utilizar una biblioteca separada como SimMetrics. Uso Simmetrics en mi sitio de producción y funciona fabuloso.

SimMetricsMetricUtilities.Levenstein ls = new SimMetricsMetricUtilities.Levenstein(); //compare string 1, string 2 
double sim = ls.GetSimilarity(string_1, string_2); 
if(sim > [some value]) 
{ 
//do something 
} 
+0

Gracias por su respuesta señor. Tienes razón, quiero comparar dos cadenas usando el algoritmo de Levenshtein. ¿Podrías darme un ejemplo de cómo haces borrosa dos cadenas usando SimMetrics? – user306080

+1

es realmente muy recta hacia adelante: 1. Añadir una referencia a la DLL Simmetrics en su proyecto 2. En el método en el que desea ejecutar la similitud, ls SimMetricsMetricUtilities.Levenstein = new SimMetricsMetricUtilities.Levenstein(); // comparar cadena 1, cadena 2 double sim = js.GetSimilarity (string_1, string_2); si (SIM> [algún valor]) { // hacer algo} – Mikos

+0

el único problema que veo con esto, es que se hace el juego después de recibir los resultados de Lucene. – Dementic