logo oujood
🔍

Fonction metaphone() PHP : Génération de Clés Phonétiques

Apprenez à utiliser metaphone() pour créer des systèmes de recherche et correction orthographique basés sur la prononciation anglaise

OUJOOD.COM

Qu'est-ce que la fonction metaphone() ?


PHP references des fonctions PHP

Disponibilité : PHP 4, PHP 5, PHP 7, PHP 8

La fonction metaphone() est un outil puissant pour générer des clés phonétiques représentant la prononciation d'une chaîne de caractères en anglais. Elle permet de comparer des mots qui sonnent de manière similaire, même s'ils s'écrivent différemment.

Définition et fonctionnement

À quoi sert metaphone() ?

La fonction metaphone() calcule une clé phonétique (metaphone key) qui représente la façon dont une chaîne de caractères est prononcée par un locuteur anglophone. Cette clé permet d'identifier des mots qui ont une prononciation similaire mais une orthographe différente.

Applications courantes :

  • Correcteurs orthographiques et suggestions de mots
  • Moteurs de recherche phonétique
  • Systèmes de détection de doublons basés sur la prononciation
  • Validation et vérification de données utilisateur

La fonction retourne la clé metaphone sous forme de chaîne en cas de succès, ou false en cas d'échec.

Syntaxe

metaphone(string $string, int $max_phonemes = 0): string|false
Paramètre Description

string

Requis. La chaîne de caractères dont vous souhaitez calculer la clé phonétique.

max_phonemes

Facultatif. Limite la longueur de la clé metaphone retournée au nombre de phonèmes spécifié. La valeur par défaut est 0, ce qui signifie qu'aucune limitation n'est appliquée et que la clé complète sera retournée.


Note importante : La fonction metaphone() est similaire à la fonction soundex(), mais elle offre une précision supérieure. Contrairement à soundex() qui génère une clé de longueur fixe (4 caractères), metaphone() produit une clé de longueur variable et prend mieux en compte les subtilités de la prononciation anglaise.

Historique et algorithme

L'algorithme Metaphone a été développé par Lawrence Philips et publié dans le livre "Practical Algorithms for Programmers" par Binstock & Rex (Addison Wesley, 1995). Cet algorithme améliore significativement les performances de détection phonétique par rapport aux algorithmes précédents comme Soundex.


Exemples pratiques

Exemple 1 : Comparaison de mots similaires

Cet exemple démontre comment metaphone() génère la même clé pour deux mots de prononciation identique :

Exemple :   📋 Copier le code

<?php
// Comparaison de deux mots avec prononciation similaire
var_dump(metaphone('programming'));
echo "<br>";
var_dump(metaphone('programmer'));

// Vérification si deux mots sonnent pareil
if (metaphone('programming') === metaphone('programmer')) {
    echo "<br>Ces mots ont une prononciation similaire !";
}
?>

Résultat :

string(7) "PRKRMNK"

string(6) "PRKRMR"

Exemple 2 : Limitation de la longueur de la clé

Dans cet exemple, nous utilisons le paramètre max_phonemes pour limiter la longueur de la clé retournée à 5 caractères :

Exemple :   📋 Copier le code

<?php
// Génération de clés phonétiques limitées à 5 phonèmes
var_dump(metaphone('programming', 5));
echo "<br>";
var_dump(metaphone('programmer', 5));

// Cas d'usage : recherche phonétique
$recherche = 'programming';
$mots = ['programmer', 'programming', 'program', 'programmer'];

echo "<br><br>Mots similaires à '$recherche' :<br>";
foreach ($mots as $mot) {
    if (metaphone($mot, 5) === metaphone($recherche, 5)) {
        echo "- $mot<br>";
    }
}
?>

Résultat :

string(5) "PRKRM"

string(5) "PRKRM"

Exemple 3 : Système de recherche phonétique

Exemple :   📋 Copier le code

<?php
/**
 * Fonction de recherche phonétique
 * Compare une requête avec une liste de mots
 */
function recherchePhonétique($requete, $listeMots) {
    $cleRequete = metaphone($requete);
    $resultats = [];
    
    foreach ($listeMots as $mot) {
        if (metaphone($mot) === $cleRequete) {
            $resultats[] = $mot;
        }
    }
    
    return $resultats;
}

// Test de la fonction
$dictionnaire = ['night', 'knight', 'nite', 'write', 'right', 'rite'];
$recherche = 'knight';

echo "Recherche phonétique pour : '$recherche'<br>";
$correspondances = recherchePhonétique($recherche, $dictionnaire);
echo "Mots trouvés : " . implode(', ', $correspondances);
?>

Metaphone vs Soundex : Quelle différence ?

Critère metaphone() soundex()
Précision Plus précise, prend mieux en compte la prononciation anglaise Moins précise, algorithme plus ancien
Longueur de clé Variable (peut être limitée) Fixe (4 caractères)
Cas d'usage Recommandée pour applications modernes Pour compatibilité avec systèmes anciens

Recommandation : Pour de nouveaux projets, préférez metaphone() qui offre une meilleure précision. Consultez également soundex() pour comprendre les différences d'implémentation.



Par carabde | Mis à jour le 22 Août 2014