2010-11-03 46 views
8

我需要实现某种这样的:与门槛过滤器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

您可以使用单词作为符号而不是字符来计算[Levenshtein距离](http://en.wikipedia.org/wiki/Levenshtein_distance),其中基于Levenshtein距离将单词视为相等。在Levenshtein距离上有[许多SO话题](http://stackoverflow.com/search?q= [c%23] + Levenshtein +距离)。 – dtb 2010-11-03 11:15:40

+0

请参阅http://stackoverflow.com/questions/451884/similar-string-algorithm/451910#451910 – 2010-11-03 12:24:14

回答

1

你需要Levenshtein Distance Algorithm找到如何通过操作插入,删除和修改从一个字符串到另一个字符串。 FuzzyMatchScoreThreshold是Levenshtein距离,以简单的方式划分为字符串的长度。

9

我喜欢Dice Coeffiecient,Levenshtein距离,最长共同子序列的组合,有时还有Double Metaphone。前三个将为您提供一个阈值。我更喜欢以某种方式将它们结合起来。因人而异。

我刚刚发布了一篇博客文章,其中有一个名为Four Functions for Finding Fuzzy String Matches in C# Extensions的C#实现。