Trouver les doublons flous avec SQL

Les doublons évidents sont faciles à trouver avec SQL. Pour la rechercher de doublons flous / doublons partiels, la plupart des serveurs de bases de données ont leurs propres commandes SQL pour chercher des mots qui sonnent pareil.

La plupart des serveurs de bases de données utilisent l'algorithme SOUNDEX pour la recherche phonétique. SOUNDEX forme une chaîne de quatre caractères pour représenter les lettres d'un mot selon leur son en anglais. On peut parfois obtenir des résultats raisonnables avec cette méthode simple. Ainsi, par exemple‚ 'Smith' et 'Smythe' sont reconnus comme étant identiques. Mais aussi dans d'autres langues que l'anglais, l'algorithme livre parfois de bons résultats. Ainsi, par exemple, 'Maier', 'Mayer', 'Mayr' et 'Mair' sont reconnus comme étant identiques.

Par contre, la méthode est conçue pour comparer des mots individuels, et ainsi déjà la comparaison de 'Ken Smith' et 'Smith Ken' ne retourne pas de résultats. Et cette méthode dépend aussi de la langue. En plus, la représentation d'un mot avec une chaîne de 4 caractères est plutôt imprécise, et on obtient parfois des résultats curieux. Par exemple, 'Hilbert' et 'Heilbronn' ou 'Knuth' et 'Kant' sont reconnus comme étant identiques.

De plus, l'écart entre les deux mots à comparer n'est pas toujours le même. Il serait donc souhaitable que la comparaison renvoie un degré de concordance, par exemple 80% ou 90%. Mais les algorithmes phonétiques ne renvoient comme résultat de la comparaison que l'indication si les deux mots sont similaires ou non.

Voici un exemple d'une requête SQL pour trouver des doublons à l'aide de la commande SOUNDEX:

SELECT tab1.id, tab1.name, tab2.id, tab2.name
FROM tablename tab1, tablename tab2
WHERE SOUNDEX(tab1.name)= SOUNDEX(tab2.name)
AND tab1.id<>tab2.id
AND tab1.id=(SELECT MAX(id) FROM tablename tab
WHERE SOUNDEX(tab.name)=SOUNDEX(tab1.name))

Mais puisque les résultats de cette requête contiennent probablement aussi des items qui ne sont pas vraiment des doublons, et on ne veut pas remettre au hasard la question de quel enregistrement du groupe de doublons doit être conservé ou supprimé, on ne peut pas continuer à travailler avec les résultats tels quels. Et en plus, il y a le fait qu'une telle requête compare toujours tous les enregistrements avec tous les autres, ce qui allonge de temps de traitement de la requête.

Pour cette raison, la commande SOUNDEX dans SQL n'est généralement pas la meilleure façon de libérer une base de données des ses doublons. Ce problème ne peut être vraiment résolu qu’avec des outils spécialisés, qui offrent une recherche de doublons tolérante aux erreurs, comme par exemple DataQualityTools: