From 3e15bc31a177779fd665f85f8abe2016a6a3c684 Mon Sep 17 00:00:00 2001 From: lacatoire Date: Mon, 31 Aug 2026 13:01:18 +0200 Subject: [PATCH 1/4] add the grapheme_levenshtein() manual page --- .../intl/grapheme/grapheme-levenshtein.xml | 219 ++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 reference/intl/grapheme/grapheme-levenshtein.xml diff --git a/reference/intl/grapheme/grapheme-levenshtein.xml b/reference/intl/grapheme/grapheme-levenshtein.xml new file mode 100644 index 000000000..c343da2fe --- /dev/null +++ b/reference/intl/grapheme/grapheme-levenshtein.xml @@ -0,0 +1,219 @@ + + + + + + grapheme_levenshtein + Вычисляет расстояние Левенштейна между двумя строками в единицах графем + + + &reftitle.description; + &style.procedural; + + intfalsegrapheme_levenshtein + stringstring1 + stringstring2 + intinsertion_cost1 + intreplacement_cost1 + intdeletion_cost1 + stringlocale"" + + + Расстояние Левенштейна определяют как минимальное количество кластеров графем, + которые требуется заменить, вставить или удалить, чтобы преобразовать строку + string1 в строку string2. + Сложность алгоритма — O(m*n), где n + и m — длины строк string1 + и string2 в единицах графем. + + + В отличие от функции levenshtein, которая работает + с байтами, эта функция считает Unicode-кластеры графем, поэтому составную + и разложенную формы одного и того же символа, например + U+00E9 и U+0065 U+0301, каждая + из которых представляет символ é, функция считает + равнозначными, а расстояние между ними — нулевым. + + + Если значения параметров insertion_cost, + replacement_cost или deletion_cost + отличаются от 1, алгоритм подстраивается и выбирает + самые дешёвые преобразования. + Например, если $insertion_cost + $deletion_cost < $replacement_cost, + замены не выполняются, а вместо них выполняются вставки и удаления. + + + + + &reftitle.parameters; + + + + string1 + + + Одна из строк, для которых вычисляют расстояние Левенштейна. + Строка должна быть корректной в кодировке UTF-8. + + + + + string2 + + + Одна из строк, для которых вычисляют расстояние Левенштейна. + Строка должна быть корректной в кодировке UTF-8. + + + + + insertion_cost + + + Задаёт стоимость вставки. Значение должно быть больше 0. + + + + + replacement_cost + + + Задаёт стоимость замены. Значение должно быть больше 0. + + + + + deletion_cost + + + Задаёт стоимость удаления. Значение должно быть больше 0. + + + + + locale + + &intl.param.grapheme.locale; + + + + + + + + &reftitle.returnvalues; + + Функция возвращает расстояние Левенштейна между двумя строками в единицах + графем или &false; в случае ошибки. Подробности об ошибке возвращает + функция intl_get_error_message. + + + + + &reftitle.errors; + + Функция выбрасывает ошибку ValueError, если + значение параметра insertion_cost, + replacement_cost или deletion_cost + меньше или равно 0. + + + Функция возвращает &false; и устанавливает ошибку intl, если одна + из входных строк некорректна в кодировке UTF-8, если значение параметра + locale — некорректный идентификатор локали + или если произошла внутренняя ошибка библиотеки ICU. + + + + + &reftitle.changelog; + + + + + &Version; + &Description; + + + + + 8.5.0 + + Функцию добавили. + + + + + + + + + &reftitle.examples; + + Пример использования функции <function>grapheme_levenshtein</function> + + +]]> + + &example.outputs; + + + + + + + + &reftitle.seealso; + + + levenshtein + grapheme_strlen + grapheme_substr + similar_text + + + Unicode Text Segmentation: Grapheme Cluster Boundaries + + + + + + + From 4136d213bcb6c5b9688f3a0f9b00601b5e85f14f Mon Sep 17 00:00:00 2001 From: Mikhail Alferov Date: Thu, 24 Sep 2026 21:36:21 +0300 Subject: [PATCH 2/4] Update grapheme-levenshtein.xml --- .../intl/grapheme/grapheme-levenshtein.xml | 68 +++++++++---------- 1 file changed, 32 insertions(+), 36 deletions(-) diff --git a/reference/intl/grapheme/grapheme-levenshtein.xml b/reference/intl/grapheme/grapheme-levenshtein.xml index c343da2fe..ec0084bfc 100644 --- a/reference/intl/grapheme/grapheme-levenshtein.xml +++ b/reference/intl/grapheme/grapheme-levenshtein.xml @@ -4,7 +4,7 @@ grapheme_levenshtein - Вычисляет расстояние Левенштейна между двумя строками в единицах графем + Вычисляет расстояние Левенштейна между двумя строками в графемных кластерах &reftitle.description; @@ -19,28 +19,28 @@ stringlocale"" - Расстояние Левенштейна определяют как минимальное количество кластеров графем, + Расстояние Левенштейна определяют как минимальное количество графемных кластеров, которые требуется заменить, вставить или удалить, чтобы преобразовать строку string1 в строку string2. Сложность алгоритма — O(m*n), где n и m — длины строк string1 - и string2 в единицах графем. + и string2 в графемных кластерах. - В отличие от функции levenshtein, которая работает - с байтами, эта функция считает Unicode-кластеры графем, поэтому составную - и разложенную формы одного и того же символа, например - U+00E9 и U+0065 U+0301, каждая - из которых представляет символ é, функция считает - равнозначными, а расстояние между ними — нулевым. + В отличие от функции levenshtein, которая работает с байтами, + функция считает графемные кластеры Юникода, + поэтому составную и разложенную формы одного и того же символа, + например U+00E9 и U+0065 U+0301, + каждая из которых представляет символ é, + функция считает эквивалентными, а расстояние между формами — нулевым. - Если значения параметров insertion_cost, + Алгоритм подстроится и выберет самые дешёвые преобразования, + если значения параметров insertion_cost, replacement_cost или deletion_cost - отличаются от 1, алгоритм подстраивается и выбирает - самые дешёвые преобразования. - Например, если $insertion_cost + $deletion_cost < $replacement_cost, - замены не выполняются, а вместо них выполняются вставки и удаления. + не равны 1. + Например, при истинности выражения $insertion_cost + $deletion_cost < $replacement_cost + вместо замен выполняются вставки и удаления. @@ -52,8 +52,7 @@ string1 - Одна из строк, для которых вычисляют расстояние Левенштейна. - Строка должна быть корректной в кодировке UTF-8. + Строка в кодировке UTF-8 для вычисления расстояния Левенштейна. @@ -61,8 +60,7 @@ string2 - Одна из строк, для которых вычисляют расстояние Левенштейна. - Строка должна быть корректной в кодировке UTF-8. + Строка в кодировке UTF-8 для вычисления расстояния Левенштейна. @@ -70,7 +68,7 @@ insertion_cost - Задаёт стоимость вставки. Значение должно быть больше 0. + Стоимость вставки — значение больше 0. @@ -78,7 +76,7 @@ replacement_cost - Задаёт стоимость замены. Значение должно быть больше 0. + Стоимость замены — значение больше 0. @@ -86,7 +84,7 @@ deletion_cost - Задаёт стоимость удаления. Значение должно быть больше 0. + Стоимость удаления — значение больше 0. @@ -103,8 +101,8 @@ &reftitle.returnvalues; - Функция возвращает расстояние Левенштейна между двумя строками в единицах - графем или &false; в случае ошибки. Подробности об ошибке возвращает + Функция возвращает расстояние Левенштейна между двумя строками в графемных + кластерах или &false;, если возникла ошибка. Подробности об ошибке возвращает функция intl_get_error_message. @@ -112,16 +110,16 @@ &reftitle.errors; - Функция выбрасывает ошибку ValueError, если - значение параметра insertion_cost, + Функция выбрасывает ошибку ValueError, + если значение параметра insertion_cost, replacement_cost или deletion_cost меньше или равно 0. - Функция возвращает &false; и устанавливает ошибку intl, если одна - из входных строк некорректна в кодировке UTF-8, если значение параметра - locale — некорректный идентификатор локали - или если произошла внутренняя ошибка библиотеки ICU. + Функция возвращает &false; и устанавливает ошибку модуля Intl, + если хотя бы одна входная строка не соответствует кодировке UTF-8, + в параметр locale передали недопустимый идентификатор локали + или возникла внутренняя ошибка библиотеки ICU. @@ -139,7 +137,7 @@ 8.5.0 - Функцию добавили. + Функцию добавили в модуль. @@ -150,7 +148,7 @@ &reftitle.examples; - Пример использования функции <function>grapheme_levenshtein</function> + Пример вычисления расстояния Левенштейна функцией <function>grapheme_levenshtein</function> ]]> &example.outputs; @@ -190,7 +186,7 @@ int(3) similar_text - Unicode Text Segmentation: Grapheme Cluster Boundaries + Сегментация текста в Юникоде: Границы графемных кластеров From 7edf0f29740da4934445d9ca1553044c67df17c8 Mon Sep 17 00:00:00 2001 From: Mikhail Alferov Date: Thu, 24 Sep 2026 21:38:16 +0300 Subject: [PATCH 3/4] Update grapheme-levenshtein.xml --- reference/intl/grapheme/grapheme-levenshtein.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/intl/grapheme/grapheme-levenshtein.xml b/reference/intl/grapheme/grapheme-levenshtein.xml index ec0084bfc..608b8933d 100644 --- a/reference/intl/grapheme/grapheme-levenshtein.xml +++ b/reference/intl/grapheme/grapheme-levenshtein.xml @@ -19,7 +19,7 @@ stringlocale"" - Расстояние Левенштейна определяют как минимальное количество графемных кластеров, + Расстояние Левенштейна определяется как минимальное количество графемных кластеров, которые требуется заменить, вставить или удалить, чтобы преобразовать строку string1 в строку string2. Сложность алгоритма — O(m*n), где n From bcc6b295eb1627b0cbb31e64117882bdd9b36fac Mon Sep 17 00:00:00 2001 From: Mikhail Alferov Date: Thu, 24 Sep 2026 21:40:39 +0300 Subject: [PATCH 4/4] Update grapheme-levenshtein.xml --- reference/intl/grapheme/grapheme-levenshtein.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/intl/grapheme/grapheme-levenshtein.xml b/reference/intl/grapheme/grapheme-levenshtein.xml index 608b8933d..327caf840 100644 --- a/reference/intl/grapheme/grapheme-levenshtein.xml +++ b/reference/intl/grapheme/grapheme-levenshtein.xml @@ -19,7 +19,7 @@ stringlocale"" - Расстояние Левенштейна определяется как минимальное количество графемных кластеров, + Расстояние Левенштейна определяется как минимум графемных кластеров, которые требуется заменить, вставить или удалить, чтобы преобразовать строку string1 в строку string2. Сложность алгоритма — O(m*n), где n