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