Ana içeriğe atla

Levenshtein Distance - Kelime Benzerlik Algoritması

Levenshtein Distance algoritması, bizlere iki kelimenin birbirine dönüşümü için ne kadar işlem yapılması gerektiğini veren bir algoritmadır. Örneğin "kitap" ve "katip" kelimelerini ele alalım. "kitap" kelimesini "katip" kelimesine dönüştürmek için yapmamız gereken ilk işlem, 2. sıradaki "i" harfini "a" yapmaktır. Sonra ikinci işlem 4. sıradaki "a" harfini "i" yapmaktır. Yani "kitap" kelimesini "katip" kelimesine dönüştürmek için 2 işlem gerekir. Peki bu algoritma ne işe yarar?

Bu algoritma genelde arama motorlarında,kelime yazım yanlışını tespit eden programlarda kullanılır. Mesela biz Google üzerinde bir kelime ararken karşımıza çıkan "bunu mu demek istediniz?" ile bize gösterilen öneri ifadesi, bu algoritma sonucu tespit edilir. Yani bizim yazdığımız kelime ile Google tabanında bulunan kelimeler karşılaştırılır. Hangi kelime için dönüşüm sayısı az ise, o kelime bize önerilen kelimedir. Yani bu algoritma sonucunda elde ettiğimiz değer ne kadar küçükse, kelimeler birbirine o kadar benzerdir. Tabi sonuç 0 ise, kelimeler aynıdır demek oluyor.

Bu algoritma matrisler üzerinde çalışır. Şimdi örnek iki kelime üzerinde çalışalım. "kitap" ve "katip". Bu durumda önce şu şekilde bir yapı oluşturulur.


Daha sonra, sıra ile satir ve sütun karşılaştırması yapılır. İlk satır ve ilk sütunlar için karşılaştırma yapmamıza gerek yok, çünkü zaten değerler girilmiş. O yüzden 2. harfden itibaren karşılaştırmaya başlayacağız. "kitap" kelimesinin 2. harfi ile "katip" kelimesinin 2. harfini karşılaştıralım.



Gördüğünüz gibi bu harfler eşit değil. Bu durumda kırmızı kutuya yerleştirmemiz gereken sayıyı şu şekilde belirliyoruz. Kırmızı renkli kutunun sol,sol-üst,ve üst kutularındaki değerlere 1 ekleyip en küçük olanı kırmızı kutuya yazıyoruz. Bu durumda bu kutuya 1 yazmamız gerekir. Şimdi "kitap" kelimesinin 2. harfi ile "katip" kelimesinin 3. harfini karşılaştıralım. Bu iki harf de eşit olmadığı için, bir önceki adımı aynen uyguluyoruz. Tablonun son hali bu şekilde.



Şimdi "kitap" kelimesinin 2. harfi ile "katip" kelimesinin 4. harfini karşılaştıralım. Bu iki harf eşit olduğu için, burada yapacağımız işlem farklı. Burada, bu iki harfin kesiştiği kutunun sol-üst tarafında bulunan kutudaki değeri alıyoruz ve kesişim kutusuna koyuyoruz. Tablo bu şekli almış oluyor böylece


Tüm bu işlemleri, satır ve sutunları bitirene kadar yaptığımızda tablomuz şu şekilde olacaktır.



Kırmızı ile işaretlediğim kutu, sonucumuz olacaktır. Yani "kitap" ve "katip" kelimelerini birbirine dönüştürmek için 2 işlem yapmamız gerekiyormuş.

Şimdi bu algoritmanın Java ile uygulanmasını sağlayan kodu vereyim



Yorumlar

Bu blogdaki popüler yayınlar

Python Subprocess

subprocess modülü, yeni bir process oluşturmayı sağlayan, bunların girdi-çıktılarını ele alma imkânı veren ve dönüş kodlarını almayı sağlayan bir modüldür. Yani daha basit bir şekilde, program içinde program çalıştırmaya imkan veren bir modüldür. Subprocess Modülünün Kullanımı subprocess basit bazı process'leri kullanmak için birkaç tane fonksiyon sunuyor. Daha karmaşık bir process çalıştırmak isterseniz, Popen sınıfını kullanabilirsiniz. Bunlara detaylı bir şekilde değinmeye çalışacağız. Şimdi basit fonksiyonları inceleyelim

Infix to postfix dönüşümü

Infix to postfix dönüşümü, operatorün ortada olduğu a+b yazım şeklini operatorün sonda olduğu ab+ yazım şekline dönüştürme işlemidir. Bu yazıda iki şekilde dönüşümden bahsedeceğim:   1) Stack yapısı kullanarak dönüştürme 2) Kağıt üstünde el ile dönüştürme    Infix gösterimi, bizler için kolay bir gösterim olsa da makineler için öyle değildir. İfadeyi okurken a + b * c işleminde önce b ile c yi çarpıp sonra da a ile toplamayı kolay bir şekilde yapabiliriz çünkü bizim ifadeyi sıra ile adım adım giderek okuma zorunluluğumuz yok. Önce b*c nin öncelikle olduğunu görerek oradan başlar, sonra a ile kolayca toplarız.

CLAHE (Contrast Limited Adaptive Histogram Equalization) Histogram Eşitleme Tekniği

Bu yazıda CLAHE algoritmasını nasıl uygulayacağımızı ve verilen bir resmi histogram eşitlemesi için nasıl işleyeceğimizi öğreneceğiz. Bu yazıda, CLAHE algoritmasının, görüntü iyileştirme için nasıl uygulandığını göreceğiz. CLAHE, görüntü kontrast değerlerinin aşırı yüksekliği ile ilgilenen AHE algoritmasının bir varyantıdır. CLAHE, bütün resim üzerinde işlem yapmak yerine kesitler olarak adlandırılan küçük bölgeler üzerinde işlem yapar. Küçük kesitlerde yapılan işlem sonrasında oluşan yapay sınırları kaldırmak için bilinear interpolasyon işlemi uygulanarak bu küçük kesitler birleştirilerek son görüntü elde edilir.  Bu algoritma görüntü kontrastını iyileştirmek için kullanılabilir. CLAHE algoritmasını renkli görüntülere de uygulayabiliriz. Genelde HSV görüntülerin yalnızca parlaklık kanalına uygulandığı durumlarda, tüm RGB kanallara uygulamaktan çok daha başarılı sonuçlar elde etmemizi sağlar.  CLAHE algoritması uygulanırken 2 parametre önemlidir. Birincisi clipLimit parametres...