Benzerliği Bulmak

Elimizde çok uzun bir liste var diyelim, bu liste içerisindeki birbirine benzer olan kelimeleri bulmak istiyoruz.

PHP’de similar_text fonksiyonunu bu iş için kullanabiliriz. similar_text fonksiyonu aldığı değerler arasındaki benzerliği karakter sayısı olarak geri verir ve benzerlik oranını hesaplayabilir.

Neyse, similar_text fonksiyonun açıklamasına php manual’den bakarsınız.

Kullanımı ile ilgili basit bir örnek


<?php

// esik degerimiz %50; bu degerin uzerinde benzer olanlari bulmak istiyoruz
define("THRESHOLD", 50);

$list = array('A. Acar', 'Ahmet Deveci', 'Ahmet Yalçın',
'Ahmet Sürücü','Zakir Rıza', 'E. M. Derin',
'Michael Peters', 'H. Öktem', 'A. Acar', 'A. Uzun',
'A. Akar', 'A. Akyol', 'Mehmet Saydam', 'Mehmet Biçer',
'S. Değirmenci', 'S. Demir');

echo "RATE\tFIRST\t\t\tSECOND\n";
$len = count($list);
for($i=0; $i < $len; $i++) {
 $first  = $list[$i];
 for($j=$i+1; $j < $len; $j++) {
   $second = $list[$j];
   similar_text($first, $second, $percent);
   if ($percent > THRESHOLD) {
     echo "%".ceil($percent) . "\t" . $first . "\t\t". $second . "\n";
   }
 }
}

?>

Bu kod belirli bir yüzdeye göre, verilmiş olan listeyi filtreler. Eşik değeri ile oynayarak ilgilendiğiniz aralığı bulabilirsiniz, listeye kontrol amaçlı birbirinin aynı bir değer koydum, bu tip değerler benzerlik oranı ile ilgilendiğimiz için kafa karıştırabilir yani listeyi bu şekilde filtrelemeden önce benzersiz (array_unique) olanları alırsanız daha güzel olur.

Amaca göre üzerinde daha farklı şeyler de yapılabilir;
– Belirli bir değeri sorgulamak.
– Benzerlik oranına göre sıraya dizmek.
– Benzerlik oranını parametre olarak vermek gibi.