0/5 (11 avis)
Vue 18 754 fois - Téléchargée 833 fois
'Code à coller dans un module 'La fonction s'utilise en appelant la seule procédure publique disponible, Comparer 'implémentation de la méthode de Ratcliff, Obershelp, Levenshtein Private Declare Sub RtlMoveMemory Lib "kernel32" (Destination As Any, Source As Any, ByVal Length As Long) Private b1() As Byte Private b2() As Byte Public Function Comparer(ByVal string1 As String, ByVal string2 As String) As Double Dim len1 As Long Dim len2 As Long string1 = UCase$(string1) string2 = UCase$(string2) If string1 = string2 Then Comparer = 1 Else len1 = Len(string1) len2 = Len(string2) ReDim b1(1 To len1) ReDim b2(1 To len2) RtlMoveMemory b1(1), ByVal string1, len1 RtlMoveMemory b2(1), ByVal string2, len2 Comparer = SubSim(1, len1, 1, len2) / (len1 + len2) * 2 End If End Function Private Function SubSim(st1 As Long, end1 As Long, st2 As Long, end2 As Long) As Long If Not (st1 > end1 Or st2 > end2 Or st1 <= 0 Or st2 <= 0) Then Dim c1 As Long Dim c2 As Long Dim ns1 As Long Dim ns2 As Long Dim i As Long Dim max As Long For c1 = st1 To end1 For c2 = st2 To end2 i = 0 Do Until b1(c1 + i) <> b2(c2 + i) i = i + 1 If i > max Then ns1 = c1 ns2 = c2 max = i End If If c1 + i > end1 Or c2 + i > end2 Then Exit Do Loop Next c2 Next c1 SubSim = max + SubSim(ns1 + max, end1, ns2 + max, end2) + SubSim(st1, ns1 - 1, st2, ns2 - 1) End If End Function
1 sept. 2010 à 20:19
je vois que ton post date de très longtemps. Om me propose d'utiliser ta macro dans une recherche de doublons sur un fichier qui doit contenir à terme 33000 lignes qui correspondent à des noms-prénoms-date de naissance et autres. j'ai déja créer la chaine de caractères à comparer.
Comment penses-tu que l'on pourrais adapter ta macro ou est-il réaliste de l'tuliser vu qu'il devrait calculer environ 500 millions de taux et les ressortir.
Merci de pourvoir me répondre si possible.
Merci d'avance
19 avril 2005 à 08:22
j'aimerais bien implémenter cette fonction en C++ car c'est exactement ce que j'ai besoin. Si tu sais où je pourrais trouver le code déja fait ce serait cool, sinon j'aimerais bien avoir le pseudo code de ta fonction car le VB c'est pas ma branche. Connais-tu la méthode Oliver93, celle utilisée pour la fonction similar_text() de php et qui permet de trouver un pourcentage de similitude entre 2 chaînes de caractères?
Merci
@+
14 avril 2005 à 00:18
;-)
Ici, c'est pour comparer le pourcentage de similitude entre 2 chaines de caractères lol
Enfin, je suis content pour toi que tu ais trouvé ton bonheur...
@+
Celiphane
14 avril 2005 à 00:05
apres qq modif ça me convient tres bien
ce que g trouver:
http://www.vbfrance.com/code.aspx?ID=5917
13 avril 2005 à 23:30
nan c'est pas fait pour les images. <-(
Encore que, avec un tout petit peu d'effort, en transformant les images en 256 couleurs, en mettant chaque octets de l'une dans le tableau b1 et pareil pour l'autre dans b2,
on puisse peut-être obtenir un pourcentage de ressemblance entre les 2 images... à essayer... personnellement je le ferais facilement mais j'en ai pas le temps... ni l'envie, ni le besoin d'ailleurs (ce qui concorde peut-être avec le fait que j'ai pas le temps ?)
@+
Celiphane
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.