AnaSayfa c# c# Levenshtein Algoritması
c#

c# Levenshtein Algoritması

548

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

İLGİLİ MAKALE  programlama-autocad ve aklınıza gelecek tüm dersler tek link altında

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 Yorum Yazın

Ayrıca Kontrol Edin

Şu ASP.NET MVC Nedir Konusuna Açıklık Getirelim!

Microsoft bu işe sene 1996 yılında ASP ile başladı. Daha Sonra  web sayfaları, web uygulam…