Вам нужно использовать мульти -process для параллелизации с Python. К счастью, модуль multiprocessing , который поставляется с Python, делает это довольно легко.
Очень немногие языки могут автоматически распараллеливать выражения. Если это необходимая функциональность, я предлагаю Haskell (Data Parallel Haskell)
Так там своего рода алгоритм, который может дать процент для того, насколько подобный запись другому?
Алгоритмы, поскольку Soundex и расстояния Edit (как предложено в предыдущем сообщении) могут решить некоторые Ваши проблемы. Однако, если Вы будете серьезно относиться к очистке Ваших данных, то это не будет достаточно. Поскольку другие заявили, что "счет" не звучит как ничто как "William".
лучшее решение, которое я нашел, состоит в том, чтобы использовать алгоритм сокращения и таблицу для сокращения имен к, он - корневое имя.
К Вашей обычной Таблице адресов, добавьте Корневые версии имен, например, Человека (Firstname, RootFirstName, Фамилия, Rootsurname....)
Теперь, создайте таблицу отображения. FirstNameMappings (Первичный ключ Firstname, Rootname)
Заполняют Вашу Таблицу отображения: Вставьте ИГНОРИРУЮТ (выберите Firstname, "НЕОПРЕДЕЛЕННЫЙ" от Человека) в FirstNameMappings
This добавит весь firstnames, который Вы имеете в своей таблице человека вместе с RootName "НЕОПРЕДЕЛЕННЫХ"
Теперь, к сожалению, необходимо будет пройти все уникальные имена и отобразить их на RootName. Например, "счет", "Billl" и "Желание" должны все быть переведены в "William" This, является очень трудоемким, но если качество данных действительно важно для Вас, я думаю, что это - один из лучших путей.
Теперь используют недавно созданную таблицу отображения для обновления поля "Rootfirstname" в таблице Person. Повторитесь для фамилии и адреса. Как только это сделано, необходимо быть в состоянии обнаружить дубликаты, не страдая от орфографических ошибок.
Можно сравнить имена с расстояние Левенштейна . Если имена являются тем же, расстояние 0, еще оно дано минимальным количеством операций, должен был преобразовать одну строку в другой.
Я предполагаю, что эта проблема хорошо понята, но что происходит со мной на первом чтении:
Использование Ваша существующая база данных для получения хорошего первого предположения для порога, и корректный, поскольку Вы накапливаете опыт.
можно предпочесть довольно сильную предвзятость к ложным положительным сторонам по крайней мере сначала.
В то время как у меня нет алгоритма для Вас, мое первое действие должно было бы смотреть на процесс, вовлеченный во ввод нового контакта. Возможно, у пользователей нет простого способа найти контакт, который они ищут. Во многом как на новой форме вопроса Переполнения стека, Вы могли предложить контакты, которые уже существуют на новом экране контакта.
Если у Вас есть доступ, SSIS проверяют Нечеткую группировку и Нечеткое преобразование поиска.
http://www.sqlteam.com/article/using-fuzzy-lookup-transformations-in-sql-server-integration-services
Если у Вас есть большая база данных со строковыми полями, можно очень быстро найти много дубликатов при помощи алгоритм simhash .
Это может или не может быть связано, но, незначительные орфографические ошибки могли бы быть обнаружены поиск Soundex , например, это позволит Вам рассматривать Britney Spears, Запчасти Britanny и Britny Spears как дубликаты.
сокращения Псевдонима, однако, трудно рассмотреть как дубликаты, и я сомневаюсь, мудро ли это. Там обязаны быть несколькими людьми по имени Bill Smith и William Smith, и необходимо было бы выполнить итерации этого с Charles-> Chuck, Robert-> Bob, и т.д.
кроме того, если Вы рассматриваете, скажем, мусульманских пользователей, проблемы становятся более трудными (существует слишком много мусульман, например, которые называют Mohammed/Mohammad).
Я не уверен, что это будет работать хорошо на имена по сравнению с проблемой псевдонимов, но наиболее распространенный алгоритм в этом виде области был бы расстояние редактирования / расстояние Левенштейна алгоритм. Это - в основном количество количества символьных изменений, дополнений и удалений, требуемых превратить один объект в другого.
Для имен, я не уверен, что Вы когда-либо собираетесь получить хорошие результаты с чисто алгоритмическим подходом - В чем Вы действительно нуждаетесь, массы данных. Возьмите, например, сколько лучшие предложения написания Google, чем предложения в нормальном настольном приложении. Это вызвано тем, что Google может обработать миллиарды веб-запросов и посмотреть на то, что запросы приводят друг к другу, что 'сделало Вы подразумеваете, что' на ссылки на самом деле нажимают и т.д.
существует несколько компаний, которые специализируются на проблеме соответствия имени (главным образом для национальной безопасности и приложений мошенничества). Тот, который я мог помнить, Search Software Америка, кажется, был выкуплен этими парнями http://www.informatica.com/products_services/identity_resolution/Pages/index.aspx , но я подозреваю, что любой из этих видов решений был бы далек к дорогому для приложения контактов.
Вы могли бы также хотеть изучить вероятностное соответствие.