66 votes

C# - Comparer la similitude des chaînes

Quelle est la meilleure façon de comparer 2 chaînes pour voir à quel point elles sont similaires?

Exemples:

Ou

Ce que je recherche, c’est de déterminer à quel point la première et la deuxième chaîne de chaque paire sont similaires. J’aimerais noter la comparaison et si les cordes sont assez similaires, je les considérerais comme une paire correspondante.

Existe-t-il un bon moyen de le faire en C# ?

109voto

Martin Neal Points 1322
static class LevenshteinDistance
{
    public static int Compute(string s, string t)
    {
        if (string.IsNullOrEmpty(s))
        {
            if (string.IsNullOrEmpty(t))
                return 0;
            return t.Length;
        }

        if (string.IsNullOrEmpty(t))
        {
            return s.Length;
        }

        int n = s.Length;
        int m = t.Length;
        int[,] d = new int[n + 1, m + 1];

        // initialize the top and right of the table to 0, 1, 2, ...
        for (int i = 0; i <= n; d[i, 0] = i++);
        for (int j = 1; 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;
                int min1 = d[i - 1, j] + 1;
                int min2 = d[i, j - 1] + 1;
                int min3 = d[i - 1, j - 1] + cost;
                d[i, j] = Math.Min(Math.Min(min1, min2), min3);
            }
        }
        return d[n, m];
    }
}

11voto

ilike2breakthngs Points 145

Si quelqu’un se demandait quel est l’équivalent C# de ce que @FrankSchwieterman a publié :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X