Google'ın kullandığı bunu mu demek istediniz algoritması gibi bir algoritma yapmak isterseniz levenshtein algoritmasını kullanmanız gerekecek. Bu algoritma birçok programlama ve script dilinde kendi adıyla fonksiyon olarak kullanılmaktadır.
Algoritmayı bulan Vladimir Levenshtein’ın adıyla anılmaktadır. Bu algoritmaları bulan bilim adamlarına fazlasıyla saygı duyuyorum. Bu algoritmanın amacı iki farklı kelime veya cümleyi birbirine eşitlemek için(bir harf çıkarma, bir harf ekleme, harflerin yerini değiştirme, yan yana olan iki harfin sırasını değiştirme) yapılacak en az işlem sayısını bulmaktır.
PHP’de Levenshtein fonksiyonu iki kelime arasındaki karakter farkı kadar değer döndürür. Örneğin Masa ve Musa kelimeleri arasında ki karakter farkı sadece 2.harflerinde ki farklılık olduğundan dolayı(a≠u) Levenshtein fonksiyonu bizlere 1 değerini döndürecektir.
Şimdi bir örnekle bu öğrendiklerimizi pekiştirelim:
$kelime1='Masa';
$kelime2='Musa';
$fark=levenshtein($kelime1,$kelime2);
echo 'fark:'.$fark; //1 değeri dönecek
Yukarıda ki kodların kısaca anlamı şudur: Masa kelimesinde yapılacak 1 işlem sonucu Musa kelimesi elde edilebilir. Aradığınız şey tam olarak böyle bir değer olmayabilir fakat bu değer yardımıyla kullanıcılara "did you mean" olarak sonuç bir kelime gösterebileceğiz. Fakat aranan kelime ile karşılaştırma yapabileceğimiz elimizde başka kelimeler olmalı. Kelimeleri şimdi bir dizi içinde tuttuğumuzu varsayarak örnek kodlarımızı yazalım:
<?php
// kullanıcının aradığı kelime
$aranan_kelime = 'karra';
// karşılaştırma yapılacak kelimeler
$kelimeler = array('siyah','araba','sahra','portakal',
'bardak','insan','bilgisayar','kara','mavi');
$enyakin = -1;
// kelimeleri sırayla inceliyoruz
foreach ($kelimeler as $kelime) {
//iki kelime arasında ki fark değeri hesaplanıyor
$lev = levenshtein($aranan_kelime, $kelime);
// eğer tam eşleşme varsa
if ($lev == 0) {
//aranan kelime ile tam eşleşen bir kelime bulundu
$benzer = $kelime;
$enyakin = 0;
// aranan kelime bulununca burada döngü sonlanacak
break;
}
if ($lev <= $enyakin || $enyakin < 0) {
$benzer = $kelime;
$enyakin = $lev;
}
}
echo "Aranan Kelime: $aranan_kelime\n";
if ($enyakin == 0) {
echo "Tam Eşleşme: $benzer\n";
} else {
echo "Did you mean: $benzer?\n";
}
?>
Şimdi, Google gibi, yanlış yazılan kelimelere karşı doğru kelimeleri nasıl önerebileceğimize kısaca bakalım.
İki stringin dizilimini benzerlik açısından derecelendiren bir algoritmadır. Algoritma, Rus bilim adamı Vladimir Levenshtein tarafından 1965 yılında geliştirilmiştir.
levenshtein(string1,string2,insert,replace,delete)
Örnek bir kod parçası:
<?php
echo levenshtein("Hello World","ello World");//1
echo "<br>";
echo levenshtein("Hello World","ello World",10,20,30);//30
?>
Kodlarımız bu kadar, hoşçakalın…
https://www.buraksenyurt.com/post/Levenshtein-Distance-Algoritmasi