2013-06-13 3 views
1

Я разрабатываю приложение для сопоставления адресов с использованием API геокодирования Google. Проблема заключается в том, что некоторые из адресов в базе данных я пытаюсь проверить это что-то вроде:Извлечь соответствующий адрес из строки?

Attn: Г-н Томас WONG 2457 Yonge St., Toronto, ON, N2S 2V5, Канада

а не

2457 Yonge St., Toronto, ON, N2S 2V5, Канада

Первая строка возвращает нулевые результаты (потому что он начинается с имени человека), второй будет проверять и возвращать полный верный адрес.

Мой вопрос: что было бы правильным подходом к этой проблеме? Я думаю о способе извлечь только соответствующую часть из адресной строки (с некоторой функцией), но, возможно, есть лучшие идеи?

Спасибо, М.Р.

+0

Все ли адреса в Канаде? Некоторые из них в США? – Jeffrey

ответ

2

Если желаемая часть адреса всегда начинается с номера, попробуйте следующее:

  1. найти первую цифру в строке.
  2. получить подстроку от первой цифры до конца строки.
  3. у вас есть адрес.

Для того, чтобы анализировать адреса, вам необходимо знать все возможные форматы.

  • Санта, Северный полюс:

    вам необходимо включить ли.

  • Королева, Большой британия
  • Captian Hootberry
  • Боб Goldenberry, сельский маршрут 7, MN
  • Джеки Blam, ЗЗ Box 78, Hootville, OH

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

+1

Это будет работать для некоторых адресов, но не для всех, например, у меня может быть: LISA ANDREW P.O. BOX 55, Kingston, ON, H5F 3C9, ON, Canada и т. Д. Я думал, что может быть какое-то приложение для проверки адреса, которое может решить проблему ... –

+0

Этот подход будет работать, но делает некоторые сильные предположения о вводе. Не могли бы вы расширить его, чтобы включить больше сценариев, и справиться с общими краями? – Matt

+0

Этот подход не делает предположений. прочитайте первую строку «если желаемая часть адреса всегда начинается с числа». PO Box 55 находится вне этого решения. Если вам нужно больше парсинга адресов, покажите все возможные форматы ввода. В то время, когда этот ответ был написан, он охватывал все перечисленные форматы ввода. – DwB

2

Я работаю на SmartyStreets и написал the address extractor which we now offer с API LiveAddress. Это тяжело. Есть много предположений, которые вам нужно заставить не делать, в том числе «если адрес начинается с номера». (Извините, DwB - есть много, чтобы рассмотреть.)

Если у вас есть адреса США, вы все равно можете найти наш инструмент полезным (его можно бесплатно зарегистрировать и использовать, до определенной точки). Вот еще один пост переполнения стека об утилите для извлечения: https://stackoverflow.com/a/16448034/1048862

Лучший способ сделать это - использовать службу проверки адресов, которая может проверять точки доставки, а не только диапазоны адресов (что наиболее часто встречается, поэтому опасаясь претензий на «проверку адреса», когда это действительно угадывает в определенных пределах).

Помните, что Google не проверяет адреса. Он может стандартизировать их и будет возвращать результаты, если бы адрес был бы, если он был реальным, и если он действительно действителен, это ваш счастливый день.

+0

Очень интересный Мэтт, похоже, именно то, что я ищу! Я попытаюсь посмотреть, работает ли он с канадскими адресами (наша база данных содержит в основном канадских клиентов). –

+0

Хотел бы я сказать, что это работало в Канаде. Если вам нужна система для извлечения канадских адресов, посмотрите на API, предоставленный CanadaPost, возможно ... вам нужно будет следовать некоторой логике, предложенной DwB, но обязательно учтите почти все распространенные варианты канадских адресов. – Matt

+0

@ user441637 SmartyStreets только что начал предлагать проверку международного адреса – camiblanch