Geçen gün üzerinde çalıştığım bir site için yeni ve daha gelişmiş bir arama motoru yazmak aklıma takıldı.Bunun için her zaman takdir ettiğim ve hayranlık duyduğum IMDb ve Google arama motorlarına benzer birşeyler yapmak için araştırmalara başladım. İstediğim şey tam olarak IMDb deki gibi film ismini yanlış yazsam dahi aradığım sonuca ulaşmamı sağlayacak bir algoritma idi. Ya da buna benzer olarak Google daki “bunu mu demek istediniz:” gibi birşeyler yapmaktı.Bunun nasıl olabileceği konusuna kafa yorarken bir taraftanda internette araştırma yapmaya devam ediyordumki birden karşıma içinde pagerank algoritması da bulunan bir arama motoru algoritması çıktı.Aslında pagerank benim ilgilendiğim bir konu değildi fakat ben yinede kodlara bir göz gezdireyim dedim.Verilen kodlar bir SQL scripti oluşturmaktaydı fakat içinde daha önce görmediğim bir SQL komutu vardı.Bu komutun adı “Soundex” idi. Bu neymiş diye bir araştırma yapayım dedim ve wikipedia daki dökümanı okudum. Bu aslında benim yapmak istediğim işi yapan bir komuttu. Hemen MySQL sunucuma bağlanıp bunun MySQL de desteklenip desteklenmediğine baktım.Bingo!.İstediğim sonuca ulaşmıştım.Fakat bir problem vardı.Bu komut sadece ingilizce dilindeki kelimelerde düzgün çalışmaktaydı.Yinede bir kaç deneme yaptım ve istediğime yakın sonuçlar elde ettim.Bu algoritmanın wikipedia daki açıklaması aşağıdaki gibidir.
Soundex, İngilizce”deki keliemelerin teleffuz biçimlerine göre hazırlanmış bir fonetik algoritmadır. Bu algoritmanın hazırlanmasındaki temel amaç; teleffuzları benzeşen kelimelerin bu yolla aynı karakter katarına (string) dönüştürülmeleri ve bu yolla benzer kelimelerin -yazımlarında fark olsa bile- tespit edilmesidir. Bunun yanında Soundex algoritması, fonetik algoritmalardan en bilineni ve en sık kullanılanı olup, bazı çevreler tarafından -yanlış bir şekilde- fonetik algoritma terimiyle aynı anlamda kullanılamaktadır.Soundex kodu ilki bir harf, diğer üçü ise rakamlardan oluşan dört karakterli bir koddur; harf olarak kelimenin ilk harfi, sayı olarak da geri kalan harflerin belirli bir kurala göre numaralandırılmasıyla ortaya çıkan sonuç alınır. Benzer teleffuzlu sözcükler ise aynı numaralarla kodlanır; örneğin, benzer telaffuzlu B, F, P ve V harfleri 1 ile kodlanır. Sesli harfler kodlama işlemini etkiler, ancak bu sesli harf kelimenin başında bulunmuyorsa ortaya çıkan sonucu asla doğrudan etkilemez.Tam algoritma aşağıdaki gibidir:Karakter katarının ilk harfini yakalayın.Eğer ilk harf “a, e, h, i, o, u, w, y” harflerinden herhangi biri değilse, bu harfleri metinden silin.Sırasıyla tüm harflere aşağıdaki numaralandırmayı yapın; b, f, p, v = 1c, g, j, k, q, s, x, z = 2d, t = 3l = 4m, n = 5r = 6Eğer numaralandırmada aynı numarayı almış iki ya da daha fazla harf yan yanaysa (ilk işlemden önce) ya da bu harflerin arasında h veya w harfi varsa (sadece Amerikan sayımında geçerli); aynı olanları atlayın.İlk dört karakteri sonuç olarak döndürün; eğer sonuç dört karakterden az çıkıyorsa, dört karakter tamamlanması için sonuna sıfırlar ekleyin. (örn. A22 → A220)
Evet wikipedia daki açıklaması bu şekilde.Aslında hala üzerinde çalışıyorum.Belki bunun türkçe destekleyen bir kopyası geliştirilebilir.Bu komutun SQL deki kullanımı da şu şekildedir.
-
SELECT * FROM TABLOISMI WHERE SOUNDEX(ALANADI) = SOUNDEX(”STRING DEGER”);
PHP de de (3 versiyonundan sonraki sürümlerde) soundex fonksiyonu mevcuttur ve verdiğiniz değerin soundex kodunu size verir.Soundex hakkında öğrendiklerim şimdilik bu kadar.Eğer yeni birşeyler daha öğrenirsem burada yazarım. Belki oturup türkçe için bi soundex geliştiririz.
Herkese iyi günler, iyi çalışmalar.












