Accueil > > > COMPARAISON ENTRE 2 CHAINES, RETOURNE UN POURCENTAGE DE RESSEMBLANCE (DUPONT = 66,67% DE DURAND)
COMPARAISON ENTRE 2 CHAINES, RETOURNE UN POURCENTAGE DE RESSEMBLANCE (DUPONT = 66,67% DE DURAND)
Information sur la source
Description
Bonjour,
Je vous met là à disposition un fonction qui vous renvoie un pourcentage de similitude entre 2 chaînes de caractères passées en argument.
Cette fonction est l'implémentation d'un modèle mathématiques (Ratcliff, Obershelp, Levenshtein), et utilise une sous-routine.
Vous savez tout, vous trouverez dans l'archive jointe un projet de démonstration.
Source
- '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
'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
Conclusion
Merci de laisser vos commentaires, optimisations s'il y a lieu (ça me semble au top du plus du plus du plus rapide... mais bon, il y a toujours mieux... enfin peut-être !).
Si vous connaissez des fonctions du même genre, présentez les moi, je vous en serais gré !
@+
Celiphane
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|