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
-----------