Isoler des doublons potentiels dans une table

Fermé
babal - 11 janv. 2010 à 20:28
blux Messages postés 26569 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 3 janvier 2025 - 12 janv. 2010 à 08:56
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 !
A voir également:

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)
0
Salut Flu,

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?
0
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
0
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...):


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
0
blux Messages postés 26569 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 3 janvier 2025 3 323
12 janv. 2010 à 08:56
Salut,

tu pourrais peut-être explorer la voie de suppression des caractères spéciaux afin d'éliminer les -,. et autres joyeusetés.

Par contre, pour la graphie différente des noms, à part un truc du genre soudex...
0