Общий анализатор адресов для произвольного текста - PullRequest
9 голосов
/ 05 июня 2009

У нас есть программа, которая отображает данные карты (например, Google Maps, но с гораздо большей интерактивностью и пользовательскими слоями для наших клиентов).

Мы разрешаем навигацию через набор полей со списком, в которых определенные поля предварительно заполнены кучей данных (например, Страна: Канада, заполнено поле Провинция. Выберите Онтарио, и заполняется список округов / регионов. Выберите округ / регион, город заполнен и т. д.).

Хотя это гарантирует точные адреса, пользователям будет больно, если они не знают, где находится уличный адрес или город (т. Е. В каком округе / регионе находится кухонный комбайн?).

Итак, мы пытаемся создать анализатор адресов с текстовым полем произвольной формы.

Пользователь может ввести что-то вроде этого (например, Google Maps, Bing Maps и т. Д.): 22 Main St, Kitchener, On

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

Проблема в том, как правильно распределить информацию? Как мы разбиваем разделы и находим возможные совпадения? Я предполагаю, что мы не будем гарантировать, что пользователь будет вводить данные в формате, который мы всегда ожидали (очевидно). В качестве продолжения этого было бы, как представить данные, если мы не найдем точное совпадение (или не найдем несколько точных совпадений ... например, два города с одинаковым названием улицы в разных округах).

У нас есть тонна данных, доступных в картографических данных (в основном это формат вкладки mapinfo). Таким образом, мы можем быстро просмотреть названия улиц, городов, штатов и т. Д. Но я не уверен в том, как лучше подходить к этой проблеме. Конечно, было бы неплохо использовать Карты Google, но большинство наших клиентов находятся в закрытых сетях, где внешний доступ обычно не разрешен, и большинство из них не хотят полагаться на карты Google (поскольку они не содержат столько информации, сколько им нужно , например, пользовательские слои карты). Очевидно, что они могли бы зайти в Google и найти правильное местоположение, а затем перейти к нашему программному обеспечению, но это потребовало бы много времени, и скорость процесса может быть весьма важной.

Ответы [ 4 ]

6 голосов
/ 05 июня 2009

По сути, это класс проблемы разрешения именованных объектов. NER в Википедии

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

Я имел большой успех с Java NLP и средой машинного обучения под названием GATE , а их библиотека преобразователей называется Jape. Посмотрите на их графический интерфейс и используйте его для написания Java-кода!

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

Xyz, Blah St,
Foo City, 11110, CA

будет переведено на

Place: Xyz
Street: Blah St
City: Foo
...

И тогда вы можете использовать свою базу данных мест для проведения матчей.

Jape также поддерживает поиск по словарю, помимо правил - поэтому, если у вас уже есть «Blah St» в вашей базе данных и у него 2 родителя - город Foo и Bar - вы просто устраните неоднозначность, анализируя следующую строку.

Редактировать: GATE включает в себя инструмент под названием ANNIE - систему извлечения информации, с которой можно поиграться, чтобы идентифицировать адреса. При этом используются некоторые встроенные правила Jape, на которые вы можете опираться.

3 голосов
/ 27 мая 2013

Кстати, вы видели новую конечную точку API, с которой экспериментирует SmartyStreets? Извлекает адреса из текста, проверяет их и преобразует их в компоненты.

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

0 голосов
/ 02 мая 2018

Geocoder.ca очищает, стандартизирует и геокодирует строки адреса местоположения. Он также добавляет почтовый индекс, часовой пояс и код города.

Например: https://geocoder.ca/22%20Main%20St,%20Kitchener,%20On?geoit=xml

<geodata>
        <latt>43.286272</latt>
        <longt>-80.445823</longt>
     <postal>N0B1E1</postal>
<Dissemination_Area><dauid>35300802</dauid><adauid>35300042</adauid></Dissemination_Area>
<AreaCode>226,519</AreaCode>
<TimeZone>America/Toronto</TimeZone>
<standard>
<stnumber>22</stnumber><staddress>Main ST</staddress><city>Kitchener</city><prov>ON</prov><confidence>0.7</confidence></standard>
</geodata>
0 голосов
/ 23 мая 2013

Симсон Гарфинкель работал над своей изящной адресной книгой для NeXTstep (которая была позже скомпилирована и обновлена ​​для Mac OS X и представлена ​​на конкурс Apple Design). С тех пор он был открыт и доступен на его веб-сайте ниже:

http://simson.net/ref/sbook5/

...