Как в произвольном тексте найти почтовые адреса?

У меня на входе есть произвольный текст. Есть еще сервис адресов, по которому можно проверить на правильность и единообразие.


Каким образом устроить обработку входящего произвольного текста так чтобы найти в нем адреса? Например: город Марганец, ул. Кибальчича 4.


Я предполагаю что это лучше всего делать в несколько этапов.

1. Вытащить кусок текста в районе ключевых слов: улица, город, дом;

2. Дальше хочется автоматизировать процесс и видится обучающаяся система на примерах человеческого обучения;


Возможно есть еще какие-то идеи?
  • Вопрос задан
  • 7036 просмотров
Решения вопроса 1
@fatum Автор вопроса
Итак. Подведу итоги своих изысканий.

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

Я выбрал направление машинного обучения.
В этом случае мне не придется самому создавать шаблоны, находить зависимости и т.д.

Поэтому записался на 2 курса в coursera.org:
Machine Learning — www.coursera.org/course/ml
Web Intelligence and Big Data — www.coursera.org/course/bigdata
Ответ написан
Пригласить эксперта
Ответы на вопрос 10
@marazmiki
Укротитель питонов
@MikhailEdoshin
Вычленяете регулярками токены, то есть роли слов. У вас будут роли для служебных слова разметки (г., ул., д, корп., кв., плюс варианты) и роли для прочих слов, которые можно подразделить на известные города и типичные улицы (Москва, Ленина, Мира), числа, почтовые индексы и единая роль НЕИЗВЕСТНО для всех прочих слов.

Если в тексте нашлись токены, известный город, улица, или (в зависимости от текста), даже просто число, то это сигнал — возможно, это адрес. Вычленяете список токенов, после чего разбираете уже список. Например, получилось «ИЗВЕСТНЫЙ-ГОРОД УЛ НЕИЗВЕСТНО ЧИСЛО». Скорее всего (99%) за НЕИЗВЕСТНО находится название улицы. Или НЕИЗВЕСТНО НЕИЗВЕСТНО ЧИСЛО ДЕФИС ЧИСЛО — может быть (50%) короткая запись адреса вроде «Тыгдым, Северная, 25-12». Вероятности условные, конечно :) Таких паттернов будет относительно немного, их уже парсить куда проще. В простейшем случае можно завести таблицу распознаваний «ИЗВЕСТНЫЙ-ГОРОД УЛ НЕИЗВЕСТНО ЧИСЛО -> ИЗВЕСТНЫЙ-ГОРОД УЛ НАЗВАНИЕ-УЛИЦЫ ЧИСЛО»

Если правила для паттерна нет, запоминайте этот случай, чтобы потом разработчик мог его улучшить. Плюс можно запоминать только что распознанные улицы и сопоставлять в каком городе какие улицы есть. Это простейший, конечно, алгоритм, но он вполне будет работать.
Ответ написан
No_Time
@No_Time
Так не за что извиняться. Суть отражена крайне точно, решение предложено лучшее, так что все ок=)
Ответ написан
parkee
@parkee
Кто-то плохо знает регулярки ;) Все это вычленяется, включая все разнообразие форматом записи телефонов. Хотя, конечно, не со 100% точностью. Индекс, кстати, бывает вообще словами. Во всяких британиях, например. А город/улицу/телефон сливать в данные об одном и том же месте, если они находятся в пределах одного или соседних предложений можно, как вариант. В общем тут все сильно завязано на конкретный текст. Универсального ответа нету. Гору не так уж и часто сокращают, но можно и отфильтровать по словарю, хотя опять же зависит от текста/задачи/объема.

И, да, не забудем мы про регулярки ;) Во всех системах обработки естественного языка так или иначе задействованы регулярки. Если есть время, можете попересматривать тот курс по NLP nlp-class.org Все должно прояснится.
Ответ написан
Juggler
@Juggler
Не сочтите за рекламу, просто сам пользуюсь — ahunter.ru
Ответ написан
akhmelev
@akhmelev
программист
По идее без базы городов и адресов задачу решить вообще довольно сложно.

Например «Луганск Оборонная 39» мало отличается от обычного текста, если заранее неизвестно что речь о городе и улице.
В то же время гугл находит о каком адресе речь: my.jetscreenshot.com/226/20120819-yhtt-39kb
Вывод: если приложение ненагруженное можно просто покопать api гуглокарт, иначе только свою базу нужно.
Ответ написан
@fatum Автор вопроса
В целом как вычленить строку похожую на почтовый адрес — я понимаю, но вопрос больше в общем алгоритме задачи.
Мне не нужны точные конкретные решения. Я ищу примерный, но понятный подход к решению данной проблемы.

Вот я знаю что есть такая реклама которая сама выискивает ключевые слова на странице и делает их ссылками. Это немного из той же оперы, но на много сложнее )))
Ответ написан
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
хорошо.
тогда вот Вам, например г. Блабла, *слова текста* ул. Блабла Блабла, 01101, т.123-12-12

сокращений, общепринятых не так много, можно и попробовать. но г — гора, город, после Блабла в названии улицы точки/запятой моет и не быть, индекс вроде 5 знаков по миру, а вот номера телефонов могут писать как попало.

А зачем Вам это надо, собственно?
Ответ написан
@fatum Автор вопроса
Да забудьте вы про регулярки )
Обрезать текст по минимуму, я понял, не проблема.

А вот дальше. Реально обучить систему находить адрес или все перебирать прийдется?
Ответ написан
@fatum Автор вопроса
Если есть высказать — пишите в любом случае.
Спасибо
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы