Python

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

Snippets relacionados

Volver al Data Lab