grapheme_levenshtein

(PHP 8 >= 8.5.0)

grapheme_levenshtein — Вычисляет расстояние Левенштейна между двумя строками в графемных кластерах

Описание

Процедурный стиль

function grapheme_levenshtein(
    string $string1,
    string $string2,
    int $insertion_cost = 1,
    int $replacement_cost = 1,
    int $deletion_cost = 1,
    string $locale = ""
): int|false

Расстояние Левенштейна определяется как минимум графемных кластеров, которые требуется заменить, вставить или удалить, чтобы преобразовать строку 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)

Смотрите также

+Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы