Способ связи

Способ связи

Итак, у меня есть таблица с именем, адресом и почтовым индексом, к которой не прикреплены никакие данные о записях; и у меня есть таблица, в которой все то же самое, но больше информации, и мне нужен способ объединить таблицы, когда они не совпадают на 100%.

Как мне сопоставить их, если они не идентичны? Я новичок в SQL, но я знаю, что они не будут совпадать в большинстве случаев, и я не могу быть единственным с этой проблемой. Однако программное обеспечение, которое сделает это, оказалось сложным.

Написание программного обеспечения для этой цели было бы даже хуже, чем необходимость делать это изначально.

Я знаю, что могу сделать это в Excel; ну, в общем-то, но с таким количеством записей, как у меня, это оказывается затруднительно — если их больше миллиона.

решение1

Я работал в фирме по маркетингу баз данных (извините за отправку вам спама). Наша работа заключалась в том, чтобы выяснить, является ли "Robert Jones 671 Kimbrough SPFD MO 65802" тем же самым, что и "Bobbie Joanes 671 Kimbrough St. Sprinfield MO 65809". Если мы не находили совпадений, мы рисковали отправить дубликат письма потенциальному клиенту, из-за чего наши клиенты выглядели бы глупо, а также тратили бы деньги.

Наш подход заключался в том, чтобы разложить проблему на более мелкие области и применить различные критерии для ответа на вопрос A.вероятноB. Слишком жесткое правило сопоставления — и вы не отловите дубликаты. Слишком свободное правило сопоставления — и вы отбросите потенциальных клиентов.

У нас было три домена, по которым могла сопоставляться сущность: Имя, Метод контакта, Отношения. Сопоставление разрешалось только в том случае, если мы сопоставлялись по двум доменам.

Способ связи

Способом связи была почта, электронная почта или телефон.

Адреса

Первый шаг — стандартизировать предоставленный адрес. Конечная цель — взять ваш входной адрес и исправить его наUSPSстандарт. В предыдущем примере оба адреса, вероятно, получат почту, но только потому, что почтовый перевозчик понял намерение отправителя. Настоящий адрес будет

671 S KIMBROUGH AVE SPRINGFIELD MO 65806-3342

Как только у вас будет постоянный адрес, сопоставление адресов станет гораздо проще. Вам все еще нужно беспокоиться об адресах, которые нельзя исправить, а также о правилах для многоквартирных домов (Suite 200, Apt B и т. д.), но это часть тонкой настройки, которую вам нужно будет проработать с владельцем бизнеса. О, и хотя +4 цифры удобны для доставки, не позволяйте им влиять на вашу логику сопоставления адресов. Они гораздо более склонны меняться, чем 5-значный почтовый индекс.

Еще одна вещь, которую следует иметь в виду, заключается в том, что люди переезжают, поэтому вы можете получить информацию о переадресации адреса (NCOA - National Change of Address) за последние X временных рамок, если вам важно иметь текущие данные адреса. Когда вы переезжаете, документы о переадресации адреса действительны только в течение определенного периода времени, и любой, кто отправит вам почту после этого периода, получит возврат по адресу «Вернуть отправителю», а не по этому адресу. NCOA-запись почты перед отправкой гарантирует, что у вас будет текущий адрес, даже если срок переадресации истек.

Наш подход заключался в создании хэша из стандартизированного адреса (строка 1 + почтовый индекс) и использовании его в качестве ключа сравнения.

Телефон

Единственной сложностью в отношении телефонов было то, был ли у них связанный с ними код города. Мы хранили их без разделителей или форматирования, а любые расширения хранились отдельно. Это сводилось к 7- или 10-значному номеру телефона. Если у нас был адрес, есть программное обеспечение, которое можетобычноЗаполните код зоны. Поскольку коды зон разделяются, обычно существует льготный период, когда местоположение может обслуживаться 2 (или более) кодами зон.

Электронная почта

В общем, адрес электронной почты либо совпадает, либо нет. Когда мы действительно отчаянно пытались сопоставить, мы очищали наши данные. Это включало просмотр доменов и проверку их существования, а также добавление домена верхнего уровня, если их не было. Если мы видели joan@aol, то можно было с уверенностью сказать, что они имели в виду @aol.com. Другой трюк, который вы можете использовать для увеличения совпадений адресов электронной почты, заключается в использовании + в адресе. Некоторые провайдеры, такие как google, допускают[email protected]для доставки на базовый адрес. Я считаю, что это полезный способ связать адрес электронной почты с определенным сайтом, на котором я зарегистрирован. Если на этот аккаунт начнет приходить нежелательная почта, то я знаю, кого я могу пожевать. Но для целей сопоставления вы можете отбросить содержимое от + до @

Имена

«Что в имени? То, что мы называем Джонсом, может быть одним и тем же человеком»

Уильям Мэтчспир

Мы обнаружили, что нам нужно было выполнить два разных типа сопоставления для Имен. Название компании или организации и имя человека. Имя в США может иметь префикс (Mr, Mrs, Dr, Fr, Sen, Sgt и т. д.), имя, отчество, второе отчество или отцовскую фамилию, фамилию/материнскую фамилию, поколенческую (Jr, Sr, IV), профессиональную/почетную/академическую (MBA, JD, PhD, esq и т. д.). Разве это не весело?

Обычно это не так уж и плохо, пока данные были собраны в отдельных частях. В противном случае вы можете получить странные результаты, если предположите, что можете разделить по пробелам, чтобы определить части имени, как может подтвердить мой друг с фамилией "de los santos".

Названия компаний, ну, это обычно то, что они вам дают. О чем следует знать, так это о том, что DBA ведет бизнес как. "Soulless megacorporation LLC DBA Happy cuddly puppy preserve" Это может потребовать соответствия "Happy cuddly puppy preserve" и/или "Soulless Megacorporation"

Соответствие имени

Первый шаг в сопоставлении личных имен будет следующим:саундекс. Он обычно доступен в СУРБД и может быть приемлемым на основе ваших входных данных. Проблема с soundex в том, что он хорош только для подмножества европейских имен. Более умный фонетический подход, который мы использовали, былДвойной метафонАлгоритм. Это дало гораздо лучший результат для сопоставления строк.

В нашем примере выше точное совпадение по Jones to Joanes не сработает, но фонетическое совпадение должно сработать. Проблема в том, что у нас есть Bobbie to Robert. Никакое воображение не заставит их звучать одинаково, но клиенты настаивали на том, что мы пропускаем совпадения, поэтому мы добавили еще один набор проверок, чтобы расширить псевдонимы до их полного значения, а затем повторно провели сравнения.

При сравнении названий компаний мы обнаружили, что полезно составить список "стоп-слова" - бессмысленный хлам, который появляется в именах, но должен игнорироваться для целей сопоставления (a, of, the, LLC, corp, univ, university)

Затем мы получили отзывы о том, что «простые» опечатки, перестановка или пропуск букв приводили к несовпадающим сущностям. Поскольку этот ответ стал длиннее, мы также получили отзывы о том, что сопоставление названий компаний не срабатывало для таких сущностей, как «Johns used tire barn» и «Johns mega used tire barn». В итоге мы внедрилисравнение n-грамми алгоритм сравнения токенов, чтобы помочь решить эти сценарии. С тех пор я говорил с другими в отрасли, и они были сторонниками использованияРасстояние Левенштейнадля определения соответствия строк.

Отношение

Отношения были в основном чем-то еще, что мы знали как истинное. Одна компания проводила акцию, где продавцы становились шикарными, заставляя клиентов заполнять карточки ответов на бизнес. У нас был список сотрудников «John's used tire barn», и нам нужно было сопоставить неполные данные об именах с этим набором ссылок. Я говорю об этом только для полноты. Для вашей проблемы вы будете искать совпадения по имени и MoC.

Сделайте это уже сейчас

Конкретные особенности вашей реализации будут зависеть от того, как выглядят ваши данные, а также от того, сколько времени и денег вы готовы вложить в решение проблемы.

Мой общий подход начинается с импорта обоих наборов данных в вашу базу данных. Данные, которые имеют все атрибуты, являются вашим набором ссылок. Меньший набор данных является вашим набором кандидатов. В таблице кандидатов добавьте столбец, содержащий идентификатор вашего набора ссылок. Ниже не хватает нормализации, но так и задумано

CREATE TABLE 
    dbo.reference 
(
    reference_id int identity(1,1) NOT NULL PRIMARY KEY
,   name_prfix varchar(50) NULL
,   name_first varchar(50) NOT NULL
,   name_middle varchar(50) NULL
,   name_last varchar(50) NOT NULL
,   name_suffix varchar(20) NULL
,   company_name varchar(100) NULL
,   address_line1 varchar(70) NULL
,   address_line2 varchar(50) NULL
,   address_city varchar(50) NULL
,   address_state varchar(20) NULL
,   address_postalcode varchar(10) NULL
,   address_zip4 char(4) NULL
,   phone_number varchar(10) NULL
)

CREATE TABLE 
    dbo.candidate
(
    candidate_id int identity(1,1) NOT NULL PRIMARY KEY
,   name_prfix varchar(50) NULL
,   name_first varchar(50) NOT NULL
,   name_middle varchar(50) NULL
,   name_last varchar(50) NOT NULL
,   name_suffix varchar(20) NULL
,   company_name varchar(100) NULL
,   address_line1 varchar(70) NULL
,   address_line2 varchar(50) NULL
,   address_city varchar(50) NULL
,   address_state varchar(20) NULL
,   address_postalcode varchar(10) NULL
,   address_zip4 char(4) NULL
,   reference_id int 
)

Итеративный TSQL

Шаг 1, прямые совпадения. Везде, где есть точное совпадение между Candidate и Reference, запишите это в Candidate.reference_id, и теперь оно исключено из процесса.

Шаг 2, прямые совпадения с расширением псевдонима и/или заменой стоп-слов

Шаг 3, сопоставление адресов с нечетким соответствием имен (двойной метафон + ngram + минимальное расстояние редактирования)

Шаг 4, поиск совпадений с нечетким расширением псевдонима и/или заменой стоп-слов (двойной метафон + ngram + минимальное расстояние редактирования)

Шаг 5. Проверка оставшегося пула кандидатов для ручного сопоставления.

ССИС

Enterprise Edition SSIS предоставляет возможности нечеткой логики. По сути, он будет делать то же самое, что указано в подходе TSQL, без необходимости вам собирать собственную структуру для сопоставления имен и всего такого.

Выпуск SSIS 2012 года также предоставляет услуги по обеспечению качества данных, которые позволят очистить ваши адреса, а также разбить имена на части.

Связанный контент