Similar_text, Левенштейн нашел сходство подстроки - PullRequest
0 голосов
/ 27 февраля 2019

Левенштейн - это алгоритм нахождения расстояния Левенштейна между двумя строками.Строка_схожесть также действует аналогичным образом - вычисляет сходство и выводит оценку.

В этом вопросе есть пара движущихся частей.

Возьмем две строки:

$string1="adipesesing et";
$string2="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua";

Сейчас ищемв $ string1 «adipesesing et» найдет наибольшее сходство в подстроке «adipisicing elit» в $ string2, где первое слово введено с ошибкой, а второе - аббревиатура.Вышеприведенные функции рассчитывают не оценку на основе этой подстроки, а всего $ string2.

Существует ли популярный метод поиска подстроки с наибольшим сходством с двумя функциями?

1 Ответ

0 голосов
/ 27 февраля 2019

Это не может быть идеальным, но одна возможность состоит в том, чтобы разбить обе строки на слова, вы можете применить similar_text к каждому набору слов из $string2 того же размера, что и $string1.

$needle_word_count = count(preg_split('/\W+/', $string1));

$haystack_words = preg_split('/\W+/', $string2);

$n = count($haystack_words) - $needle_word_count;
for ($i = 0; $i <= $n; $i++) {
    $words = array_slice($haystack_words, $i, $needle_word_count);
    $substring = implode(' ', $words);
    $results[$substring] = similar_text($substring, $string1);
}
arsort($results);

/* $results:

array (size=17)
  'adipisicing elit' => int 11
  'consectetur adipisicing' => int 8
  'sit amet' => int 5
  'labore et' => int 5
  'eiusmod tempor' => int 4
  'dolor sit' => int 4
  'ipsum dolor' => int 4
  'tempor incididunt' => int 4
  'Lorem ipsum' => int 3
  'incididunt ut' => int 3
  'sed do' => int 3
  'do eiusmod' => int 3
  'elit sed' => int 3
  'amet consectetur' => int 3
  'dolore magna' => int 3
  'et dolore' => int 2
  'ut labore' => int 1
*/
...