Deduplicacion difusa de fichas de clientes (SequenceMatcher)
Compara todos los pares de fichas (nombre + ciudad) con difflib.SequenceMatcher y lista los duplicados probables por encima del 88 % de similitud, con la puntuacion primero para el arbitraje humano.
Requisitos
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} »")Resultado
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