C#中的模糊匹配与阈值过滤器

10

我需要实现以下某种功能:

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距离,其中单词的相等性基于它们的Levenshtein距离。关于Levenshtein距离,有许多SO主题 - dtb
请查看https://dev59.com/xHRB5IYBdhLWcg3w9b59#451910。 - Jeff Moser
2个回答

9

我喜欢将Dice Coeffiecient、Levenshtein Distance、Longest Common Subsequence和Double Metaphone结合起来使用。前三个可以提供一个阈值,我更喜欢以某种方式将它们结合起来。YMMV。

我刚刚发布了一篇博客文章,其中包含每个函数的C#实现,称为Four Functions for Finding Fuzzy String Matches in C# Extensions


1

你需要使用Levenshtein Distance Algorithm算法来查找如何通过插入、删除和修改操作从一个字符串转换为另一个字符串。你的模糊匹配分数阈值是将Levenshtein距离简单地除以字符串长度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接