Pull to refresh
29
0
Константин Кузнецов @KonstantinSmith

Разработчик

Send message

Полнота OSM в сравнении с ПКК и ГАР ФИАС

Level of difficultyMedium
Reading time7 min
Views1.3K

База Open Street Map (OSM) является открытым ресурсом, пополняемым добровольцами. Она широко используется в проектах, где нужно отобразить что-либо на карте. Встаёт вопрос - насколько данные в ней полные и корректные?

Мы попробуем ответить на него для объектов типа "строение" (дом) на территории России. В этом нам поможет база объектов ГАР ФИАС, которая также содержит объекты такого типа, и её с некоторыми оговорками можно брать за эталонный уровень полноты. С оговорками - потому что каждый месяц в ней появляются новые объекты. На данный момент в ней около 32 млн строений (не считая гаражей, земельных участков и устаревших объектов).

Объекты ГАР ФИАС не содержат координат GPS, но есть ещё один открытый ресурс - Публичная кадастровая карта Росреестра. К сожалению, она не даёт выгружать данные целиком, как предыдущие базы, а предоставляет только API, по которому можно извлекать один объект за раз. Но зато она для многих из них содержит GPS, так что можно их сопоставить с GPS от OSM.

Забегая вперёд, озвучим результат: OSM содержит около 24% от всех домов ГАР, ПКК - около 21%, пересечение OSM с ПКК - 6% и разница координат несущественная.

Для получения результата использовался движок нормализации адресов Pullenti Address.

Читать далее

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

Reading time7 min
Views16K

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

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

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

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

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

Читать далее

Опыт конвертирования кода C# в код Rust

Reading time14 min
Views10K

Постановка задачи


Код на языке C# нужно перевести в код на Rust. Точнее, требуется такая процедура перевода (разработка продолжается на C#), чтобы в любой момент можно было получить работающий код на Rust. Эту задачу я решал для языков Java, Python, JavaScript и PHP, написав конвертер из C# в эти языки. Концепция такого конвертирования была изложена в статье UniSharping пару лет назад. Я разрабатывал этот конвертер, чтобы переводить код своего проекта SDK Pullenti (лингвистический анализ текста). И подумалось мне: а не замахнуться ли на Rust? Да, слышал разные отзывы, что язык необычный и пр., но попытка же не пытка… Тем более, что у одного из заказчиков группа программистов увлечённо пишет на нём.

Читать дальше →

RESHI.RU — робот решает и объясняет школьные текстовые задачи по математике

Reading time7 min
Views24K

Введение


Когда я объяснял своему ребёнку в 4-м классе, как решать текстовую задачку по математике, то неожиданно понял две вещи. Во-первых, процесс объяснения решения можно автоматизировать. А во-вторых, для большинства школьных вычислительных задач подходит универсальный метод через систему уравнений, который почему-то пока не изучается в младших классах школы. Причём освоение этого метода вполне по силам среднему школьнику и позволит справляться с ранее недоступными ему задачами. Результатом этого понимания явился сайт RESHI.RU с объясняющим задачи роботом.
Читать дальше →

UniSharping: конвертирование кода C# в Java и Python

Reading time4 min
Views23K

Введение


С 70-х годов развивается Simplified English, цель которого — определение подмножества языка, понятного широкому кругу неносителей языка. Рекомендуется, например, для технической документации. Автоматические переводчики на таком подмножестве будут работать заведомо корректнее, в идеале генерируя текст, не требующий ручной корректуры.
Если применить этот подход к C# для задачи автоматической конвертации кода в другие языки программирования, то можно выделить подмножество конструкций языка, системных библиотек и технологий, которые потенциально могут транслироваться в широкий круг других языков. Причём конвертации не однократной (миграция), а постоянной для расширения интеграционных возможностей проекта на C# — чтобы в любой момент можно было получить рабочий код на другом языке без необходимости какой-либо его правки.


Позвольте представить: UniSharping


Ограничение C#.NET для решения этой задачи мы назвали U# (Universal Sharp), а процесс конвертации и его инструмент — UniSharping. Исполняемые модули, настройки и документация выложены на GitHub, система бесплатна для некоммерческого использования (Non-Commercial Freeware).

Читать дальше →

Кросс-языковая разработка ПО

Reading time5 min
Views17K

Задача


Вот бы, разрабатывая программу на одном языке, сразу получать исходники на других языках программирования… Я пишу на C# .NET, но в последнее время всё больше требуется интегрироваться с Java. Одно из решений — оформление web-сервисов для взаимодействия, но не то это, не то. Вроде и существуют конвертеры C# в Java, но эксперимент показал, что для реального проекта они (те, что удалось попробовать) не работают, хотя на «hello world» отрабатывают отлично. Переписать с нуля на Java весь проект нереально — он активно разрабатывается более 6 лет (Pullenti — обработка естественного языка), да и на C# он нужен. Пришлось мобилизоваться и в прошлом году написать этот конвертер, а в этом году и конвертер C# в Python.
Читать дальше →

Information

Rating
Does not participate
Location
Москва и Московская обл., Россия
Registered
Activity