Dédoublonnage flou de fiches clients (SequenceMatcher)
Compare toutes les paires de fiches (nom + ville) avec difflib.SequenceMatcher et liste les doublons probables au-dessus de 88 % de similarité, score en tête pour arbitrage humain.
Cas d'usage
Fusion de deux CRM après rachat : repérer « Dupont Jean / Paris » et « DUPONT J. / Paris » sans dépendance externe.
Prérequis
Python 3.9+ (bibliothèque standard)
Python
import csv
from difflib import SequenceMatcher
with open("clients.csv", encoding="utf-8") as f:
fiches = [(r["id"], f"{r['nom']} {r['ville']}".lower())
for r in csv.DictReader(f)]
paires = []
for i, (id1, c1) in enumerate(fiches):
for id2, c2 in fiches[i + 1:]:
score = SequenceMatcher(None, c1, c2).ratio()
if score >= 0.88:
paires.append((score, id1, c1, id2, c2))
print(f"{len(fiches)} fiches comparées — {len(paires)} doublon(s) probable(s)")
for score, id1, c1, id2, c2 in sorted(paires, reverse=True)[:3]:
print(f" {score:.0%} {id1} « {c1} »")
print(f" {id2} « {c2} »")Résultat
1842 fiches comparées — 3 doublon(s) probable(s)
97% C00214 « dupont jean paris »
C01877 « dupont jean paris »
93% C00891 « martin sophie lyon »
C02403 « martin sophi lyon »
89% C01102 « garcia miguel nantes »
C01755 « garcias miguel nantes »difflibDoublonsCRMFuzzy matching