grapheme_levenshtein

(No version information available, might only be in Git)

grapheme_levenshteinCalcula la distancia de Levenshtein entre dos cadenas en unidades de grafema

Descripción

Estilo procedimental

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

La distancia de Levenshtein se define como el número mínimo de clusters de grafemas que hay que reemplazar, insertar o eliminar para transformar string1 en string2. La complejidad del algoritmo es O(m*n), donde n y m son la longitud de string1 y de string2 en unidades de grafema.

A diferencia de levenshtein(), que opera sobre bytes, esta función cuenta clusters de grafemas Unicode, de modo que las formas compuesta y descompuesta de un mismo carácter (por ejemplo U+00E9 y U+0065 U+0301, que representan ambas é) se consideran equivalentes y tienen una distancia de cero.

Si insertion_cost, replacement_cost y/o deletion_cost son distintos de 1, el algoritmo se adapta para elegir las transformaciones más baratas. Por ejemplo, si $insertion_cost + $deletion_cost < $replacement_cost, no se realizará ningún reemplazo, sino más bien inserciones y eliminaciones.

Parámetros

string1

Una de las cadenas evaluadas para la distancia de Levenshtein. Debe ser UTF-8 válido.

string2

Una de las cadenas evaluadas para la distancia de Levenshtein. Debe ser UTF-8 válido.

insertion_cost

Define el coste de la inserción. Debe ser mayor que 0.

replacement_cost

Define el coste del reemplazo. Debe ser mayor que 0.

deletion_cost

Define el coste de la eliminación. Debe ser mayor que 0.

locale

La configuración regional a utilizar.

Valores devueltos

Devuelve la distancia de Levenshtein entre las dos cadenas, medida en unidades de grafema, o false en caso de fallo. Se debe utilizar intl_get_error_message() para obtener detalles sobre el fallo.

Errores/Excepciones

Lanza una ValueError si insertion_cost, replacement_cost o deletion_cost es menor o igual que 0.

Devuelve false y establece un error intl si una de las cadenas de entrada no es UTF-8 válido, si locale no es un identificador de configuración regional válido, o si se produce un error interno de ICU.

Historial de cambios

Versión Descripción
8.5.0 Esta función ha sido añadida.

Ejemplos

Ejemplo #1 Ejemplo con grapheme_levenshtein()

<?php

// Forma compuesta (NFC): U+00E9 LATIN SMALL LETTER E WITH ACUTE
$e_composed = "\u{00E9}";

// Forma descompuesta (NFD): U+0065 + U+0301 (e + acento agudo combinante)
$e_decomposed = "\u{0065}\u{0301}";

// grapheme_levenshtein los trata como el mismo cluster de grafemas
var_dump(grapheme_levenshtein($e_composed, $e_decomposed));

// levenshtein() opera sobre bytes y los ve como diferentes
var_dump(levenshtein($e_composed, $e_decomposed));

?>

El ejemplo anterior mostrará:

int(0)
int(3)

Véase también

add a note

User Contributed Notes

There are no user contributed notes for this page.