Я искал онлайн для этого, но на самом деле не нашел. В основном мне нужно сравнить кучу адресов, чтобы увидеть, соответствуют ли они. Адреса могут быть написаны по-разному. Например: 1345 135-й NE, 1345 NE 135TH ST и т.д. Кроме того, они могут быть на разных языках. Прежде чем я попытаюсь написать какой-либо алгоритм сопоставления синтаксического анализа, кто-нибудь знает какие-либо библиотеки или способы, которыми я мог бы легко это сделать? Мой друг, хотя и использует веб-сервис google или bing, передает им адрес и возвращает геокоординированные координаты и сравнивает их с использованием координат вместо соответствия строк. Но тогда я должен позвонить в веб-службу тысячи раз за все эти адреса, которые у меня есть, не очень элегантные;) Любая помощь будет приятной:)
Мне нужен алгоритм сопоставления адресов
Ответ 1
Я не думаю, что это проблема типа REGEX. Сначала вы сначала конвертируете в сопоставимый формат.
Существует несколько веб-сервисов/продуктов, которые будут стандартизировать адрес для вас. Bing для "API стандартизации адресов USPS", и вы найдете массу информации. После стандартизации адреса сравнение должно быть простым.
http://www.bing.com/search?q=usps+address+standardization+api&go=&form=QBRE&qs=n&sk=&sc=1-32
В качестве альтернативы вы можете GeoCode адрес получить набор координат, а затем сравнить их.
Ответ 2
Я нашел 2 варианта.
Во-первых, возможно, вместо того, чтобы принимать какие-либо данные, вы позволяете пользователям выбирать из ограниченного числа опций, аналогично тому, как facebook имеет дело с адресами. Если вы используете автозаполнение api, по мере их ввода, возможные адреса будут сужаться api. Вот один из google:
http://code.google.com/p/geo-autocomplete/
Во-вторых, поиск и отбор адресов (но они не бесплатны):
https://www.craftyclicks.co.uk/
https://smartystreets.com/ (ранее квалифицированный адрес)
https://www.alliescomputing.com/ (ранее предлагаемые мировые адреса)
Ответ 3
Адреса США могут (обычно) быть однозначно представлены 12-значным номером, который называется точкой доставки (DPBC). Этот номер состоит из полного 9-значного почтового индекса и трехзначного номера точки доставки. Это то, что используется для формирования штрих-кодов на почтовых отправлениях для ускорения доставки. Использование службы, сертифицированной CASS, может обеспечить 12-значную точку доставки и даже дублировать флага для вас.
В интересах полного раскрытия я работаю для SmartyStreets, который ранее был Квалифицированным адресом, о котором упоминалось в другом ответе Mowgli.
Мы предоставляем API, который можно запросить, а также службу пакетной обработки (которая будет указывать дубликаты, как описано выше).
Имейте в виду, что даже 12-разрядный DPBC не всегда однозначно идентифицирует конкретный адрес. Это происходит часто, когда определенный уличный блок или 9-значный почтовый индекс имеет длинный участок домов с аналогичными первичными номерами. В этих случаях лучше всего использовать службу CASS для стандартизации и проверки адресов, а затем использовать их для удобного сравнения. (Но, как сказано, дубликаты уже будут отмечены некоторыми службами CASS.)
Обновить: SmartyStreets теперь предоставляет подтверждение международного адреса.
Ответ 4
Существует библиотека python с открытым исходным кодом для разрешения дедупликации/сущности записи, которая может применяться для сопоставления адресов: Dedupe.
Он бесплатный и может работать на ноутбуке, в отличие от огромного сервера.
Ответ 5
Я бы не рассматривал эту проблему в регулярном выражении.
Одним из бесплатных инструментов, которые могут быть полезны, является usaddress, библиотека python для парсинга адресов. Он отлично работает во всех форматах адресов, b/c использует вероятностный подход, а не подход с регулярным выражением (хотя он сделан для адресов в США и может плохо работать на адресах на других языках) http://usaddress.readthedocs.org/en/latest/
Разбор адресов не решит вашу проблему на 100%, но сравнение двух адресов, особенно адресов с различными форматами, будет намного проще, если адреса будут разделены на их соответствующие компоненты (чтобы вы могли сравнивать улицу # с улицей #, город против города и т.д.)
Затем для сравнения записей вы можете использовать dedupe - еще одну бесплатную библиотеку python. http://dedupe.readthedocs.org/en/latest/
Ответ 6
Для этого требуется разумное выполнение; компьютеры не интеллектуальны.
Простой алгоритм может рассказать вам, какие адреса имеют что-то общее, например, "1345 135th NE NE" и "1345 NE 135TH ST" имеют номер "1345".
У вас тогда будет меньше, чтобы сравнить себя. Это также уменьшило бы число, которое вы геолокатируете.
Ответ 7
Вам нужно программное обеспечение CASS как это за методы дублирования обнаружения описанный здесь.
Ответ 8
Это определенно не проблема REGEX. Это 2018 год, и у нас есть руки на более продвинутые методы еще. И R, и Python предлагают решения для проблем такого типа
В R: https://cran.r-project.org/web/packages/RecordLinkage/index.html
В Python: https://recordlinkage.readthedocs.io/en/latest/about.html