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