Ну, нет 100% гарантированного правильного пути, нет. Но вы, вероятно, можете добиться некоторого прогресса, преобразовав все «грязные» столбцы в более каноническую форму , например. Путем использования всех заглавных букв подряд вырезаются начальные и конечные пробелы и обеспечивается не более 1 пробела. Также такие вещи, как изменение имен формы «SMITH, JOHN» на «JOHN SMITH» (или наоборот - просто выберите форму и следуйте ей). И, конечно, вы должны сделать копии записей, не меняйте оригиналы. Вы можете поэкспериментировать с отбрасыванием дополнительной информации (например, «JOHN SMITH» -> «J SMITH») - вы обнаружите, что это меняет баланс ложных срабатываний на ложные отрицания.
Я бы, вероятно, воспользовался подходом назначения оценки сходства для каждой пары записей. Например. если канонизированные имена, адреса и адреса электронной почты точно совпадают, присвойте 1000 баллов; в противном случае вычтите (несколько кратное) расстояние Левенштейна из 1000 и используйте его. Вам нужно будет придумать свою собственную схему подсчета очков, поигравшись и решив относительную важность различий разных типов (например, другая цифра в номере телефона, вероятно, важнее, чем разница в 1 символ в именах двух людей). Затем вы сможете экспериментально установить оценку, выше которой вы можете с уверенностью присвоить статусу «дубликат» паре записей, и более низкую оценку, выше которой требуется ручная проверка; ниже этого балла, мы можем с уверенностью сказать, что 2 записи не дубликаты.
Реальная цель здесь состоит в том, чтобы уменьшить объем ручной работы по удалению дубликатов, который вам нужно будет выполнить. Вы вряд ли сможете полностью ее устранить, если только дубликаты были сгенерированы в процессе автоматического копирования.