我需要实现某种形式:
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方法中实现逻辑。 有任何想法吗?也许为此目的有一个现成的解决方案?
答案 0 :(得分:9)
我喜欢Dice Coeffiecient,Levenshtein Distance,最长公共子序列以及有时双重Metaphone的组合。前三个将为您提供阈值。我更喜欢以某种方式组合它们。 YMMV。
我刚刚发布了一篇博客帖子,其中每个帖子都有一个名为Four Functions for Finding Fuzzy String Matches in C# Extensions的C#实现。
答案 1 :(得分:1)
您需要Levenshtein Distance Algorithm来查找如何通过插入,删除和修改操作从一个字符串转到另一个字符串。您的fuzzyMatchScoreThreshold是一个Levenshtein距离,以简单的方式划分为字符串的长度。