Isoler des doublons potentiels dans une table
babal
-
blux Messages postés 27145 Date d'inscription Statut Modérateur Dernière intervention -
blux Messages postés 27145 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je dois nettoyer des donnees avant de les integrer dans une Bdd.
Pour cela j'aimerai pouvoir isoler les doublons potentiels. J'ai deja effectue un nettoyage pour les "purs doublons" mais je seche un peu pour isoler les doublons potentiels, comme par exemple:
- Elizabethe / Elisabethe / Elisabeth
ou
- F345 / F-345
Une idee serait de comparer le pourcentage de caracteres identiques et au dessus d'un certain pourcentage de mettre en valeur la ligne. Malheureusement j'ai quelques soucis qd a la realisation...
Est ce que quelqu'un aurait une idee?
Nota: les donnees sont sur excel a l'heure actuelle mais je n'ai rien contre utiliser un autre outil qui permettrait de faire ca.
Merci pour vos reponses !
Je dois nettoyer des donnees avant de les integrer dans une Bdd.
Pour cela j'aimerai pouvoir isoler les doublons potentiels. J'ai deja effectue un nettoyage pour les "purs doublons" mais je seche un peu pour isoler les doublons potentiels, comme par exemple:
- Elizabethe / Elisabethe / Elisabeth
ou
- F345 / F-345
Une idee serait de comparer le pourcentage de caracteres identiques et au dessus d'un certain pourcentage de mettre en valeur la ligne. Malheureusement j'ai quelques soucis qd a la realisation...
Est ce que quelqu'un aurait une idee?
Nota: les donnees sont sur excel a l'heure actuelle mais je n'ai rien contre utiliser un autre outil qui permettrait de faire ca.
Merci pour vos reponses !
A voir également:
- Isoler des doublons potentiels dans une table
- Table des matières word - Guide
- Table ascii - Guide
- Doublons photos - Guide
- Table des caractères - Guide
- Dans le fichier, générez ce tableau automatiquement (tableau croisé dynamique ou table de pilote) à partir des quatre premières colonnes. - Guide
3 réponses
Salut
Il existe une fonction SOUNDEX() qui t'est peut-être disponible et qui renvoie une "signature vocale" de la chaine passée en argument : tu pourrais t'en servir pour dire que si deux soundex sont identiques c'est que les chaines qui en sont à l'origine sont similaires ; un bémol toutefois, je crois bien que ce soundex() ne fonctionne qu'en anglais (c'est pour ça que je m'en suis jamais servi)
Il existe une fonction SOUNDEX() qui t'est peut-être disponible et qui renvoie une "signature vocale" de la chaine passée en argument : tu pourrais t'en servir pour dire que si deux soundex sont identiques c'est que les chaines qui en sont à l'origine sont similaires ; un bémol toutefois, je crois bien que ce soundex() ne fonctionne qu'en anglais (c'est pour ça que je m'en suis jamais servi)
Comme j'ai bien peur que tu aies peu de réponses supplémentaires, j'aurais tendance à te conseiller d'explorer la voie avec soundex et de prévoir le traitement du reliquat avec des méthodes rudimentaires de ton cru (filtrer sur une différence d'1 car non alphanum par ex) en attendant l'arrivée d'une méthode polyvalente
bon courage
bon courage
Merci Flu,
Malheureusement, dans mon cas ce que tu appelles le reliquats correspond a 90% des enregistrements... :))
Je ne desespere pas: si quelqu'un est pris d'insomnie et veut bien m'aider, je suis preneur!
Anyway, si quelqu'un est interresse par la creation d'une formule excel SOUNDEX(), voici le code Vba pour le faire (de peu d'utilite dans mon cas...):
Malheureusement, dans mon cas ce que tu appelles le reliquats correspond a 90% des enregistrements... :))
Je ne desespere pas: si quelqu'un est pris d'insomnie et veut bien m'aider, je suis preneur!
Anyway, si quelqu'un est interresse par la creation d'une formule excel SOUNDEX(), voici le code Vba pour le faire (de peu d'utilite dans mon cas...):
Function SOUNDEX(Surname As String) As String ' Developed by Richard J. Yanco ' This function follows the Soundex rules given at ' http://home.utah-inter.net/kinsearch/Soundex.html Dim Result As String, c As String * 1 Dim Location As Integer Surname = UCase(Surname) ' First character must be a letter If Asc(Left(Surname, 1)) < 65 Or Asc(Left(Surname, 1)) > 90 Then SOUNDEX = "" Exit Function Else ' St. is converted to Saint If Left(Surname, 3) = "ST." Then Surname = "SAINT" & Mid(Surname, 4) End If ' Convert to Soundex: letters to their appropriate digit, ' A,E,I,O,U,Y ("slash letters") to slashes ' H,W, and everything else to zero-length string Result = Left(Surname, 1) For Location = 2 To Len(Surname) Result = Result & Category(Mid(Surname, Location, 1)) Next Location ' Remove double letters Location = 2 Do While Location < Len(Result) If Mid(Result, Location, 1) = Mid(Result, Location + 1, 1) Then Result = Left(Result, Location) & Mid(Result, Location + 2) Else Location = Location + 1 End If Loop ' If category of 1st letter equals 2nd character, remove 2nd character If Category(Left(Result, 1)) = Mid(Result, 2, 1) Then Result = Left(Result, 1) & Mid(Result, 3) End If ' Remove slashes For Location = 2 To Len(Result) If Mid(Result, Location, 1) = "/" Then Result = Left(Result, Location - 1) & Mid(Result, Location + 1) End If Next ' Trim or pad with zeroes as necessary Select Case Len(Result) Case 4 SOUNDEX = Result Case Is < 4 SOUNDEX = Result & String(4 - Len(Result), "0") Case Is > 4 SOUNDEX = Left(Result, 4) End Select End If End Function Private Function Category(c) As String ' Returns a Soundex code for a letter Select Case True Case c Like "[AEIOUY]" Category = "/" Case c Like "[BPFV]" Category = "1" Case c Like "[CSKGJQXZ]" Category = "2" Case c Like "[DT]" Category = "3" Case c = "L" Category = "4" Case c Like "[MN]" Category = "5" Case c = "R" Category = "6" Case Else 'This includes H and W, spaces, punctuation, etc. Category = "" End Select End Function
Merci beaucoup, j'ai explore cette piste et malheureusement cela ne marche pas des lors qu'il y a des nombres dans le mot (donc cela ne marche pas pour l'exemple F-345 et F345).
Quelqu'un aurait-il une autre idee?