Почему в PHP функция levenshtein имеет ограничение в 255 символов? - PullRequest
0 голосов
/ 06 сентября 2018

Кто-нибудь знает, почему функция levenshtein в PHP имеет ограничение в 255 символов?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

PHP-функция levenshtein () может обрабатывать только до 255 символов, что нереально для ввода пользователем (только первый абзац этого поста содержит 285 символов). Если вы решите использовать пользовательскую функцию, способную обрабатывать более 255 символов, важна эффективность.

Я использую эту функцию, специфичную для этого случая, но гораздо быстрее:

function ucase_percent ($str) {
    $str2 = strtolower ($str);

    $l = strlen ($str);
    $ucase = 0;

    for ($i = 0; $i < $l; $i++) {
        if ($str{$i} != $str2{$i}) {
            $ucase++;
        }
    }

    return $ucase / $l * 100.0;
}
0 голосов
/ 06 сентября 2018

Это полная реализация PHP для функции. Как вы можете видеть, есть вложенный цикл, основанный на длине строки символов:

function lev($s,$t) {
  $m = strlen($s);
  $n = strlen($t);

  for($i=0;$i<=$m;$i++) $d[$i][0] = $i;
  for($j=0;$j<=$n;$j++) $d[0][$j] = $j;

  for($i=1;$i<=$m;$i++) {
    for($j=1;$j<=$n;$j++) {
      $c = ($s[$i-1] == $t[$j-1])?0:1;
      $d[$i][$j] = min($d[$i-1][$j]+1,$d[$i][$j-1]+1,$d[$i-1][$j-1]+$c);
    }
  }

  return $d[$m][$n];
}

https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#PHP

версия для PHP с именем levenshtein() в PHP, начиная с версии 4.0.1 до 255 символов.

Я думаю, что введено ограничение для поддержания производительности и продолжительности в наиболее приемлемом диапазоне.

Если вам нужно сравнение строк для длин> 255, вы можете использовать приведенную выше реализацию.

...