1

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

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

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

Я знаю, что могу сделать это в Excel; вроде, но с количеством записей у меня сложнее, чем за миллион.

1 ответ1

5

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

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

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

Метод контакта

Методом контакта была почта, электронная почта или телефон.

Адреса

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

671 S KIMBROUGH AVE SPRINGFIELD MO 65806-3342

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

Следует также помнить, что люди перемещаются, чтобы вы могли получать информацию о переадресации адресов (NCOA - Национальная смена адреса) за прошедшие X периодов, если важно, чтобы у вас были данные текущего адреса. Когда вы переезжаете, документы о переадресации адресов действительны только в течение определенного периода времени, и любой, кто отправит вам почту после этого окна, получит Возврат отправителю, а не по этому адресу. Отправка почты перед отправкой гарантирует, что у вас будет текущий адрес, даже если срок пересылки истек.

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

Телефон

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

Эл. адрес

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

имена

"Что в имени? То, что мы называем Джонс любым другим написанием, может быть тем же человеком "

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

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

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

Названия компаний, ну обычно это именно то, что они вам дают. Вещи, о которых нужно знать, это бизнес, который делает DBA. "МегаКорпорация бездушных, ООО" DBA Счастливый плюшевый консервный щенок ". Возможно, это должно совпадать с" Миссионерством счастливого, приятного щенка "и / или" Мегакорпорация бездушных "

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

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

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

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

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

отношения

Отношения были в основном чем-то еще, что мы знали, чтобы быть правдой. Одна компания провела рекламную акцию, в которой продавцы получали информацию, основываясь на том, что покупатели заполняли карточки бизнес-ответов. У нас был список сотрудников "John's used tyre barn", и нам нужно было сопоставить неполные данные об именах с этим набором ссылок. Я говорю здесь только для полноты. Для вашей проблемы, вы будете смотреть на совпадения Name и 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, проверьте оставшийся пул кандидатов на соответствие вручную

SSIS

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .