(PHP 8 >= 8.5.0)
grapheme_levenshtein — Вычисляет расстояние Левенштейна между двумя строками в графемных кластерах
Процедурный стиль
$string1,$string2,$insertion_cost = 1,$replacement_cost = 1,$deletion_cost = 1,$locale = ""
Расстояние Левенштейна определяется как минимум графемных кластеров,
которые требуется заменить, вставить или удалить, чтобы преобразовать строку
string1 в строку string2.
Сложность алгоритма — O(m*n), где n
и m — длины строк string1
и string2 в графемных кластерах.
В отличие от функции levenshtein(), которая работает с байтами,
функция считает графемные кластеры Юникода,
поэтому составную и разложенную формы одного и того же символа,
например U+00E9 и U+0065 U+0301,
каждая из которых представляет символ é,
функция считает эквивалентными, а расстояние между формами — нулевым.
Алгоритм подстроится и выберет самые дешёвые преобразования,
если значения параметров insertion_cost,
replacement_cost или deletion_cost
не равны 1.
Например, при истинности выражения $insertion_cost + $deletion_cost < $replacement_cost
вместо замен выполняются вставки и удаления.
string1Строка в кодировке UTF-8 для вычисления расстояния Левенштейна.
string2Строка в кодировке UTF-8 для вычисления расстояния Левенштейна.
insertion_cost
Стоимость вставки — значение больше 0.
replacement_cost
Стоимость замены — значение больше 0.
deletion_cost
Стоимость удаления — значение больше 0.
localeИдентификатор языковых и региональных параметров.
Функция возвращает расстояние Левенштейна между двумя строками в графемных
кластерах или false, если возникла ошибка. Подробности об ошибке возвращает
функция intl_get_error_message().
Функция выбрасывает ошибку ValueError,
если значение параметра insertion_cost,
replacement_cost или deletion_cost
меньше или равно 0.
Функция возвращает false и устанавливает ошибку модуля Intl,
если хотя бы одна входная строка не соответствует кодировке UTF-8,
в параметр locale передали недопустимый идентификатор локали
или возникла внутренняя ошибка библиотеки ICU.
| Версия | Описание |
|---|---|
| 8.5.0 | Функцию добавили в модуль. |
Пример #1 Пример вычисления расстояния Левенштейна функцией grapheme_levenshtein()
<?php
// Составная форма (NFC): U+00E9 LATIN SMALL LETTER E WITH ACUTE
$e_composed = "\u{00E9}";
// Разложенная форма (NFD): U+0065 + U+0301 (e + комбинируемый акут)
$e_decomposed = "\u{0065}\u{0301}";
// Функция grapheme_levenshtein() считает обе формы как единый графемный кластер
var_dump(grapheme_levenshtein($e_composed, $e_decomposed));
// Функция levenshtein() работает с байтами и видит разные байтовые последовательности
var_dump(levenshtein($e_composed, $e_decomposed));Результат выполнения приведённого примера:
int(0) int(3)