W3docs

soundex()

Notre article présente la fonction PHP soundex(), qui calcule la clé Soundex d'une chaîne, utile pour comparer la prononciation de mots.

La fonction PHP soundex() calcule la clé Soundex d'une chaîne — un code court qui représente la façon dont la chaîne sonne en anglais plutôt que la façon dont elle est orthographiée. Deux mots orthographiés différemment mais prononcés de manière similaire (comme « Smith » et « Smyth ») produisent la même clé, ce qui rend Soundex pratique pour la correspondance approximative de noms, les suggestions de correction orthographique et la déduplication de listes de contacts.

Cette page couvre la syntaxe de soundex(), le format de la clé qu'elle retourne, le fonctionnement de l'algorithme, ainsi que des exemples pratiques — y compris ses limites et comment elle se compare aux fonctions apparentées.

Syntaxe

soundex(string $string): string

Elle prend un paramètre :

  • $string — la chaîne d'entrée à encoder. Seuls les caractères alphabétiques sont pris en compte ; les chiffres, les espaces et la ponctuation sont ignorés.

Elle retourne la clé Soundex sous forme de chaîne. Pour une entrée alphabétique non vide, la clé est toujours composée de 4 caractères : une lettre majuscule suivie de trois chiffres (par exemple, H464). Si l'entrée ne contient pas de lettres, soundex() retourne une chaîne vide.

Comment la clé Soundex est construite

L'algorithme Soundex réduit un mot à sa première lettre plus un code à trois chiffres basé sur les sons consonantiques restants :

  1. Conserver la première lettre du mot.

  2. Associer les lettres restantes à des chiffres, en regroupant les consonnes qui sonnent de façon similaire :

    LettresChiffre
    b, f, p, v1
    c, g, j, k, q, s, x, z2
    d, t3
    l4
    m, n5
    r6
  3. Les voyelles a, e, i, o, u et les lettres h, w, y sont supprimées (aucun chiffre ne leur est attribué).

  4. Les chiffres en double adjacents sont fusionnés en un seul.

  5. Le résultat est complété par des zéros (ou tronqué) pour obtenir exactement quatre caractères.

C'est pourquoi soundex('Robert') et soundex('Rupert') produisent tous deux R163 — les voyelles différentes sont ignorées.

Exemple de base

php— editable, runs on the server

Ici, la chaîne $string est encodée avec soundex(). La sortie est :

H464

Le H est la première lettre, et 464 encode les sons consonantiques l (4), r (6), l (4). L'espace et la limite de mot sont ignorés — Soundex traite l'entrée comme une seule séquence de lettres.

Comparaison de deux chaînes

L'utilisation la plus courante de soundex() consiste à vérifier si deux mots sonnent de la même façon en comparant leurs clés :

php— editable, runs on the server

Comme Smith et Smyth sont tous deux encodés en S530, leurs clés correspondent et la sortie est :

The strings sound the same.

Correspondance d'un nom avec une liste

Un motif pratique consiste à suggérer des candidats « vouliez-vous dire… » à partir d'une liste connue lorsqu'une correspondance exacte échoue :

<?php
$names = ['Robert', 'Rupert', 'Rubin', 'Albert'];
$query = 'Ruppert';
$queryKey = soundex($query);

foreach ($names as $name) {
    if (soundex($name) === $queryKey) {
        echo "$name sounds like $query\n";
    }
}
?>

Robert et Rupert partagent tous deux la clé R163 avec Ruppert, donc la sortie est :

Robert sounds like Ruppert
Rupert sounds like Ruppert

Limites

  • Centré sur l'anglais. La correspondance lettre-chiffre est calibrée pour la prononciation anglaise, elle fonctionne donc mal pour les noms d'autres langues.
  • La première lettre doit correspondre. Parce que Soundex conserve toujours la première lettre, Kris (K620) et Chris (C620) ne correspondent pas, même s'ils se prononcent de façon identique.
  • Correspondance grossière. Seuls les premiers sons consonantiques subsistent, de sorte que des mots longs très différents peuvent produire la même clé. Utilisez-la comme filtre de premier passage, pas comme réponse définitive.

Pour un algorithme phonétique différent qui gère souvent mieux l'anglais, voir metaphone(). Pour mesurer à quel point deux chaînes sont proches plutôt que si elles sonnent de la même façon, voir similar-text() et levenshtein().

Pratique

Pratique
Quelle est la fonction du système Soundex en PHP ?
Quelle est la fonction du système Soundex en PHP ?
Was this page helpful?