Google'da yanlış bir kelime yazıp arama yaptığınızda "Did you mean ? bilmem ne bilmemne" çıkar. Php'de bu iş için levenshtein() fonksiyonu bulunmasına rağmen, pekde başarılı olduğu söylenemez. Aşağıdaki işinizi görecektir.
Bazı Denemelerim:
your word is: aple
did you mean: apple
your word is: biinana
did you mean: banana
your word is: baan
did you mean: bean
your word is: ptata
did you mean: potato
$elimizdeki array şeklinde olmalıdır. Elimizdeki doğru cümlelerdir.
$yanlis ise, kullanıcının girdiği yanlış cümledir.
function enyakin($yanlis,$elimizdeki=array()) {
//Yanlış Kelimenin uzunluğu.
$uzunluk=strlen($yanlis);
//Yanlış Kelimedeki ilk harfi al.
$ilkharf=substr(strtolower($yanlis),0,1);
echo "your word is: $yanlis";
//Yanlış kelimedeki her bir karakteri bir değişkene ata.
for ($i=0;$i<=$uzunluk;$i++)
{
$k[$i]=substr(strtolower($yanlis),$i,1);
}
// $elimizdeki'yi döngüye sokar.
foreach ($elimizdeki as $key => $val)
{
//Harfleri küçük yap.
$val=strtolower($val);
for ($i=0;$i<=$uzunluk;$i++)
{
// Yanlış yazılan kelimedeki harfler ile elimizdeki kelimelerdeki harfleri karşılaştırır. En çok ortak noktası olanı seçer.
preg_match("/$k[$i]/",$val,$sonuc);
if ($sonuc[0]) $ewt[$key].=$key;
}
//Elimizdeki kelimelerden eleme yapmak için, bazı özellikler kullanılır.
//Yanlış kelime ile elimizdeki kelimenin baş harfi aynı olmalı.
//Yanlış kelime ile doğru kelime arasındaki uzunluk en fazla 2 harf olmalı. Mesela; "Siiiilam" girdiğimizde bize "Selam" kelimesini vermez. Ama "Siilam" girdiğimizde verir.
if ( ($uzunluk-2<=strlen($ewt[$key]) && $uzunluk+2>=strlen($ewt[$key]))&& (strlen($val)+1>=$uzunluk && strlen($val)-1<=$uzunluk ) && ($ilkharf==substr($val,0,1)))
{
echo "did you mean: ".$val."";
}
}