2010-11-03 2 views
8

мне нужно реализовать какую-то это:Fuzzy Matching с порога фильтра 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. 
} 

Вот функция заглушки написана в 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; 
} 

Но у меня нет ни малейшего представления, как реализовать логику в методе IsFuzzyMatch. Любые идеи? Возможно, для этого есть готовое решение?

+1

Вы можете рассчитать расстояние [Левенштейн] (http://en.wikipedia.org/wiki/Levenshtein_distance), используя слова в качестве символов вместо символов, где слова считаются равными на основе их расстояния Левенштейна. Есть [много тем SO] (http://stackoverflow.com/search?q= [c% 23] + Levenshtein + distance) на расстоянии Левенштейна. – dtb

+0

См. Http://stackoverflow.com/questions/451884/similar-string-algorithm/451910#451910 –

ответ

1

Вам нужно Levenshtein Distance Algorithm найти как перейти от одной строки к другой с помощью операций вставить, удалить и изменить. Вы fuzzyMatchScoreThreshold - это расстояние Левенштейна, разделенное на длину строки простым способом.

9

Мне нравится комбинация Dice Coffffient, Levenshtein Distance, Longest Common Subsequence, а иногда и Double Metaphone. Первые три предоставят вам пороговое значение. Я предпочитаю их комбинировать. YMMV.

Я только что разместил сообщение в блоге, которое имеет реализацию C# для каждого из них, называемого Four Functions for Finding Fuzzy String Matches in C# Extensions.