Нечеткое тегирование это просто

В мире есть много сложных вещей: квантовая физика, алгебра кватернионов, теория суперструн, алгоритм включения стиральной машинки, динамика иерархических систем и многое другое. Каждая из них требует долгих лет детального изучения, в ходе которого неизбежны сотни ошибок и невероятных открытий. Это целый океан страстей, нырять в который может лишь лишенный рассудка человек. И если стоит примешивать этот океан к практической повседневной работе, то только в виде тоненького ручейка, вытекающего из под дамбы здравого смысла, что ограничивает океан невероятного безумия от вторжения в серую и тоскливую жизнь.

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

Итак, как говорил Сократ: «Точное логическое определение понятий — условие истинного знания». Тегирование в OpenStreetMap это присвоение набору геоданных некоего смысла и пояснения, которое выражается в виде присвоенного ключа (тега) и его значения. Например, дорога внутри жилых зон обозначается как highway=living_street. Здесь слева от знака равенства в теге прописано отнесение геоданных к классу (класс дорог), а справа дано пояснение (дорога вдоль жилых зон).

Можно ошибочно подумать, что схема тегирования OSM представляет собой примитивный аналог иерархических классификаций, состоящий всего из двух уровней. На самом деле это большое заблуждение, поскольку в верно построенной иерархической классификации два элемента относящиеся к разным надмножествам элементов не могут быть похожи до степени смешения, или говоря более строго, близость элементов различных подмножеств иерархической системы всегда меньше близости содержащих их надмножеств. Практически это выражается в том, что два объекта, относящиеся к разным образцам надклассов не могут быть более близки, чем сами эти надклассы. В OSM такое встречается сплошь и рядом: мой любимый пример natural=wood и landuse=forest. Близкие и часто взаимозаменяемые значения относятся к разным тегам. Такое в иерархической системе невозможно.

Впрочем, в этом нет ничего плохого. Как показывает эмпирический опыт, иерархические классификации подходят для искусственных, либо абстрактных геоданных. Объекты же «чисто конкретные», которые и содержит в себе база OSM в иерархическую систему не укладываются ибо для таких объектов характерен избыточный диатропизм.

Что это значит в переводе на язык бытового жанра? Это значит, что в нотации «ключ»=»значение», знак равенства абсолютно избыточен и выполняет карго-функцию. Это не более чем формализм и ничем необоснованное усложнение нотации. А значит и вся схема тегирования данных проекта OpenStreetMap сводится к присвоению геоданным пояснительного текста, содержащего в себе знак равенства. С таким же успехом можно было подписывать данные в виде «natural_wood», «naturalwood» или просто «wood» (забыл сказать, каждый тег содержит только уникальные значения, а это еще один довод против иерархичности схемы тегирования OSM). Говоря еще проще: никакой схемы тегирования в OSM нет, есть лишь набор странно оформленных подписей для каждого набора геоданных. Если вы сможете переступить через себя настолько, что признаете этот вывод, дальнейшее пояснение будет для вас совсем легким.

Повторюсь: данные OSM не имеют схемы тегирования, это лишь набор геоданных со странно оформленными подписями. но не подумайте, что это недостаток, как раз наоборот, это наиболее сильное преимущество проекта. Проблема в том, что преимущество это используется не до конца. Если-бы каждому объекту был присвоен только один тег, то можно было бы в полной мере говорить о примитивном булевом тегировании, которое безусловно давно устарело. Но тегов можно присвоить огромное количество. Например, не просто указать, что это здание и оно является магазином, но и дополнить информацию о нем часами работы, инженерными параметрами здания и еще чем в голову взбредет. Значит ли это, что объекту можно присвоить любое сочетание тегов (разумеется соответствующее действительности)? Нет. Каждый из тегов, присваиваемых объекту должен однозначно и независимо характеризовать какое-либо из свойств объекта. Есть у улицы свойство в виде ее названия — пожалуйста, тег «name». Есть у той же улицы свойство в виде покрытия дороги — пожалуйста, тег «surface». Для каждого свойства свой тег.

Но вот она, квинтэссенция моей сегодняшней речи. Одно и то-же свойство объекта можно (и нужно) выражать не посредством одного тега, а с помощью любого количества необходимых тегов. Зачем выбирать каким тегом обозначить лес с густым подлеском: natural=wood или natural=scrub, если можно использовать оба этих тега одновременно? А для большей ясности можно присвоить каждому тегу характеристическое значение истинности, от нуля до единицы. Ноль означает, что это свойство отсутствует, единица означает наличие этого свойства (не будем здесь поднимать дискуссию о критерии определений значений характеристических функций нечетких тегов и области значений таких функций). Конечно, придется изменить нотацию, но выглядеть это будет примерно так:
Лес с редким подлеском: wood(0.9),scrub(0.2);
Кустарниковые заросли с редким пологом леса: wood(0.4),scrub(1.0);

Так можно смешивать между собой абсолютно любые теги, что даст осмерам необычайно гибкий инструмент для описания реальной обстановки на местности. Вот несколько реальных примеров:
Юго-Запад Ленинградской области, дорога к базе охотников и рыбаков «Кривая Лука». Пять месяцев назад осмер под ником Sergey Astakhov отрисовал эту дорогу, обозначив ее как highway=track. На большем протяжении так оно и есть, но в паре мест, как бы вам это сказать… в паре мест то, что сейчас иначе кроме как highway=track не назовешь, в системе нечеткого тегирования выглядело бы как track(0.5),water(0.5). Или может вам больше по душе обозначение surface=water?

Другой пример из Кингиссепского района. Нарисованные по космосу тем же осмером дороги являются не чем иным как минерализованными противопожарными полосами и в системе нечеткого тегирования выглядели бы как road(0.2),ditch(1,0),forest(1.0) в том смысле, что это слабо похожая (0.2) на дорогу траншея используемая в лесном хозяйстве:

 

Другой похожий пример из Любанского района. На карте он не обозначен и честно говоря, не уверен, что есть отдельные теги для лесных волоков. Это один из главных недостатков привычной булевой классификации объектов по сравнению с нечетким тегированием. Пока старообрядцы будут выдвигать пропозалы с миллионами новых тегов, новое поколение картографов, владеющих знанием о нечетком тегировании легко опишет любой ранее невиданный объект. Например так: road(0.3),log(1,0),forest(1.0) — подобие дороги (0.3), устланное бревнами для целей лесного хозяйства.DSCN9054

Тут, пожалуй, наступило самое подходящее время, что-бы рассказать о потрясающей конструкции со вложенными нечеткими тегами, которая позволяет описывать реальность еще гибче, проще и правдоподобнее, но увы. Время уже позднее, а мне еще в деревню за трактором идти. Надо же как-то выбираться из этого track(0.3),water(0.7).

Добавить комментарий

Ваш e-mail не будет опубликован.

3 comments

  1. freeExec:

    Вообще есть surface=mud.

    • Ночной косильщик:

      есть, но это частный случай. Точно так-же, как и surface=dirt. Мой главный месседж в том, что вместо бесконечного количества тегов для каждой локальной особенности местности можно использовать комбинации относительно небольшого количества тегов

  2. Lev Serebryakov:

    track(0.5),water(0.5). Да, да, да, да, СУКА, ДА! Там ПО СЕРЕДИНУ ГОЛЕНИ И ВТУЛКУ ВЕЛОСИПЕДА БЫЛО! highway=track, нахуй!