opimisation de la fonction soundex - PHP - Programmation
Marsh Posté le 22-05-2018 à 14:14:13
Peut-être travailler avec d'autres algo de similitudes (calcul de distances entre 2 chaînes comme Levenstein ou d'autres plus performantes) ?
Marsh Posté le 23-05-2018 à 15:00:26
Le Soundex génère une "image" en 4 caractères d'un mot unique, via un algo basé sur une espèce de logique d'index accordé aux groupes de consonnes (et un tripatouillage sur les voyelles), en considérant certains comme phonétiquement équivalentes ou proches.
Et donc Soundex de par sa finalité n'aime pas du tout qu'on rajoute ou retranche des syllabes entières à un mot, ça transforme complètement le résultat. Donc dans ton cas, ça n'est pas approprié.
Au lieu d'une approche phonétique, tu devrais utiliser une approche grammaticale comme Levenshtein cité par rufo, et éventuellement envisager de t'appuyer sur un outil d'indexation full text comme Lucene qui offre plus de souplesse pour les besoins comme le tien.
Remarques en vrac :
- A la base l'"index" est fait pour l'anglais, il y a une variante pour le français (entre autres), donc faut t'assurer d'utiliser la version appropriée pour ta langue.
- Les patronymes sont un cas particulier vu que ça peut impliquer des variations de langues, mais en France on aura tendance à prononcer à la française de toute façon.
- Il y a d'autres algos phonétiques, un machin qui s'appelle Metaphone par exemple, mais qui ne résolvent pas ton problème.
Marsh Posté le 23-05-2018 à 15:22:07
Tu peux regarder la BD Lexique.org qui contient les phonèmes des mots, leur décomposition en voyelles/consonnes, le nb de syllabes...
Par contre, y'a pas les noms propres. Là, faudra le faire à la main, le remplissage de la BD avec cette partie.
Marsh Posté le 20-05-2018 à 17:12:45
Bonjour,
Pour une petite application de généalogie je voudrais optimiser mes recherches avec les noms ressemblant au nom rechercher. Chose bien utile quand on voit les différentes façons d'écrire certains noms de famille.
Exemple :
Nom = MULLER
Soundex(MULLER) = M460
Je trouve MILLERY, MULLER, MOLLER, MAHLER, MILAIRE, MEILLIER, MILLER qui ont le même soundex de M460 et c'est pas mal,
Mais pas BUCHMULLER (B254), DEMULLER (D546), DEMILLER (D546), TRUCMULLER (T625) ou TRUCMACHINMILLER (T625)
Comment faire pour avoir les noms ne commençant pas par 'MULLER' ?
Merci par avance pour vos idées.