найти дубликаты адресов в базе данных, чтобы пользователи не вводили их раньше? - PullRequest
16 голосов
/ 01 сентября 2008

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

Есть ли какой-нибудь хороший способ абстрагирования улицы, почтового индекса и т. Д., Чтобы можно было обнаружить опечатки и простые попытки получить 2 регистрации? как:

Quellenstrasse 66/11 
Quellenstr. 66a-11

Я говорю по немецким адресам ... Спасибо!

Ответы [ 16 ]

10 голосов
/ 01 сентября 2008

Вы можете использовать Google GeoCode API

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

6 голосов
/ 01 сентября 2008

Чем раньше вы сможете остановить людей, тем легче будет в конечном итоге!

Не слишком знаком с вашей схемой БД или формой ввода данных, я бы предложил маршрут, подобный следующему:

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

  • аналогично разбейте форму ввода данных, например, улица, город и т. д.

Причина вышеизложенного состоит в том, что каждая часть, вероятно, будет иметь свои собственные «правила» проверки слегка измененных адресов («Quellenstrasse» -> «Quellenstr.», «66/11» -> «66a-11»). "выше), поэтому ваш проверочный код может проверить, существуют ли значения, представленные для каждого поля, в соответствующем поле БД. Если нет, у вас может быть класс, который применяет правила преобразования для каждого данного поля (например, «strasse», основанный на «str») и снова проверяет наличие дубликатов.

Очевидно, что вышеуказанный метод имеет свои недостатки:

  • это может быть медленно, в зависимости от вашего набора данных, оставляя пользователя в ожидании

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

Как только вы выполните базовую проверку, вы можете посмотреть на оптимизацию требуемого доступа к БД, уточнение правил и т. Д. Для соответствия вашей конкретной схеме. Вы также можете взглянуть на функцию match () MySQL для обработки подобного текста.

4 голосов
/ 01 сентября 2008

Johannes:

@ PConroy: Это была моя первая мысль. Самое интересное - найти хорошие правила преобразования для разных частей адреса! Любые хорошие предложения?

Когда мы работали над этим типом проекта ранее, наш подход заключался в том, чтобы взять существующий корпус адресов (150 тыс. Или около того), а затем применить наиболее распространенные преобразования для нашего домена (Ирландия, поэтому «Dr» -> «Диск» "," Rd "->" Дорога "и т. Д.). Боюсь, в то время не было исчерпывающего онлайн-ресурса для таких вещей, поэтому мы в конечном итоге сами составили список, проверили такие вещи, как телефонная книга (там есть место, адреса сокращаются во всех отношениях! ). Как я упоминал ранее, вы будете удивлены, сколько «дубликатов» вы обнаружите, если добавить только несколько общих правил!

Я недавно наткнулся на страницу с довольно полным списком сокращений адресов , хотя это американский английский, так что я не уверен, насколько это было бы полезно в Германии! Быстрый гугл обнаружил пару сайтов, но они казались ловушками для рассылки спам-рассылок. Несмотря на то, что я гуглял по-английски, вы можете больше взглянуть на «немецкие сокращения адресов» на немецком языке:)

2 голосов
/ 02 сентября 2008

Другое возможное решение (при условии, что вам действительно нужны надежные адресные данные, а вы не просто используете адреса для предотвращения дублирования учетных записей) - это использовать стороннюю веб-службу для стандартизации адресов, предоставляемых вашими пользователями.

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

Если все адреса пользователей проходят этап стандартизации и в вашу БД сохраняются только стандартизированные адреса, то поиск дублирующих записей должен быть значительно упрощен, поскольку вы сейчас сравниваете яблоки с яблоками.

Одной из таких сторонних услуг является Интерактивная служба Global Address , которая включает Германию в список поддерживаемых стран, а также имеет онлайн-демонстрацию, демонстрирующую, как работает их служба (демонстрационную ссылку можно найти на этой странице. веб-страница).

Есть очевидный недостаток этого подхода. Однако с положительной стороны:

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

Отказ от ответственности: я не работаю на Глобальный адрес и не пробовал пользоваться их услугами. Я просто привожу их в качестве примера, поскольку у них есть онлайн-демонстрация, с которой вы можете поиграть.

2 голосов
/ 01 сентября 2008

Одна вещь, на которую вы, возможно, захотите взглянуть, - это Soundex поиски, которые весьма полезны для опечаток и сокращений.

Это, однако, не проверка в базе данных, поэтому она может или не может быть то, что вы ищете.

2 голосов
/ 01 сентября 2008

Прежде чем вы начнете искать дубликаты адресов в вашей базе данных, вы должны сначала убедиться, что вы храните адреса в стандартном формате.

В большинстве стран есть стандартный способ форматирования адресов, в США это система USPS CASS: http://www.usps.com/ncsc/addressservices/certprograms/cass.htm

Но в большинстве других стран аналогичный сервис / стандарт. Попробуйте этот сайт для более международных форматов: http://bitboost.com/ref/international-address-formats.html

Это не только помогает находить дубликаты, но и экономит ваши деньги при отправке писем вашим клиентам по почте (плата за почтовые услуги меньше, если адрес в стандартном формате).

В зависимости от вашего приложения, в некоторых случаях вам может потребоваться сохранить адресную запись «тщеславия», а также стандартную адресную запись. Это делает ваших VIP-клиентов счастливыми. Адрес «тщеславия» может быть что-то вроде:

62 Западная девяносто первая улица
Квартира 4D
Манхэттен, Нью-Йорк, Нью-Йорк 10001

Хотя стандартный адрес может выглядеть следующим образом:

62 Вт 91ST ST APT 4D
НЬЮ-ЙОРК NY 10024-1414

1 голос
/ 04 июля 2017

Машинное обучение и ИИ имеют алгоритмы для поиска сходства строк и дублирования мер.

Связывание записей или задача сопоставления эквивалентных записей которые отличаются синтаксически - впервые был исследован в конце 1950-х годов и 1960-е гг.

Вы можете представить каждую пару записей, используя вектор функции, которые описывают сходство между отдельными полями записи.

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

  1. Вы можете использовать общие или настроенные вручную метрики расстояния для оценки сходства потенциальных дубликатов.

  2. Вы можете использовать адаптивные алгоритмы сопоставления имен, такие как метрика Jaro, которая основана на количестве и порядке общих символов в двух строках.

  3. Токеновое и гибридное расстояние. В таких случаях мы можем преобразовать строки s и t для мультимножеств токенов (где каждый токен является словом) и учитывают метрики подобия для этих мультимножеств.

1 голос
/ 13 октября 2011

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

В Соединенных Штатах есть часть адреса, называемая штрих-кодом пункта доставки. Это уникальный 12-значный номер, который идентифицирует одну точку доставки и может служить уникальным идентификатором адреса. Чтобы получить это значение, вам нужно использовать API веб-службы проверки адреса или стандартизации адреса, который может стоить около 20 долларов США в месяц в зависимости от объема запросов, которые вы к нему делаете.

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

1 голос
/ 01 сентября 2008

Чтобы добавить ответ на свой вопрос:

Другой способ сделать это - запросить у пользователя номер мобильного телефона, отправить ему текстовое сообщение для проверки Это останавливает большинство людей возиться с дублирующимися адресами.

Я говорю из личного опыта. (спасибо pigsback !) Они ввели подтверждение по мобильному телефону. Это остановило меня, имея 2 аккаунта! : -)

0 голосов
/ 04 сентября 2018

Это старый вопрос, но другой подход состоит в том, чтобы вычислить расстояние Левенштейна до адресов, и таким образом вы можете найти уже существующие, которые очень похожи. Вы можете увидеть больше здесь. Поиск дублирующих адресов с использованием метрики расстояния Левенштейна в SQL.

...