grapheme_levenshtein

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

grapheme_levenshteinCalcule la distance de Levenshtein entre deux chaînes en unités de graphèmes

Description

Style procédural

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

La distance de Levenshtein est définie comme le nombre minimal de clusters de graphèmes qui doivent être remplacés, insérés ou supprimés pour transformer string1 en string2. La complexité de l'algorithme est O(m*n), où n et m sont les longueurs de string1 et string2 en unités de graphèmes.

Contrairement à levenshtein(), qui opère sur les octets, cette fonction compte les clusters de graphèmes Unicode, de sorte que les formes composée et décomposée d'un même caractère (par exemple U+00E9 et U+0065 U+0301, représentant tous deux é) sont traitées comme équivalentes et ont une distance de zéro.

Si insertion_cost, replacement_cost et/ou deletion_cost ne sont pas égaux à 1, l'algorithme s'adapte pour choisir les transformations les moins coûteuses. Par exemple, si $insertion_cost + $deletion_cost < $replacement_cost, aucun remplacement ne sera effectué, mais des insertions et des suppressions seront réalisées à la place.

Liste de paramètres

string1

L'une des chaînes évaluées pour la distance de Levenshtein. Doit être de l'UTF-8 valide.

string2

L'une des chaînes évaluées pour la distance de Levenshtein. Doit être de l'UTF-8 valide.

insertion_cost

Définit le coût d'une insertion. Doit être supérieur à 0.

replacement_cost

Définit le coût d'un remplacement. Doit être supérieur à 0.

deletion_cost

Définit le coût d'une suppression. Doit être supérieur à 0.

locale

Locale à utiliser.

Valeurs de retour

Retourne la distance de Levenshtein entre les deux chaînes, mesurée en unités de graphèmes, ou false en cas d'échec. Utilisez intl_get_error_message() pour obtenir des détails sur l'échec.

Erreurs / Exceptions

Lève une ValueError si insertion_cost, replacement_cost ou deletion_cost est inférieur ou égal à 0.

Retourne false et définit une erreur intl si l'une ou l'autre des chaînes d'entrée n'est pas de l'UTF-8 valide, si locale n'est pas un identifiant de locale valide, ou si une erreur ICU interne se produit.

Historique

Version Description
8.5.0 Cette fonction a été ajoutée.

Exemples

Exemple #1 Exemple avec grapheme_levenshtein()

<?php

// Forme composée (NFC) : U+00E9 LATIN SMALL LETTER E WITH ACUTE
$e_compose = "\u{00E9}";

// Forme décomposée (NFD) : U+0065 + U+0301 (e + accent aigu combinant)
$e_decompose = "\u{0065}\u{0301}";

// grapheme_levenshtein les traite comme le même cluster de graphèmes
var_dump(grapheme_levenshtein($e_compose, $e_decompose));

// levenshtein() opère sur les octets et les voit comme différents
var_dump(levenshtein($e_compose, $e_decompose));

?>

L'exemple ci-dessus va afficher :

int(0)
int(3)

Voir aussi

add a note

User Contributed Notes

There are no user contributed notes for this page.