Faire correspondre 2 tables malgrè des fautes d'orthographe

Eléphanteau du PHP | 32 Messages

20 mars 2011, 14:59

Bonjour,
Je souhaite rattacher des comptes (nom, prénom) de 2 tables contenant environ 2000 membres.
Pas de souci quand les imports des comptes ont été traités automatiquement. Mais, si des comptes ont été importés à la main, il y a souvent des erreurs...

Bref, je voudrais savoir s'il existe une fonction qui permette de comparer 2 champs de 2 tables, et dire s'ils se ressemblent, à un caractère près, ou à n caractères près...

Merci!

ViPHP
xTG
ViPHP | 7331 Messages

20 mars 2011, 15:55

Il y a l'opérateur SOUNDEX mais il fonctionne essentiellement avec les mots anglais.

Eléphanteau du PHP | 32 Messages

20 mars 2011, 16:00

Non, là, c'est des noms et des prénoms.
Je pensais plus à quelque chose qui "scruterait" chaque champ d'une table caractère par caractère pour voir s'il ne ressemble pas au champ de de l'autre table.

ViPHP
xTG
ViPHP | 7331 Messages

20 mars 2011, 16:26

C'est quel genre de fautes ? Des accents ? Des majuscules/minuscules ?
Ou bien carrément des lettres en plus ou en moins ?

Eléphanteau du PHP | 32 Messages

20 mars 2011, 16:35

Cela peut être deux noms collés, ou un seul des 2 noms présents voire parfois une erreur de frappe donc de caractère.
Exemples:
DASILVA au lieu de DA SILVA
TOTO au lieu de TOTO COTONIO
ENEST au lieu de ERNEST

Par contre, pour les accents ou les minuscules et majuscules, je me suis débrouillé, ca c'est ok.

ViPHP
xTG
ViPHP | 7331 Messages

20 mars 2011, 18:16

En effet il te faudra donc passer par un lourd script PHP, même si basique, pour trouver les erreurs...
Mais ça va être super lourd, car il faudra comparer chaque lettre de chaque mot avec tous les autres.

Eléphanteau du PHP | 32 Messages

20 mars 2011, 22:31

Ah...

L'idée est de proposer ce traitement des "incertains" pour faire un rapprochement manuel:
Sur une page j'afficherai l'individu de la table 1 et quelques propositions des plus approchants de la table 2.

Mais, je sèche un peu. Comment je peux m'y prendre à ton avis?

ViPHP
xTG
ViPHP | 7331 Messages

21 mars 2011, 08:00

Une récupération de toutes les valeurs et une boucle pour les comparer.
Et encore une boucle pour comparer caractère par caractère.
Ensuite un compteur pour noter les non-correspondances et le tour est joué.
Un algorithme pas bien compliqué, suffit de bien réfléchir. ;)

ViPHP
ViPHP | 4039 Messages

21 mars 2011, 10:29

Une récupération de toutes les valeurs et une boucle pour les comparer.
Et encore une boucle pour comparer caractère par caractère.
Ensuite un compteur pour noter les non-correspondances et le tour est joué.
Un algorithme pas bien compliqué, suffit de bien réfléchir. ;)

Ou tout simplement calculer
 la distance Levenshtein
entre deux chaînes.
Ceci dit, elle ne prend pas en compte la longueur de la chaîne, donc il faudra trouver une équation qui les mette en relation, et en termes absolus histoire de faciliter le traitement.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
ViPHP | 2577 Messages

21 mars 2011, 10:52

Bonjour,

Le plus simple à mon avis est de traiter ceux qui correspondent parfaitement et de les éliminer de tes tables.
Pour le reste fait un traitement manuel.

J'ai fait un traitement similaire pour 40.000 personnes à rapprocher de 1.000.000 de personnes. On a procédé par "vagues" successive en éliminent les cas validé manuellement.
Un des problèmes est les Jean-X, Jean X, J.X etc...

Eléphanteau du PHP | 32 Messages

21 mars 2011, 18:59

Je vais m'atteler à tout ça.
Merci pour vos messages.