№6
Нечеткое сравнение строк
/**
* Функция нечеткого сравенения строк
* выдает % совпадения двух строк.
* Для получения наилучшего результата, нужно поиграться с параметрами
* minLen и maxLen - от них зависит точность совпадения
* @param string $x первая строка
* @param string $y вторая строка
* @param string $minLen минимальный размер подстроки для сравнения - рекомендуется 1 или 2
* @param string $maxLen масимальный размер подстроки для сравнения - рекомендуется
* не более трети длины минимальной из строк.
* Если не задать - будет равна длине минимальнйо строки
* @return float возвращает процент совпадения строк
*/
function fuzzy_compare($x,$y,$minLen=1,$maxLen=0)
{
$l1 = strlen($x);
$l2 = strlen($y);
if ($maxLen ==0 ) $maxLen = min($l1,$l2);
$summ = 0;
$count = 0;
for($l = $minLen; $l<=$maxLen;$l++)
{
for ($i = 0; $i< ($l1 - $l); $i++)
{
$part = substr($x,$i,$l);
$count ++;
if (strpos($y,$part)!==FALSE) $summ++;
}
}
return 100*$summ/$count;
}
//Пример:
echo fuzzy_compare("Привет медведь","Превед медвед",1,4)
73.469387755102
Автор:
MihanEntalpo@yandex.ru
MihanEntalpo@yandex.ru