-- C#, Genel

C# SIFT3 Algorithm

C# Süper hızlı kelime benzerlik kıyaslama algoritması: SIFT3 Algorithm.

Örnek kullanım;

Sift3(“yasin”, “rasim”, 5)

Çıktı : 2, yani iki kelime arasındaki fark sayısı
yasin, rasim

// @yasinkuyu
// 27/04/2014

/// <summary>
/// Super Fast and Accurate string distance algorithm: Sift3 in C#
/// </summary>
/// <param name="s1">string source</param>
/// <param name="s2">string target</param>
/// <param name="maxOffset"></param>
/// <returns></returns>

public static float Sift3(string s1, string s2, int maxOffset)
{

    if (string.IsNullOrEmpty(s1))
        return ((string.IsNullOrEmpty(s2)) ? 0 : s2.Length);

    if (string.IsNullOrEmpty(s2))
        return s1.Length;

    int c1 = 0, c2 = 0, lcs = 0;

    while ((c1 < s1.Length) && (c2 < s2.Length))
    {
        if (s1[c1] == s2[c2])
        {
            lcs++;
        }
        else
        {
            for (int i = 1; i < maxOffset; i++)
            {

                if ((c1 + i < s1.Length) && (s1[c1 + i] == s2[c2]))
                {
                    c1 += i;
                    break;
                }

                if ((c2 + i < s2.Length) && (s1[c1] == s2[c2 + i]))
                {
                    c2 += i;
                    break;
                }
            }
        }
        c1++;
        c2++;
    }
    return ((s1.Length + s2.Length) / 2 - lcs);
}

Github üzerinden takip için
https://gist.github.com/yasinkuyu/11350516

Python ile ilgilenenler için SIFT3 Python versiyonu;
https://gist.github.com/fjorgemota/3067867