- PVSM.RU - https://www.pvsm.ru -
Привет!
Мы в HumanFactor парсим адреса в особо крупных размерах. Наши продукты упрощают [1] ввод контактных данных и работу с ними.
За 10 лет работы в результате анализа многочисленных исключений в российских адресах мы выработали правила хранения адресов, при соблюдении которых вы не потеряете важную информацию.
Недавно на Хабре нас попросили привести примеры необычных адресов, в связи с чем и написана эта статья.
Начнем с моего любимого места – города Электростали в Московской области. Как в любом уважающем себя городе, в нем есть проспект Ленина. Советское время кончилось, а проспект растёт и развивается. Недавно там построили новые дома.
Обычно при строительстве новых домов им присваивают номера в порядке продолжения. Если строительство домов происходит с начала улицы, где помещать рядом с домом 1 дом 36 нелогично, то просто начинают новую улицу.
Строительство новых домов на этом проспекте было запланировано с его начала. Однако новую улицу решили не делать, а продлить проспект Ленина, прибавив цифру 0 слева от номера новым домам.
То есть адреса Электросталь пр Ленина 4 и Электросталь пр Ленина 04 — это два разных адреса.
К сожалению, этот случай в России не единственный.
Вывод: храните номер дома как строку, чтобы не потерять лидирующий ноль.
Кстати, недавно нам пришёл такой адрес от клиента: 675018, Амурская, Моховая падь п, дом Л-1. Необычный дом, не правда ли? Мы не нашли его на картах, но он есть в ФИАС. Мы пока разбираемся, насколько корректно существование дома с лидирующей литерой, но вполне вероятно, что дом существует, так как его указал реальный клиент.
Бывает, что в городе две улицы называются одинаково. Например, в Москве две улицы 8 марта. Различить их можно только по индексу.
Или, например, Россия, Архангельская область, Устьянский район, деревня Бережная на карте Яндекса встречается в трёх местах. Не знаешь индекс — письмо не дойдёт.
Вывод: сохраняйте почтовый индекс объекта.
Индексы важны, но не всегда достаточны для определения улицы и даже населённого пункта. Бывает, что у разных населённых пунктов один и тот же почтовый индекс:
То есть крайне важно хранить тип населённого пункта.
То же самое относится и к типам улиц: если в Яндексе набрать “Москва Пушкинская” и нажать “Найти”, то Яндекс покажет Пушкинскую набережную, хотя есть ещё улица и площадь.
Вывод: сохраняйте тип населенного пункта и улицы.
Иногда мы встречаем адреса без улицы. Редко — в городах, чаще — в населённых пунктах. Адрес “Алтай, пгт Шебалино, дом 2” действительно существует (и там готовят вкусные пирожки).
Случается, что у дома нет номера, только корпус. Так, например, живут люди в Зеленограде и микрорайоне Супонево в Звенигороде: Звенигород, Супонево, корп 1.
Вывод: если при сохранении адреса в базу у вас включена проверка на пустые значения, то:
Номер дома определяет отдельное сооружение. Литеры — это строения, пристройки и т.п., находящиеся на территории дома. Например, если дом имеет номер 4, то его пристройка может иметь номер 4А1, подвал — 4Б1, забор — 4I, строение — 4В, щитовая в отдельном сооружении — 4Г.
Правила литерования действуют по всей России, но только в Питере их особенно любят. Адрес, содержащий несколько литер, — нормальная ситуация для Питера: г. Санкт-Петербург ул. Маркина, д. 16Б, литера А.
Некоторые литеры легко перепутать с номерами: литера З похожа на цифру 3 (как бы вы прочитали адрес Москва Звездный 23 с З?), литеру Ч в рукописном шрифте можно спутать с четвёркой. Литеры Й и Я выглядят как сокращения (Дом 4й — это 4 литер й или четвертый?).
Можно разделять номер дома и литеру словом “литер”, чтобы адреса вроде Звездного бульвара воспринимались более однозначно. Например, так: Москва Звездный 23 литер З.
Выводы:
На этом всё. В качестве примера посмотрите структуру ответа, который возвращает API Dadata.ru [2]. При такой структуре хранения адреса описанные выше проблемы не должны вас коснуться.
Автор: AlexGechis
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/algoritmy/92317
Ссылки в тексте:
[1] упрощают: http://habrahabr.ru/company/hflabs/blog/213679/
[2] API Dadata.ru: http://dadata.ru/api/clean/#response
[3] Источник: http://habrahabr.ru/post/260601/
Нажмите здесь для печати.