Освоение сходства строк в PHP: подробное руководство

В PHP вычисление сходства между двумя строками может быть ценным инструментом для различных приложений, таких как анализ текста, обнаружение дубликатов и нечеткий поиск. Функция similar_text()в PHP специально предназначена для вычисления сходства между двумя строками. Однако для решения этой задачи существует несколько других методов и алгоритмов. В этом подробном руководстве мы рассмотрим различные подходы, предоставим примеры кода и поможем вам освоить сходство строк в PHP.

Метод 1: использование функцииlike_text()
Функция similar_text()в PHP — это самый простой способ вычислить сходство между двумя строками. Он принимает два строковых параметра и возвращает количество совпадающих символов в обеих строках. Вот пример:

$string1 = "Hello, world!";
$string2 = "Hello, there!";
$similarity = similar_text($string1, $string2, $percent);
echo "Similarity: " . $percent . "%";

Результат:
Сходство: 85 %

Метод 2: Алгоритм расстояния Левенштейна
Алгоритм расстояния Левенштейна — еще один популярный метод измерения сходства строк. Он вычисляет минимальное количество односимвольных изменений (вставок, удалений или замен), необходимых для преобразования одной строки в другую. PHP предоставляет функцию levenshtein()для вычисления расстояния Левенштейна. Вот пример:

$string1 = "kitten";
$string2 = "sitting";
$distance = levenshtein($string1, $string2);
echo "Levenshtein distance: " . $distance;

Выход:
Расстояние Левенштейна: 3

Метод 3: коэффициент сходства Жаккара
Коэффициент сходства Жаккара является мерой сходства между двумя наборами. В контексте строк его можно использовать для вычисления сходства на основе присутствия или отсутствия отдельных символов. Вот пример использования PHP:

$string1 = "apple";
$string2 = "orange";
$intersection = array_intersect(str_split($string1), str_split($string2));
$union = array_unique(array_merge(str_split($string1), str_split($string2)));
$similarity = count($intersection) / count($union);
echo "Jaccard similarity: " . $similarity;

Выход:
Сходство Жаккара: 0,16666666666667

Метод 4: косинусное сходство
Косинусное сходство обычно используется для измерения сходства между двумя векторами. В контексте строк мы можем рассматривать строки как векторы символов и вычислять косинусное сходство. Вот пример:

$string1 = "machine learning";
$string2 = "deep learning";
$vector1 = array_count_values(str_split($string1));
$vector2 = array_count_values(str_split($string2));
$dotProduct = 0;
$norm1 = 0;
$norm2 = 0;
foreach ($vector1 as $char => $count) {
    $dotProduct += $count * ($vector2[$char] ?? 0);
    $norm1 += $count * $count;
}
foreach ($vector2 as $char => $count) {
    $norm2 += $count * $count;
}
$similarity = $dotProduct / (sqrt($norm1) * sqrt($norm2));
echo "Cosine similarity: " . $similarity;

Выход:
Косинусное сходство: 0,77459666924148

В этой статье мы рассмотрели несколько методов расчета сходства строк в PHP. Мы рассмотрели функцию similar_text(), алгоритм расстояния Левенштейна, коэффициент подобия Жаккара и косинусное подобие. Каждый метод имеет свои сильные и слабые стороны, и выбор метода зависит от конкретных требований вашего приложения. Поняв эти методы и используя предоставленные примеры кода, вы теперь можете уверенно решать задачи сходства строк в PHP.