Comparaison de deux chaines de caractères "similaires"

Comparaison de deux chaines de caractères "similaires" - VB/VBA/VBS - Programmation

Marsh Posté le 30-08-2006 à 13:27:26    

Bonjour à tous !
 
Si je m'adresse à vous, c'est que j'ai un problème pour programmer une fonction (comme 90% des gens en fait). Je vais tenter de vous expliquer assez précisément ce que je recherche pour que, peut-etre, vous puissiez m'aider.
 
Il se trouve que j'ai une liste, assez longue (dans les 40000 entrées) d'identifiants dans des formats assez divers (1611592004, 3GN300354A08, ZZKW591500600, 3AT400522R01, A31259/13/KI, ...) et que j'aimerais classer ces identifiants dans des groupes d'identifiants "similiaires".
Bon tout ca c'est dans Access et la partie programmation VB sous Access ne devrait pas me poser de problème.
 
Par contre là où j'ai un problème, c'est pour écrire la relation "A ressemble à B". Quelques exemples d'identifiants qui pourraient se ressembler :
1611592004 ressemble à 1611592014 ou à 1630592004
3GN001 ressemble à 3N001
A2514 ressemble à A2514/1
 
J'ai défini la relation de similarité comme : deux identifiants se ressemblent si (et seulement si...) il y a au maximum deux caractères différents entre les deux chaines.
 
Le principal problème vient du fait que les identifiants sont de formats vraiment divers.  
 
Je ne suis pas un expert en programmation, j'ai juste des bonnes notions générales, principalement en PHP et un peu en C, qui se sont progressivement effacées de ma mémoire. Mais je me suis orienté vers les Regex car ca ressemble pas mal à de la recherche de chaines de caractères. J'ai déjà cherché des documents sur les regex sur internet et j'ai trouvé les sites http://www.regular-expressions.info , qui est pas mal fait, mais surtout http://cafeine.developpez.com/access/tutoriel/regexp/ dont l'analyse des mots-clé vers le bas de la page pourrait se rapprocher quelque peu de mon problème. Par contre mon problème semble plus compliqué que ca.
 
Je ne vous demande pas de résoudre intégralement mon problème, mais de me donner des pistes vers lesquelles je puisse m'orienter car je suis un peu paumé pour l'instant.
 
Merci beaucoup pour m'avoir lu jusque là (ou pas)


Message édité par Library le 30-08-2006 à 13:28:47
Reply

Marsh Posté le 30-08-2006 à 13:27:26   

Reply

Marsh Posté le 30-08-2006 à 15:45:11    

Bonjour,
Tu devrais pouvoir te débrouiller avec Instr en t'inspirant de ce topic dont le sujet est assez voisin.
Il y a un ou deux liens encore actif et délà assez bien finalisés au moins au stade expérimental. Malheureusement le contact à été rompu avec startom qui a finalisé l'application, mais il n'y a aucune difficulté à plagier le principe.
Surtout sous Access ou les "RichTextBox" permettent de contourner et de simplifier le dialogue avec l'opérateur.
L'idée est de scanner tous les groupes de 3 ou 4 lettres/chiffres (et + si nécessité) dans toutes les positions pour en marquer les occurences ultérieures.
 
A+


Message édité par galopin01 le 30-08-2006 à 15:46:10
Reply

Marsh Posté le 30-08-2006 à 17:12:55    

salut
 
merci pour ta réponse ;)
 
par contre, je crois pas que ca réponde bien à mon problème, puisqu'il s'agit de comparer deux tableaux dont les valeurs peuvent etre égales, et mon problème vient justement du fait que je ne sais pas définir la relation "etre similiaire à" en termes compréhensibles par un ordinateur.
 
le fait de rechercher parmi toutes les valeurs de la table je vais faire ca bourrinement avec des boucles et plein de requetes SQL, ca prendra le temps que ca faudra, mais ca fonctionnera...
 
Sinon j'ai un peu réfléchi à comment comparer deux chaines
 
par exemple  
1611592004 et  
1623592004
 
je compare à gauche, le premier caractère des deux chaines. Si c'est le meme, je le vire, et je recommence jusqu'a ce que ce soit plus le meme. A ce moment là, je fais là meme chose, à partir de la droite.
Dans le cas du dessus, il reste 11 d'une part et 23 d'autre part, ca fait seulement deux caracteres, donc c'est bon.
Par contre il faut que je voie plus précisément comment je fais avec les caractères qui se rajoutent ou si les deux caractères différents ne sont pas collés.

Reply

Marsh Posté le 30-08-2006 à 17:38:03    

Citation :

Je crois pas que ca réponde bien à mon problème,


 
Si, si... c'est exactement ça. Bon c'est pas du C++ mais l'algo est béton.
C'est précisément fait pour retrouver des références identiques grâce à des bribes de chaine. (Il faut dépasser un peu la lecture de la première page !)
Pour 40000 enregistrements ça doit suffire largement. Bien sur si le marquage ne te convient pas, ni la boite de dialogue, à toi d'adapter. Mais sur le scan des bribes de chaîne, c'est sans problème.
 
Mais il est clair qu'on ne fait pas non plus appel à des techniques d'intelligence artificielle. Une fois les analogies misent en évidence une intervention de l'opérateur est nécessaire pour valider la ressemblance.
 
A+


Message édité par galopin01 le 30-08-2006 à 17:41:32
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed