L'algorithme du Soundex tente de traduire le nom en code sur lequel la recherche dans la table sera effectuée. C'est ainsi que les mots 'mer', mère', 'maire', 'maisre', ... auront le même code. Cet algorithme est d'ailleurs utilisé en généalogie pour retrouver les noms qui auraient subi une transformation due entre autres à une faute de recopie.
L'algorithme du Soundex a été développé au début du siècle par Margaret K. Odell et Robert C. Russel au bureau américain des archives.
Voici les idées sur lesquelles s'appuie l'algorithme:
* les voyelles et Y contribuent moins pour la consonnance d'un mot que les consonnes. Elles seront donc supprimées sauf celle en position initiale;
* les lettres H, W ont aussi une contribution minimale et seront donc supprimées sauf celle en position initiale;
* les consonnes redoublées comme NN, SS et MM ou les lettres qui ont la même prononciation peuvent être réduites à une seule occurence;
Ce qui est fait ici
Vaille que vaille:
<?PHP
function soundex_fr($mot)
{
mb_internal_encoding ("utf-8");
// On peut mettre toutes les lettres qu'on veut ignorer à la fin. Il suffit qu'elles n(='aient pas d'éqivalent de même rang dans $nombres
$lettres = array (
"b",
"p" ,
"c",
"k",
"q",
"d",
"t",
"l",
"m",
"n",
"r",
"g",
"j",
"x",
"z",
"s",
"f",
"v",
"a",
"â",
"à",
"ä",
"e",
"é",
"è",
"ë",
"ë",
"i",
"î",
"i",
"o",
"ô",
"ö",
"u",
"û",
"ü",
"y",
);
/*rien n'interdit de remplacer les nombres par des symboles (il n'est pas fait d'opérations arithmétiques sur ces valeurs) et de diversifier, par exemple, en rempalçant l'équivalent du "s" par un symbole.*/
$nombres = array (
1,
1,
2,
2,
2,
3,
3,
4,
5,
5,
6,
7,
7,
8,
8,
8,
9,
9,
);
$mot = mb_strtolower(trim($mot));
print "$mot<br>";
$sound = str_replace ($lettres, $nombres, $mot);
return $sound;
}
echo (soundex_fr("câäauitécui"));
?>