ФИАС, ГАР и «Дадата»

ФИАС, ГАР и «Дадата» ГИС ЖКХ

В России единый справочник адресов ведет Налоговая служба. Адреса из муниципальных образований по всей стране стекаются в налоговую, где их записывают в специальную базу.

Налоговая служба предоставляет справочник адресов всем желающим в виде выгрузок. Есть три разных формата выгрузок:

КЛАДР. Самый старый формат. Больше не принимается гос. органами, но по-прежнему выгружается. Включает только административно-территориальное деление.

ФИАС. Основной формат до августа 2021 года. Больше не выгружается. Включает только административно-территориальное деление.

ГАР. Основной формат с сентября 2021 года. Включает муниципальное и административно-территориальное деление.

«Дадата» работала на основе выгрузки ФИАС, но в октябре 2021 перешла на ГАР. В «Подсказках» используются оба деления, в «Стандартизации» только административно-территориальное.

Посмотреть адреса в ГАР можно на сайте налоговой.

ФИАС ID и ГАР ID

Чтобы уникально идентифицировать каждый адрес в справочнике, налоговая назначает ему ID. Например, у адреса «г Москва, ул Сухонская» такой идентификатор (этот формат называется GUID):

В ГАР идентификаторы в формате GUID сохранились без изменений (теперь они называются Object GUID), но дополнительно к ним добавились целочисленные идентификаторы (Object ID). Например, у адреса «г Москва, ул Сухонская» теперь два идентификатора — один GUID (как был в ФИАС) и один ID (целочисленный):

«Дадата» пока продолжит использовать идентификатор в формате GUID. Возможно, добавим целочисленные идентификаторы в будущем.

Пока, ФИАС! Рассказываем, как устроен адресный справочник ГАР

Время на прочтение

1 сентября 2021 года ФНС перестала обновлять свой адресный справочник в формате ФИАС. Относительно новый ГАР внезапно стал единственным государственным адресный реестром, доступным общественности. Рассказываем, что из себя представляет новый справочник и чем он отличается от ФИАС.


ФИАС, ГАР и «Дадата»

Та самая историческая новость. До нее в смерть ФИАС особо не верили. В конце концов, ФНС уже 10 лет обновляет КЛАДР — предшественника ФИАС

А теперь — о ГАР.

Что такое ГАР

ГАР — это государственный адресный реестр, который содержит адреса «объектов налогообложения». То есть всего, с чего ФНС собирает налоги: участков, домов, квартир и тому подобного. Именно поэтому справочником управляет Федеральная налоговая служба. Ведомство собирает, обновляет и выкладывает упорядоченные адреса в общий доступ на своем сайте.

Поскольку налогом облагается почти вся недвижимость и земля, адресный справочник ФНС — самый полный из доступных простым смертным. Поэтому бизнес использует ГАР как эталонный источник адресов. А регуляторы требуют указывать в отчетности адреса по ГАР, потому что это официальный справочник.

Допустим, кредитная организация сдает Центробанку отчетность по банкоматам. Требование регулятора к отчету: адреса указывать строго в формате справочника ФНС.

Или будничный пример: человек заказывает пиццу. Когда он вводит адрес, форма заказа предлагает подсказку-автозаполнение. Надежные подсказки разработчики достают из ГАР, самого полного общедоступного источника.

Подсказки нашего проекта DaData получают адреса как раз из ГАР

Как жили до ГАР

До января 2012 года в России государственный классификатор адресов вели в формате КЛАДР 4.0. При этом пользователи массово жаловались на неточности: состояние справочника эмоционально характеризовали как «бардак».

Потом появился ФИАС, но изменилась только структура справочника, а не содержание. Вот один из характерных отзывов о ФИАС.

Адреса ведут муниципалитеты. Там и так бардак, и добавление этой функции порядка не добавит. О синхронности действий муниципалитетов говорить вообще не приходится. Для примера — одно шоссе, проходящее через три муниципалитета, будет введено три раза под отдельными номерами. Возможно, это не баг, а фича, но «не плодите сущности без меры» никто не отменял.

Как и КЛАДР 4.0, ФИАС содержал адреса только в административном делении. Это ключевое отличие старых форматов от ГАР, поэтому остановлюсь подробнее.

Административное деление территории России — одна из систем, по которой власти структурируют территорию страны.

Взглянув на такой адрес, видишь административную систему территориального управления. То есть какой субъект какой территорией управляет.

Адрес Новосибирская обл, Новосибирский район, тер. С НТ Яблоневый сад показывает, что управление СНТ Яблоневый сад подчиняется властям Новосибирского района, а те, в свою очередь — правительству Новосибирской области.

До сентября 2021 года бизнес спокойно пользовался адресным справочником в формате ФИАС. Казалось, это навсегда, пока не закончилось. ( При этом налоговая все еще выгружает КЛАДР. Правда, обещает, что прекратит в конце 2022 года).

Зачем понадобился новый справочник

ГАР потребовался потому, что российские власти провели реформу местного самоуправления. Они добавили к административной системе управления еще одну — муниципальную.

Так вот, в новый справочник включили адреса в муниципальном делении. Поэтому ГАР хранит адреса в двух типах делений. Это не единственное его отличие от ФИАС и КЛАДР, но самое важное.

В муниципальном делении территории России появились муниципальные образования. Это структуры, которых нет в административной системе управления. Например, муниципальные округа, сельские и городские поселения.

По адресу в муниципальном делении видно, какой орган муниципальной власти какой территорией управляет.

Что характерно, адрес в муниципальном делении порой совершенно не похож на адрес в административном.

Административное деление: Калужская обл, Людиновский район, деревня Кургановка, дом 1.

Муниципальное деление: Калужская обл, муниципальный район Людиновский, сельское поселение деревня Заболотье, деревня Кургановка, ул. Центральная, дом 1.

В административной цепочке у этого адреса нет улицы. Дом принадлежит напрямую населенному пункту.

Адреса разных форматов особенно отличаются, когда границы и названия муниципальных и административных образований сильно разнятся. Например, если административный округ включает в себя несколько муниципальных районов. Или административный район — это несколько муниципальных образований.

Согласно административному делению в Свердловскую область входит Алапаевский район. В муниципальном делении Алапаевский район разбит на муниципальные образования — Алапаевское и Махнёвское.

Поскольку адреса в разных делениях выглядят по-разному, ФИАС утратил универсальность. Его больше нельзя использовать везде. Например, если государство потребует от бизнеса отчеты с адресами в муниципальном делении, административное посчитают ошибкой. Регуляторы за такое наказывают.

Пока адреса в муниципальном делении указывают лишь ведомства, оказывающие муниципальные услуги. Чаще всего МФЦ. Остальным  регуляторы разрешают отчеты в привычном формате. Но как долго это продлится, неясно: требования могут изменить так же резко, как убрали ФИАС. Переходить на ГАР лучше заранее.

Про ГИС ЖКХ:  Оставайтесь на вершине своих долгов с помощью этих простых советов

Как получить доступ к ГАР

ФНС выкладывает полный ГАР и обновления к нему в среднем два раза в неделю. Иногда сначала публикуют только полный справочник или только обновления, а остальное — через день-два. Ф НС маркирует такие выгрузки одной датой.


ФИАС, ГАР и «Дадата»

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

Налоговая публиковала ФИАС в двух форматах: xml и dbf. Г АР выгружают только в виде xml-файлов.

Как выглядит структура справочника

Архив с ГАР весит ≈31 Гб, распакованный занимает ≈234 Гб. Справочник потяжелел почти в три раза по сравнению с ФИАС, потому что в него добавили муниципальное деление. А еще изменилась структура. Проще говоря, файлов стало больше.

Распаковав архив, получаем десять файлов в формате xml и 92 папки. Одна папка — один субъект РФ. Номер папки соответствует номеру региона, включая неактуальные — например, Корякский округ. Его в 2007 году власти объединили с Камчатской областью и назвали объединенный регион Камчатским краем. Неактуальные регионы хранятся в папках под номерами 80, 81, 82, 84, 85, 88. В папке номер 99 — Байконур.


ФИАС, ГАР и «Дадата»

В «беспапочные» файлы ФНС выкладывает общую информацию: типы домов, квартир, уровни объектов адресов, виды и типы нормативной документации

В каждой папке лежат 10 xml-файлов. Внутри каждого хранится информация об адресах соответствующего папке субъекта РФ. В папках неактуальных регионов хранятся исторические адресные данные.

Для примера открою папку с Адыгеи — 01.


ФИАС, ГАР и «Дадата»

Еще в папке лежат нормативные документы, машиноместа, комнаты, участки, помещения: нежилые и квартиры

Файлы AS_ADM_HIERARCHY* и AS_MUN_HIERARCHY* хранят идентификаторы адресного объекта и его родителя. Благодаря идентификаторам мы можем восстановить соотношения между объектами в разных типах территориального деления.

Например, в *HIERARCHY* хранятся пары записей c ОBJECTID и PARENTОBJID, объект и его родитель.


ФИАС, ГАР и «Дадата»

Пара записей показывает связи между частями адреса в разных типах территориального деления

Адресные данные хранятся в файлах AS_ADDR_OBJ*, AS_HOUSES*.


ФИАС, ГАР и «Дадата»

В файлах AS_ADDR_OBJ лежат компоненты адреса от региона до улицы. L EVEL указывает, к какому уровню относится часть адреса. Сельское или городское поселение — 4, населенный пункт — 6, улица — 8

Каждый элемент xml-файлов описан в документации к ГАР на сайте ФНС. Правда, многие жалуются, что полной ясности это описание не вносит. Надо признать, что это действительно так.

Какие поля предусмотрели в ФИАС, но убрали из ГАР

Вот главные потери в содержании нового справочника.

Какие новшества появились в справочнике

Добавили муниципальное деление адресов. Файлы с адресами в административном делении начинаются с AS_ADM_HIERARCHY*, в муниципальном — с AS_MUN_HIERARCHY*. Лежат эти файлы в папках регионов.

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

Административное деление: Тульская обл, Киреевский район, п. Бородинский.

Муниципальное деление: Тульская обл, муниципальный район Киреевский, сельское поселение Бородинское, п. Бородинский.

Ввели три новых уровня адреса: «Муниципальный район», «Сельское/городское поселение», «Машиноместо». Два из них, «Муниципальный район» и «Сельское/городское поселение», чтобы поддержать муниципальное деление.

Теперь список уровней адресных объектов выглядит так:

Ввели новый уникальный идентификатор компонентов адреса — OBJECTID. По универсальному идентификатору собирают части адреса, которые находятся в разных файлах справочника, но относятся к одному адресному объекту.

Если известен идентификатор объекта, по нему легко собрать полный адрес строкой. Со всеми «родителями», «бабушками» и «прадедушками». А также найти атрибуты — скажем, коды ОКАТО, ОКТМО и почтовый индекс.

GUID, выполнявший функции универсального идентификатора в ФИАС, в ГАР остался. Его значения тоже прежние. Но теперь он называется OBJECTGUID и хранится только в файлах с адресными объектами. Например, в AS_ADDR_OBJ* и AS_HOUSES*. Это серьезное изменение, но проблем оно не принесло: изменилась роль GUID, но не значение. По-прежнему нет проблем определить GUID в ГАР.


ФИАС, ГАР и «Дадата»

Файл AS_ADDR_OBJ* в папке региона подскажет, какой OBJECTID в ГАР соответствует прежнему OBJECTGUID. Работает для объектов уровня от улицы и выше

Изменили способ хранения информации о номере дома. Всего в ГАР 14 типов домов, они хранятся в поле HOUSETYPES. По сравнению с ФИАС из нового справочника убрали пустое поле «0» — «Не определено». И добавили четыре типа: «Строение», «Сооружение», «Литера», «Корпус».

Типы дополнительных частей номера дома лежат в файлах AS_ADDHOUSE_TYPES*.


ФИАС, ГАР и «Дадата»

В ФИАС корпус не относился к типу строения. Зато в ГАР литера почему-то числится неактуальной, хотя домов с этой частью адреса более 170 тысяч (Питер, привет!)

Значительно изменилась структура хранения номера дома. Ф ИАС предусматривал пять полей: «Тип дома», «Номер дома», «Номер корпуса», «Тип строения», «Номер строения». Причем в строение записывали или собственно строение, или сооружение.  Если номер здания включал одновременно строение и сооружение, в ФИАС записать их было некуда. Номер дома попросту обрезался.

В ГАР у номера дома не пять частей, а шесть. Причем все называются по-новому.


ФИАС, ГАР и «Дадата»

Дом в первой строке: владение (housetype = 1) 5, корпус (addtype1 = 1) 1, строение (addtype2 = 2) А. Во второй: корпус (housetype = 10) 1, строение (addtype1 = 2) 9/7

ГАР прекрасно хранит раскидистые номера домов, которые ФИАС обрезал.

Так в разных форматах выглядит адрес с OBJECTGUID 735a8883-751e-4403-aa67-f4ebbe689829.

ФИАС: Томская обл, город Северск, дорога Автодорога, д. 14/11 стр. 1.

ГАР: Томская обл, город Северск, дорога Автодорога, д. 14/11 стр. 1. сооружение 2КАН.

ГАР, предварительные итоги

Главное, что принес новый формат справочника — классификацию адресов в муниципальном территориальном делении. Причем административное деление справочник сохранил.

У ГАР более универсальная структура, чем у ФИАС. Разработчики заложили запас: если данных прибавится, структуру справочника, скорее всего, менять не придется.

В новый справочник добавили три уровня адреса: «Муниципальный район», «Сельское/городское поселение» и «Машиноместо». « Муниципальный район» и «Сельское/городское поселение» — чтобы поддержать муниципальное деление.

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

Наконец, мы вышли из кабинета в поля и попросили отзыв у специалиста по ГАР. Человека, который каждый день работает со справочником.

Елена Расторгуева, руководитель продукта HFLabs «Фактор». Ее подразделение готовит ГАР для бизнес-задач

«Работать можно с любой структурой. Структура ФИАС была понятнее, но её меняли при добавлении новой информации об адресах. В ГАР структура универсальнее, но историю переименований и переподчинений а́дреса мы собираем из нескольких мест. В ФИАС эту информацию хранили в одном файле.

Как и в ФИАС, в ГАР нет единообразия в данных, встречаются ошибки. Появились объекты с несколькими «родителями». Скажем, улицы, находящиеся в нескольких городских районах.

Про ГИС ЖКХ:  Как узнать долг за мусор по адресу через интернет бесплатно

Здесь бывают моменты, которые вызывают недоумение.

Например, в Москве принцип заведения длинных улиц в ГАР такой: улица одновременно принадлежит нескольким муниципальным округам, «родителем» которых является город Москва. Разные дома на одной улице относятся к разным районам города. То есть порядок адреса таков: г. Москва, муниципальный район, длинная улица:— г. Москва, Гагаринский муниципальный район, Ленинский проспект, д. 53 стр. 4;— г. Москва, Ломоносовский муниципальный район, Ленинский проспект, д  91.

В Самаре «московский» принцип неожиданно изменился. Например, длинный проспект Кирова тоже проходит через несколько городских районов. Но здесь город Самара подчинен десяти городским районам. А они — городскому округу Самара: Самарская область, городской округ Самара, внутригородской район Промышленный, город Самара:— Самарская область, городской округ Самара, город Самара Промышленный внутригородской район, проспект Кирова, д.  62;— Самарская область, городской округ Самара, город Самара Кировский внутригородской район, проспект Кирова, д. 257.

Внезапно, да? Загадка касается небольшого количества адресов, но все равно странно».

Как перейти от КЛАДР к ФИАС и ничего себе не сломать

Дисклеймер:
Если вы совсем не поняли, что означают эти наборы букв, ничего страшного. Ниже мы расскажем о реалиях работы с адресами в России. Если вам это неинтересно, почитайте про топографические каламбуры.

Правильные адреса нужны компаниям, которые любят своих клиентов. Знакомые банки, страховые и интернет-магазины, которые сейчас используют справочник КЛАДР, спрашивают нас, что же делать дальше. Поэтому мы запарились и написали пошаговое руководство по переходу


ФИАС, ГАР и «Дадата»

Структура адреса

Адрес представляет собой последовательность адресных элементов (далее, АЭ). В принципе, в произвольном порядке, хотя обычно начинают с высокого уровня (страны, региона), заканчивая низким (дома, квартиры). Приведём типизацию АЭ по уровням:

Предположим, что мы умеем отождествлять АЭ каждого из уровней. Чтобы отождествить два адреса, нужно упорядочить АЭ в каждом из адресов и произвести последовательное сравнение. Если самые нижние по уровню АЭ совпадут, то адреса эквивалентны.

Здесь проблема в том, что некоторые АЭ в иерархии могут отсутствовать или наоборот. Например, в ГАР ФИАС в общем случае 2 типа иерархии — по административным районам и по муниципальным районам, и один АЭ может в принципе иметь 2-х разных родителей. Например, «Дагестан район Агульский село Амух» и «Дагестан муниципальный район Агульский сельское поселение сельсовет Амухский село Амух» — один и тот же АЭ в разрезе этих двух иерархий. А если в регионе село с таким именем уникально, то районы могут вообще не указывать: «Дагестан село Амух». Таким образом, для тождественности АЭ должны не только совпадать сами по себе (по типам и наименованиями с вариациями), но и должно учитываться совпадение родительских АЭ вверх по иерархии.

Нормализация других объектов

Выше были описаны принципы нормализации улиц, то есть объектов уровня 8 в терминологии ГАР. Для имён вышележащих объектов используются похожие принципы: также формируются варианты, убираются лишние слова, нормализуются числа. Например, для «поселение Михайловский» (именно так правильно!) нужно «МИХАЙЛОВСКИЙ», «МИХАЙЛОВСКОЕ», «МИХАЙЛОВСКАЯ» (это уже перестраховываемся на всякий случай). Имена также слегка корректируются — убираются твёрдый и мягкий знаки, Ё переводится в Е, две одинаковые рядом буквы — в одну. В дальнейшем сравнение идёт с учётом возможного несовпадения одной буквы и т.д.

Для домов уровня 10 нормализация совсем другая. Здесь номер может в общем случае состоять из трёх элементов:

Причём номер — это не только цифры, но и дроби, буквы и их комбинации, а бывают и вообще пустые («бн»). Здесь вариативность тоже большая. Рассмотрим на примере литеры А варианты написания: «литераА», «литА», «лит. а» или просто прикрепляют букву к номеру дома, сама буква может быть как на кириллице, так и на латинице и т.д. Здесь нормализация — это приведение значений к вышеуказанной 3-х элементной модели, после чего перевод в строку.

Для помещений уровня 11 ситуация попроще: номер один, но встречаются сложные буквенно-цифровые комбинации. Здесь также номер нормализуется и записывается строкой.

Если есть ГАР ФИАС, то информация из него позволяет в ряде случаев избавиться от неоднозначности. Например, понять, что «дом 10А» — это «дом 10 литера А», а «дом 10/1» — это «дом 10 квартира 1». Или «дом 10 к.1» — квартира или корпус.

Адрессарий — система идентификации адресов

Всё вышеизложенное позволяет выдвинуть идею адресного индекса (Адрессария). В него добавляются адреса, он разбивает адрес на элементы, пытается привязать их к уже существующим, если не получается, то добавляет их, достраивая тем самым внутри себя иерархическую систему адресов. Адресные элементы в Адрессарии имеют уникальные идентификаторы, так что его можно рассматривать как систему идентификации адресов.

Пропущенный через Адрессарий, адрес получает числовые идентификаторы его элементов. Два адреса совпадают, если равны идентификаторы его самых низкоуровневых элементов.

Если есть массив неструктурированных адресов, то его можно прогнать через Адрессарий, назначив адресам числовые идентификаторы, которые могут служить критерием эквивалентности адресов.

И это не в будущем, а есть уже сейчас!

SDK Pullenti Address

Всё вышеизложенное реализовано в SDK Pullenti Address:

Автору на протяжении ряда лет несколько раз приходилось сталкиваться с задачей обработки адресов. Результаты этих столкновений оформлены в виде SDK и предлагаются Вашему вниманию.

Использование ГАР ФИАС

В настоящее время в ГАР ФИАС около 1.8 млн. объектов уровней 1-8, 49 млн. домов и участков и 54 млн. помещений. Их можно использовать для нормализации! Если удаётся адресный элемент привязать к объекту ГАР, то его уникальный GUID можно считать дополнительной строкой для сравнения (кстати, возможны несколько GUID из-за дублирования в самой базе). Это также избавит от от некоторых неоднозначностей, упомянутых выше.

При привязке следует использовать такие же алгоритмы нормализации. То есть текстовые описания ГАР объектов прогонять через тот же алгоритм нормализации, формируя множественные варианты написания при построении поискового индекса.

Такой способ позволит отождествить, скажем, переименованную улицу и улицу со старым названием (кстати, в свежей версии ГАР информация о переименовании отсутствует, к сожалению, хотя история объектов есть — а раньше старые названия были, по крайней мере, в ФИАС времён DBF).

Если адрес у вас хранится как код КЛАДР улицы + домовая часть («дом 1 строение 3 квартира 44»), то для него все относительно просто.


ФИАС, ГАР и «Дадата»

Таблица ADDROBJ хранит все адресные объекты с их идентификаторами

Для работы понадобится таблица ADDROBJ из выгрузки ФИАС в формате xml или dbf. В ней хранятся все объекты (города, улицы и т. д.) подряд с уникальными идентификаторами GUID.

Будем использовать следующие колонки:

Пример: Москва, ул Александра Солженицына. Код КЛАДР: 77000000000151900.

Шаг 1. Выделяем из кода КЛАДР код до улицы, то есть берем первые 15 цифр: 00.

Шаг 2. Ищем код КЛАДР в поле PlainCode. Если нашлась одна запись, то сохраняем значение поля AoGuid и пропускаем следующий пункт. Но по нашему коду находится три записи, нужна дополнительная проверка.

Про ГИС ЖКХ:  Понимание обязанностей совета директоров ТСЖ: ключевые роли и обязанности

Шаг 3. Находим актуальную запись. Значение поля CurrStatus = 0 означает, что запись актуальна. Выбираем ее и сохраняем значение поля AoGuid. Идентификационный код ФИАС найден!

  • Александра Солженицына, CurrStatus = 2;
  • Коммунистическая Б., CurrStatus = 1;
  • Александра Солженицына, CurrStatus = 0, AuGuid = .

В качестве бонуса соберем текстовый адрес по найденному AoGuid:

Но можно поступить еще проще и воспользоваться готовым сервисом. DaData.ru умеет подсказывать адреса в конкретных регионах, районах, городах и населенных пунктах. Понимает названия («Петергоф»), коды КЛАДР («7800000800000») и ФИАС («8f238984-812b-4bb1-850b-49749fb5c56d»).

Как адреса хранятся в ФИАС и КЛАДР

Мы видели много способов хранения адресов в структуре КЛАДР. В основном они сводятся к двум вариантам:

Так как в ФИАС нет части домов, мы рекомендуем хранить адрес как:

То есть задача миграции сводится к тому, чтобы перевести код или текстовый адрес в формате КЛАДР в код ФИАС.

Классификационные коды выглядят так:

Смотрится страшно, рассмотрим пример: Ленинградская обл, Всеволожский р-н, деревня Кудрово, мкр Новый Оккервиль. Адрес реально существует, вот он на Яндекс. Картах. Классификационный код КЛАДР и ФИАС на первый взгляд для него выглядит одинаково: 470050000550023. Разложим его на составляющие.

Раскладываем адрес по уровням ФИАС и КЛАДР

Из примера видно, что даже в простых ситуациях между классификаторами возникает недопонимание. Но есть еще один очень важный момент.

Классификационный код отражает текущую структуру адреса, а она может измениться. Например, у Оккервиля изменится район и весь код станет недействительным, мы его уже не найдем.

Чтобы избавиться от этого, в ФИАС добавили еще идентификационный код ФИАС. Это глобальный идентификатор для каждого объекта: города, улицы, района и т. д. Выглядит он как набор букв и цифр, который формируется по стандарту GUID (Globally Unique Identifier). Типичный GUID в ФИАС выглядит так: f77948dc-7bc8-42cb-979e-2c958d162d63.

Нормализация адресов, ГАР ФИАС и Адрессарий

Как известно, один и тот же адрес можно написать различными текстовыми способами, используя сокращения, перестановку, вариации наименований и т.п. Встаёт вопрос: существует ли процедура нормализации, отождествляющая реально одинаковые и по-разному записанные адреса?

Ответ положительный, чему и посвящена данная статья.

Какие средства в принципе есть для решения задачи? Их сейчас два: выделение именованных сущностей (NER) и объекты ГАР ФИАС. N ER даёт разбиение на адресные элементы и их нормализацию, ГАР ФИАС может дать уникальные идентификаторы. Задача решается, если в качестве нормализации взять множество строк возможных нормализаций наименований элементов, добавив к ним GUID-идентификаторы ГАР, если получится. Два адреса эквивалентны, если хотя бы одна строка из множеств таких их строк совпадает.

А одними объектами ГАР ФИАС можно обойтись, используя только их идентификаторы? Конечно, нет. Во-первых, это не полный классификатор, особенно в части помещений и строений, хотя и постоянно пополняемый. Во-вторых, в адресах бывают специфические элементы, которые в ГАР отсутствуют (например, Московская область, Можайский район, примерно в 0,1 км по направлению на юг от ориентира середина д. Бараново, или пересечение улиц).

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

Зачем нужны классификаторы адресов

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

Как вы думаете, какой государственный орган наиболее заинтересован в том, чтобы вы получали от него письма? Правильно! Налоговая. Поэтому ФНС России много лет разрабатывает и поддерживает ведомственные общероссийские классификаторы адресов. И так как более полных справочников нет, их стали использовать повсеместно.

Сначала был КЛАДР, и было в нем 6 уровней:

С 2012 года в эксплуатацию ввели новый классификатор — ФИАС. Про основные отличия мы писали три года назад в статье «ФИАС или КЛАДР: выбираем справочник адресов». В ФНС к разработке нового классификатора подошли основательнее и постарались учесть все

минусы КЛАДР. Из интересного добавили дату начала и окончания записи, ввели фиксированный ID для каждого дома (предполагается, что он не будет меняться).

До сих пор продолжают обновляться оба классификатора, но поддерживать совместимость становится сложнее. В прошлом году в ФИАС начали добавлять новые уровни. Например, планировочные структуры — это всякие дачные товарищества и микрорайоны, в классификаторе их уже больше 81 000. В конечном итоге в ФНС приняли логичное решение прекратить поддержку КЛАДР и удалить его в конце 2017 года.

Нормализация имён улиц

Для нормализации я использую Pullenti, который сам же и разрабатываю. Там при извлечении названий улиц используются следующие основные принципы:

Все эти эвристики направлены на то, чтобы на выходе получить максимальное число возможных нормализованных вариантов, по которым впоследствии можно производить сравнение. Теперь понятно, как могут быть отождествлены улицы из начала раздела: у всех них будет общая комбинация — «ЖУКОВА».

Не только названия обладают вариативностью, но и типы. Например, «Измайловский пр.» — это проезд или проспект? Оба типа возможны.

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

Самый простой вариант — воспользоваться DaData.ru. Сервис сделает все за вас автоматически. Но можно и развлекаться самостоятельно.

Адреса одной строкой

Если адреса у вас хранятся одной строкой, вроде этой:
г Москва, улица Большая Коммунистическая, дом 3, то поздравляем, это самая интересная задача. Нужно писать свой адресный парсер, который будет разделять строку в формате КЛАДР на части, искать каждый ее компонент в ФИАС с учетом опечаток, сокращений, исторических названий и определять по ним ФИАС-код. Легче это сделать уже готовым адресным парсером. Как выбрать алгоритм для адресного фильтра, мы рассказывали раньше.

Если адреса у вас хранятся разложенными по КЛАДР, то задача немного проще.

Примерно так выглядит адрес, разложенный по КЛАДР

Код ФИАС можно собрать, используя всё ту же таблицу ADDROBJ. Но в этом случае двигаться по уровням нужно от большего к меньшему.

Шаг 1. Берем название региона и ищем его в поле FormalName таблицы ADDROBJ.

Шаг 2. Идем дальше по уровням вниз и ищем по FormalName с фиксированным родителем — найденным AoGuid на предыдущем шаге. В нашем случае уровни «город» и «населенный пункт» пустые, а следующий непустой уровень — улица.

Шаг 3. Если дошли до улицы, то можно найти и дом. Для этого в таблице HOUSE ищем номер дома с фиксированным AoGuid улицы. Ф ИАС не полон домами, поэтому не расстраивайтесь, если нужный номер не найдется.

Может ли что-то пойти не так? Конечно. Например, по названию может легко найтись несколько объектов. « Москва, Тверская» — это про площадь или про улицу? Тогда нужно сравнивать типы, но не все так просто.

Таблица SOCRBASE хранит полные и сокращенные типы объектов

Тип по КЛАДР может быть сокращенным и полным: «ул» — «Улица», «х» — «Хутор». В ФИАС в явном виде хранится только сокращенный тип (в поле ShortName). Полный тип в сокращенный можно превратить с помощью таблицы SOCRBASE, в ней для каждого уровня хранится соответствие сокращённых и полных типов.

И напоследок хорошая новость для тех, кому лень запариваться всем перечисленным. В ближайшее время мы планируем выпустить ФИАС в формате КЛАДР для тех, кто не успеет перейти на формат ФИАС до конца года. Следите за новостями 🙂

P. S. Благодарю за неоценимую помощь в создании этой статьи моих коллег по HFLabs Михаила Березина, Елену Расторгуеву и Антона Жиянова.

Оцените статью
ГИС ЖКХ