2010-11-03 31 views
8

tengo que aplicar algún tipo de esto:coincidencia aproximada con filtro umbral de C#

string textToSearch = "Extreme Golf: The Showdown"; 
string textToSearchFor = "Golf Extreme Showdown"; 
int fuzzyMatchScoreThreshold = 80; // One a 0 to 100 scale 
bool searchSuccessful = IsFuzzyMatch(textToSearch, textToSearchFor, fuzzyMatchScoreThreshold); 
if (searchSuccessful == true) 
{ 
    -- we have a match. 
} 

Aquí está la función de código auxiliar escrito en C#:

public bool IsFuzzyMatch (string textToSearch, string textToSearchFor, int fuzzyMatchScoreThreshold) 
{ 
    bool isMatch = false; 
    // do fuzzy logic here and set isMatch to true if successful match. 
    return isMatch; 
} 

, pero no tengo ni idea de cómo implementar la lógica en el método IsFuzzyMatch. Alguna idea? Tal vez hay una solución preparada para este propósito?

+1

Puede calcular la [distancia de Levenshtein] (http://en.wikipedia.org/wiki/Levenshtein_distance), utilizando palabras como símbolos en lugar de caracteres, donde las palabras se consideran iguales en función de su distancia Levenshtein. Hay [muchos temas de SO] (http://stackoverflow.com/search?q= [c% 23] + Levenshtein + distancia) en la distancia de Levenshtein. – dtb

+0

Ver http://stackoverflow.com/questions/451884/similar-string-algorithm/451910#451910 –

Respuesta

1

Necesita Levenshtein Distance Algorithm para encontrar cómo pasar de una cadena a otra mediante operaciones insertar, eliminar y modificar. Usted fuzzyMatchScoreThreshold es una Distancia de Levenshtein dividida a la longitud de la cadena de manera simple.

9

Me gusta la combinación de Dice Coeffiecient, Distancia de Levenshtein, Mayor frecuencia de subsecuentes y, a veces, el Doble Metaphone. Los primeros tres le proporcionarán un valor de umbral. Prefiero combinarlos de alguna manera. YMMV.

Acabo de publicar una publicación de blog que tiene una implementación de C# para cada uno de estos llamados Four Functions for Finding Fuzzy String Matches in C# Extensions.

Cuestiones relacionadas