c#

c# Levenshtein Algoritması

3 dk okuma süresi
2,825

Bu Makalamizde pek bilinmeyen fakat inanılmaz işe yarayan Levenshtein Algoritmasının mantığını ve kullanımını öğreneceğiz.

Google,de arama yaparken yazdığımız yazı eksik ya da yanlış olduğunda bize doğru halini bunumu demek istediniz yazarak gösterir.

genel olarak Levenshtein bu işimize yarıyor.

Levenshtein Distance

Resimdenden anladığımız gibi yazdığımız yazıya en yakın metni tahmin olarak karşımıza çıkarıyor.

şöyle bir parantez içi bilgi de vermek gerekirse , google bizim yazdığımız yazıya göre değil kendi tahminine uygun sayfaları karşımıza çıkartıyor.

Levenshtein | Distance, iki metin ya da cümlecik arasında karşılaştırma da yapar. bu karşılaştırma bana profesyonel gelmediği için kendim bir algoritma yazdım. ilerleyen zamanlarda sizinle paylaşacağım.

bana profesyonel gelmemesinin sebebi ise matris olayı ile karşılaştırma yapması.

geleceğin mumyalaması muhendisarsivi.com 

mumyalama ile ilgili mühendislik

bu iki kelime birbirinin yanından bile geçmemesine rağmen Levenshtein %60’a yakın benzerlik tespit eder. sebebiyse matris!

Arama mantığı yukaridaki şekilde.

using System;
 
namespace UsingLevenshtein 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            TestMethod("rest", "test"); 
            TestMethod("google", "yahoo!"); 
            TestMethod("mike", "mayk"); 
            TestMethod("samantha", "sam"); 
            TestMethod("puzzle", "pzzel"); 
        }
 
        private static void TestMethod(string Source,string Target) 
        { 
            int[,] matrix3 = new int[Source.Length, Target.Length]; 
            int distance3 = Source.FindLevenshteinDistance(Target, out matrix3); 
            Console.WriteLine("{0} vs {1}\nDistance : {2}\n",Source,Target, distance3); 
            WriteToConsole(matrix3); 
        } 
        static void WriteToConsole(int[,] Matrix) 
        { 
            for (int i = 0; i < Matrix.GetLength(0); i++) 
            { 
                for (int j = 0; j < Matrix.GetLength(1); j++) 
                { 
                    Console.Write("\t{0}  ", Matrix[i, j]); 
                } 
                Console.WriteLine(); 
            } 
            Console.WriteLine(); 
        } 
    }
 
    public static class StringExtensions 
    { 
        // Genişletme metodu, karşılaştırma matrisini de out parametresi olarak döndürmektedir. 
        public static int FindLevenshteinDistance(this string Source, string Target,out int[,] Matrix) 
        { 
            int n = Source.Length; 
            int m = Target.Length;
 
            Matrix = new int[n + 1, m + 1]; // Hesaplama matrisi üretilir. 2 boyutlu matrisin boyut uzunlukları ise kaynak ve hedef metinlerin karakter uzunluklarına göre set edilir
 
            if (n == 0) // Eğer kaynak metin yoksa zaten hedef metnin tüm harflerinin değişimi söz konusu olduğundan, hedef metnin uzunluğu kadar bir yakınlık değeri mümkün olabilir 
                return m;
 
            if (m == 0) // Yukarıdaki durum hedefin karakter içermemesi halinde de geçerlidir 
                return n;
 
            // Aşağıdaki iki döngü ile yatay ve düşey eksenlerdeki standart 0,1,2,3,4...n elemanları doldurulur 
            for (int i = 0; i <= n;i++) 
                Matrix[i, 0] = i; 
             
            for (int j = 0; j <= m; j++) 
                Matrix[0, j] = j;
 
            // Kıyaslama ve derecelendirme operasyonu yapılır 
            for (int i = 1; i <= n; i++) 
                for (int j = 1; j <= m; j++) 
                { 
                    int cost = (Target[j - 1] == Source[i - 1]) ? 0 : 1; 
                    Matrix[i, j] = Math.Min(Math.Min(Matrix[i - 1, j] + 1, Matrix[i, j - 1] + 1), Matrix[i - 1, j - 1] + cost); 
                }
 
           return Matrix[n, m]; // sağ alt taraftaki hücre değeri döndürülür 
        }        
    } 
}

ekran resmi

bu makalemiz bukadar. takıldığınız bir yer olur yada ayrıntılı bilgi isterseniz info@muhendisarsivi.com’a mail atabilir yada gönderinin altına yorum yapabilirsiniz.

iyi çalışmalar..

Daha Fazla İlgili Makale Yükleyin
Daha Fazla Yük c#

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Ayrıca Kontrol Edin

FastReport Kullanımı ve Örnek Tasarım

Herkese merhaba. Uzun bir aradan sonra yazılım ile ilgili makale yazmaya tekrar başladık. …