Isoler des doublons potentiels dans une table

babal -  
blux Messages postés 2051 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 !

3 réponses

  1. fiu
     
    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
    1. babal
       
      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
  2. fiu
     
    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
    1. babal
       
      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
  3. blux Messages postés 2051 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    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