Это, безусловно, святой грааль парсинга адресов. Несколько вещей, которые следует учитывать при атаке на этот проект. Во-первых, каждая страна может иметь свой собственный формат адресации. Насколько это было бы хорошо, нет стандартного формата адресации.
Вот некоторые хорошие сборники форматов адресов, но даже они не всегда согласны:
Address formats by Informatica
Address formats by Universal Postal Union
Address formats by a guy who has spent a lot of time thinking about this kind of stuff
Шаг 1 - После того, как вы ознакомитесь со всеми возможными форматами адресов для каждой страны, вы можете сгруппировать похожие форматы и создать регулярное выражение для каждой группы.
Этап 2 - Это очень важно. Сделайте все возможное, чтобы определить страну, к которой может относиться адрес. Это позволит вам узнать, какое регулярное выражение использовать. Если вы не можете этого сделать, у вас может быть много разных кандидатов адресов.
Шаг 3 - Используя регулярное выражение, просмотрите исходный текст, чтобы определить потенциальные горизонты, начальную и конечную точки для адреса. В США адреса обычно начинаются с номера дома и заканчиваются почтовым индексом (5 или 9 или одиннадцать цифр). В Германии адреса обычно начинаются с названия улицы и заканчиваются городским или государственным или почтовым кодом.
Шаг 4 - Теперь просмотрите этот кандидат для определения различных компонентов адреса, основываясь на вашем понимании шаблона форматирования для этой страны.Найдите следующие компоненты:
- основной номер
- улицы предварительно направленной (помогает иметь индекс всех возможных значений)
- название улицы (помогает иметь индекс все возможное значения)
- улица суффикс (помогает иметь индекс всех возможных значений)
- улицы пост-направленный (помогает иметь индекс всех возможных значений)
- среднее число обозначение (помогает иметь индекс всех возможных значений)
- среднее число
- город (помогает иметь индекс из всех возможных значений)
- состояние (помогает иметь индекс всех возможных значений)
- почтовый индекс
(есть намного больше, но это хорошее начало)
Шаг 5 - Если вы хотите, чтобы определить строку, которая выглядит как адрес, вы сделали. Подайте эту строку в инструмент геокодирования и получите соответствующий ему lat/lon. Google Maps или OpenStreetMap должны быть в состоянии сделать трюк для вас.
Если вы хотите узнать, действительно ли адрес действителен (как в совпадении с известной записью в авторитетном наборе данных, например, в местном почтовом отделении), вам необходимо использовать инструмент проверки адреса, например, Разыщу с помощью простого поиска Google:
Google Search: "address validation"
Полного раскрытия: Я провожу много времени, думая об этой самой теме, пытаясь найти различные способы ее решения, и объясняя это большое количество людей. Я работаю по международным адресам в течение всего дня на SmartyStreets.