levenshtein - php benzer kelime bulucu.
Levenshtein fonksiyonu iki kelime arasındaki benzerliği bulmada kullanılır:
örnek:
elma - alma : Bu iki kelime arasında sadece bir harf farklıdır. bu durumda Levenshtein fonksiyonu 1 değerini döndürür.
$b='gecme';
$c=levenshtein($a,$b);
echo 'fark:' ,$c;
sonuç:
fark: 2
Bu fonksiyon kullanılarak kullanıcıların yanlış yazdığı kelimeler için tavsiye çıkarılabilir (google sayfasında çıkan "Bunu mu demek istediniz" bunun gelişmiş bir versiyonudur).
Bunu mu demek istediniz algoritması:
$kelimeler = array('elma','mahmut','portakal','şeftali','armut');
$enyakin = -1;
foreach ($kelimeler as $kelime)
{
$lev = levenshtein($aranan, $kelime);
if ($lev == 0)
{
$benzer = $kelime;
$enyakin = 0;
break;
}
if ($lev <= $enyakin || $enyakin < 0)
{
$benzer = $kelime;
$enyakin = $lev;
}
}
echo "aranan kelime: $aranan <br>";
if ($enyakin == 0) {
echo "Bulundu: $benzer";
} else {
echo "Bunu mu demek istediniz: $benzer ?";
}
sonuç:
aranan kelime: aarmuut
Bunu mu demek istediniz: armut ?
kelime
Bu sistem kullanılarak yapılabileceklere örnek:
1- sitede kullanıcı adı olarak bazı engeller koyabilirsiniz:
örnek: webmaster gibi önemli bir isme benzer isim kullanmak yasaklanabilir. mesela webmastar ismini birilerinin almasını istemeyiz. bu durumda tüm ihtimalleri denemek yorucu olacaktır. bunun yerine levenshtein ile 1 uzaklığındaki kelimeleri engelleriz. bunlar 1 harf uzaklığındakiler: wibmaster, wepmaster, webmister
2- Kullanıcılara tavsiyede bulunabiliriz:
Örnek: Bu makalenin benzeri şu makaleler de var !
Bu konuda ek olarak Mysql ile gelen Soundex fonksiyonu kullanılabilir:
Mysql örneği:
Mysql fonksiyonu farklı bir mantıkta çalışıyor fakat benzer amaçla kullanılabilir.
3- Daha önce yazılmış soruları tekrar sormasını engellemek için tavsiyede bulunmakta kullanılabilir.
Ajax ile erilirse daha faydalı olacaktır.
Örnek: Bu soruya benzer şu sorular daha önce sorulmuş ve cevaplanmıştır. listeyi görmek için tıklayın