查找两个字符串中最接近的匹配项(模糊匹配项)

时间:2019-05-31 11:15:21

标签: c# string find match equals

我正在匹配一个字符串列表。字符串几乎相同,或者有时可能会有拼写错误,这取决于客户的用户输入错误,除了获得最接近的匹配之外,我们无能为力。

尽管我想知道是否有更好,更快和更可靠的方法,但我具有以下功能,效果很好。

这是我从循环中调用的函数:

    public static bool FuzzyMatch( string text1, string text2)
    {
        //Basically .ToLowers() and removes any end characters.
        text1 = filterHorseName(text1);
        text2 = filterHorseName(text2);

        int match = LevenshteinDistance(text1, text2);

        return match < 3;
    }

这是我在网上发现的LevenshteinDistance函数,效果似乎很好:

  public static int LevenshteinDistance(string s, string t)
    {
        int n = s.Length;
        int m = t.Length;
        int[,] d = new int[n + 1, m + 1];
        if (n == 0)
        {
            return m;
        }
        if (m == 0)
        {
            return n;
        }
        for (int i = 0; i <= n; d[i, 0] = i++)
            ;
        for (int j = 0; j <= m; d[0, j] = j++)
            ;
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= m; j++)
            {
                int cost = (t[j - 1] == s[i - 1]) ? 0 : 1;
                d[i, j] = Math.Min(
                    Math.Min(d[i - 1, j] + 1, d[i, j - 1] + 1),
                    d[i - 1, j - 1] + cost);
            }
        }
        return d[n, m];
    }

显然,它返回的数字越小,从0开始的匹配效果越好。如您所见,我在3以下进行匹配。

干杯。

0 个答案:

没有答案