2017-01-16 24 views
1

Я пытаюсь идентифицировать и извлекать любое местоположение входного адреса (не только US - SmartyStreet) из длинной строки текста, используя php на моем xampp.Как определить местоположение адреса из текстовой строки php?

Я прочитал несколько тем/библиотек о том, как это сделать, что вращается вокруг использования NLP, API геокодирования Google и регулярного выражения для выполнения вышеупомянутой задачи. Эти 3 ссылки являются некоторой правдоподобной ссылкой, которая может помочь Link 1, Link 2, Link 3/GitHub Library(Seems Promising).

Однако я не знаю, могут ли эти ссылки оказать какую-либо помощь в реализации? Может ли кто-нибудь помочь мне с этим?

ответ

3

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

Вот некоторые хорошие сборники форматов адресов, но даже они не всегда согласны:

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.