阈值滤波器C#的模糊匹配

时间:2010-11-03 11:11:30

标签: c# fuzzy-search fuzzy-logic

我需要实现某种形式:

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方法中实现逻辑。 有任何想法吗?也许为此目的有一个现成的解决方案?

2 个答案:

答案 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距离,以简单的方式划分为字符串的长度。