Python

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

Snippets liés

Retour au Data Lab