Базы данных: словари синонимов

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

Кроме того, то же самое будет во всех случаях, когда нужна унификация (приведение к единому значению) множества вероятных формулировок.

У нас есть некая таблица, в которой содержится информация и есть справочник для нее.

Основная таблица
НаименованиеПоле  ПримечаниеКомментарий
obj_idI(4)Код объекта
.........Здесь может быть любой набор полей

Справочник
НаименованиеПоле  ПримечаниеКомментарий
obj_idI(4)Код объекта
obj_nameC(??)Наименование объектаДлина поля теоретически непредсказуема

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

Эти входящие трудно понять и я всегда привожу пример, с которым пришлось столкнуться лично.

"Замечательная" риелторская программа под названием Маклер хранит данные в текстовом файле, а их источником является кто (что) угодно. Соответственно, нужно импортировать оттуда информацию. Поскольку речь идет о Москве, одним из важнейших первичных полей является ближайшая станция метро. Естественно, что при вводе возникает определенное число опечаток, но обнаружилась уникальная станция: "Улица 1905 года". В ней были варианты (приведено всего несколько примеров):

Сколько я помню, было найдено 35 различных вариантов этой станции примерно на 100 встреченных случаев из 70 тыс. объектов недвижимости. В результате разработки (и додумывания ошибок) словаря синонимов импорт следующих 70 тысяч занял около 5 минут.

Позволю себе предположить, что определенные закономерности видны хорошо. Очевидно, что часть проблем решаема программно (пробелы, регистр), но сокращения придется выслеживать вручную. Это означает, что каждая ситуация, непонятная программе, останавливает импорт и спрашивает у пользователя: "А это что"? Еще есть город, улица...

В реальных ситуациях можно и нужно идти путем сложного и многоступенчатого анализа, хотя бы для ряда ситуаций. Сюда же следует отнести, например, наложение фильтров с использованием только частичного набора исходных слов. (Постановка вопроса косвенно затрагивает утопию под названием "Искусственный интелект".) Но можно поступить немного прямолинейнее.

Итак, таблица синонимов достаточно проста.

Таблица словаря синонимов
НаименованиеПоле  ПримечаниеКомментарий
obj_idI(4)Код "правильного" названия объектаОн, скорее всего, будет повторяться, либо вообще будет отсутствовать если все и всегда пишут правильно
syn_nameM(10)"Синоним", то есть вариант неправильного написанияТип поля определяется неопределенностью исходника. Нужен индекс, если поиск производится часто! Иначе он может занимать очень много времени

Обращает на себя внимание отсутствие идентификаторов записей, так как, при названной постановке вопроса, они просто не могут понадобиться.

Алгоритм импорта

При импорте название ищется по справочнику. Если нашли, то вносим в основную таблицу код.

Если нет – ищем по словарю синонимов. Если нашли, то вносим в основную таблицу код.

Если нет – спрашиваем пользователя, что означает слово.

Если оно есть в справочнике, то он укажет это и в словарь будет добавлен синоним.

Если нет, то нужно дополнить справочник.

Одним из достоинств такого подхода является наличие типичных для конкретных людей опечаток. Если приходится часто импортировать их данные, то проблема перестанет мешать в работе.

Можете возмутиться, поцокать языком или посмеяться, но описанная здесь технология используется довольно редко.


Copyright © 1993–2020 Мацкявичюс Д.А. Все права защищены.
Никакая часть сайта не может быть воспроизведена никаким способом без письменного разрешения правообладателя и явной ссылки на данный ресурс.