Soundex français

Mammouth du PHP | 2278 Messages

22 févr. 2014, 16:06

Rappel de principe
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"));

?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
xTG
ViPHP | 7331 Messages

22 févr. 2014, 18:44

Je ne suis pas certain que cela puisse être utilisé pour autre chose qu'une lointaine approximation.
Une lettre seule est bien unique.
Mais différentes combinaisons de différentes lettres peuvent donner le même son.
"an" et "en" par exemple.