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
2010-08-07 16:08:22

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
2010-08-07 17:34:54

phpkodlari.com © 2009 Herkes Php öğrenecek
Eglence ve Oyun: Gamikro