Isoler des doublons potentiels dans une table
babal
-
blux Messages postés 27850 Date d'inscription Statut Modérateur Dernière intervention -
blux Messages postés 27850 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?