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.

$a='çeşme';
$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ı:

$aranan = 'aarmuut';

$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 ?

Her programcı birgün Php yi tadacaktır
07-08-2010 16:08

    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:

    SELECT * FROM tablo WHERE SOUNDEX(sutunadi) = SOUNDEX("$aranan");

    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

    Her programcı birgün Php yi tadacaktır
    07-08-2010 17:34

      www.Phpkodlari.com © 2009 Herkes Php öğrenecek
      Web tasarım ve eğitim kaynağınız.