PHP ile bunu mu demek istediniz?

makale.baslik

Daha çok arama motorlarında karşımıza çıkan, aranan değere en yakın değeri bulmamızı sağlayan levenshtein fonksiyonundan bahsedeceğim.

Sizde bu fonksiyon ile basit bir şekilde “bunu mu demek istediniz?” (did you mean?) uygulaması yapabilirsiniz. Bu fonksiyonun yaptığı iki değerin Levenştayn mesafesini hesaplamaktır. Buda kaç harf değiştiğinde, silindiğinde veya eklendiğinde diğer kelimeye dönüştüğü ile ilgili karmaşık bir algoritmadır.

Öncelikle girilen değer ile en yakın eşleşmeyi bulacağı örnek değerler kümeniz olmalı. Ben örnekte renkleri bir dizide tutarak kullandım. Siz veri tabanından da çekebilirsiniz.

 

Örnek uygulama:

<!doctype html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <title>Bunu mu demek istediniz? did you mean?</title>
</head>
<body>
<form method="post" action="">
    <input type="text" name="txtRenk"> <input type="submit" value="Tamam"><br>
</form>
<?php
if ($_POST) {
    $deger = $_POST["txtRenk"];
    $renkler = array("kırmızı", "turkuaz", "yeşil", "gümüş", "siyah", "turuncu", "gri", "sarı", "lacivert", "beyaz", "mor", "mavi", "bordo");

    // en kısa mesafenin bulunamaması durumu
    $yakinlik = -1;

    //en yakın eşleşmeyi bulmak için tüm değerleri karşılaştırıyoruz
    foreach ($renkler as $renk) {

        // girilen kelime ile dizideki elemanların eşleşmesine
        // levenshtein fonksiyonu ile kontrol ediyoruz
        $lev = levenshtein($deger, $renk);

        // eğer 0 ise tam eşleşme var demektir
        if ($lev == 0) {

            // tam eşleşme var ve değerlerimizi tanımlayıp döngüyü sonlandırıyoruz
            $enyakin = $renk;
            $yakinlik = 0;
            break;
        }

        //yakınlık bulunmadıysa (-1) veya daha yakın bir eşleşme bulunduysa
        //değişkenlerimizi buna göre değiştiriyoruz
        if ($lev <= $yakinlik || $yakinlik < 0) {
            $enyakin = $renk;
            $yakinlik = $lev;
        }
    }

    //en son yazdırıyoruz
    echo "Girilen Kelime: $deger <br>";
    if ($yakinlik == 0) {
        echo "Tam eşleşen bulundu: $enyakin";
    } else {
        echo "Bunu mu demek istediniz: $enyakin?";
    }
}
?>
</body>
</html>

Uygulama dosyasını indirmek için: bunumu.rar

Çalışmanın demo uygulaması için tıklayın.

Paylaş:

Yorumlar

    Bu yazı için hiç yorum yok. İlk yorumu yapmak ister misiniz?