Справочники грамматических атрибутов для словарных статей и грамматических форм

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

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

Например, для русских существительных есть 12 грамматических форм, соответствующих склонению слова по 6 русским падежам в единственном и множественном числе. В некоторых случаях к этому набору добавляется поэтическая форма творительного падежа в единственном числе птицей-птицею, формы вокатива Коль, партитива сахару и локатива на берегу. Для неперечислимых существительных есть только формы единственного числа сухость, а для некоторых - только формы множественного санки.

Для других частей речи могут быть альтернативные формы, отличающиеся ударением: до́дали-дода́ли. Таким образом, набор словоформ сильно зависит от конкретного слова и поэтому размер парадигмы не фиксирован априори. Вместо этого для каждой словарной статьи, то есть для записи в SG_ENTRY, привязывается произвольное количество форм, то есть записей в SG_FORM. Для каждой формы в свою очередь привязывается список грамматических признаков одним их двух альтернативных способов.

Итак, как хранятся эти признаки?

Реляционная схема словаря дает 2 ответа на этот вопрос.

Во-первых, есть таблица SG_FORM_COORD. Записи в ней ссылаются на грамматические формы слова - записи в таблице SG_FORM. Одной грамматической форме, то есть одной записи в SG_FORM, может соответствовать произвольно много записей в SG_FORM_COORD. На практике экстремальный вариант присутствует для некоторых русских прилагательных, для которых склонение включает в себя образование грамматических форм для шести падежей, трех родов, двух чисел, с дополнительными вариантами одушевленности в винительном падеже, в трех степенях сравнения, с дополнительными краткими формами в положительной степени.

Данный механизм позволяет получать или проверять грамматический признаки с помощью стандартных средств языка запросов SQL. Полезно сравнить его с другим реализованным механизмом (см. далее). С одной стороны, привязка записей к конкретной грамматической форме упрощает работу прикладного кода, который выполняет редактирование словаря - например SQLex или ORM. Для добавления новой грамматической формы достаточно внести запись в SG_FORM и добавить записи в SG_FORM_COORD. С другой стороны, в русском лексиконе имеется порядка двух миллионов грамматических форм, поэтому количество записей в SG_FORM_COORD составляет более десятка миллионов. Это очень большая цифра как с точки зрения эффективности работы движка (оптимизатора запросов) многих СУБД, так и с точки зрения размера базы данных на диске.

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

схема словаря

Чтобы преодолеть недостатки первого способа в случаях, когда его достоинства не являются важными, введен второй механизм привязки грамматических признаков к формам слов. Первый способ, то есть использование таблицы SG_FORM_COORD, можно отключить уже на стадии экспорта словаря в SQL формат с помощью специальной опции, либо удалить эту информацию уже после загрузки словарной базы с помощью SQL запросов.

Второй способ основан на таблице COORD_PAIRS, которая является справочником наборов грамматических признаков. Одна запись в ней хранит отдельный набор в двух видах - как две текстовые строки, соответственно в полях pairs и str_pairs. Количество разных наборов оказывается очень небольшим, если хранить в этом справочнике только уникальные наборы - около сотни для одноязычного русского словаря. Далее, поле SG_FORM.ID_DIMS, если не содержит NULL, хранит первичный ключ записи в COORD_PAIRS. Таким образом для каждой записи в SG_FORM можно перейти к записи в справочнике COORD_PAIRS.

Возможность задания SG_FORM.ID_DIMS=NULL позволяет использовать первый механизм задания грамматических признаков, если в этом есть необходимость. Прикладной код, например ORM или слой доступа к данным в составе процедурного API, обнаружив NULL в SG_FORM.ID_DIMS, должен получить список признаков отдельным запросом к SG_FORM_COORD. Таким образом, если редактор словаря по каким-то причинам не хочет заниматься достаточно сложной процедурой поиска нужной записи в COORD_PAIRS для отредактированной формы, он может просто записать NULL в SG_FORM.ID_DIMS и сохранить признаки формы отдельными записями в SG_FORM_COORD.

В каком виде хранятся списки грамматических признаков в COORD_PAIRS?

Посмотрим на содержимое этой таблицы:

справочник морфологических признаков

Каждый набор представлен двумя альтернативными способами.

Текстовая строка в поле PAIRS содержит разделенный и обрамленный пробелами список признаков, в котором каждый отдельный признак задан как ID грамматического атрибута (см. SG_COORD) и ID состояния этого атрибута (SG_STATE), разделенные двоеточием. Такой формат позволяет разобрать строку в вектор в любом языке программирования без особых усилий, не содержит данных, зависящих от локализации или требующих юникода. Важная особенность, которую также можно заметить на показанном фрагменте - элементы в каждой строке COORD_PAIRS.PAIRS отсортированы по возрастанию значений первого числа в парах. Как и наличие обрамления из пробелов, это позволяет организовать поиск записи с помощью оператора LIKE и метасимвола %.

Строка в COORD_PAIRS.STR_PAIRS дублирует содержимое PAIRS, но представляет грамматические атрибуты и их состояния именами, которые они получили при описании грамматики. Повышенная наглядность данного представления компенсируется неудобствами при работе со строками, содержащими национальные символы, в данном случае - кириллицу.

Алгоритм сохранения грамматических атрибутов при формировании новой словарной статьи

Чтобы задать для грамматической формы список признаков, прикладной код должен следовать такому алгоритму, если он не хочет воспользоваться механизмом SG_FORM_COORD.

1. Сформировать строку, представляющую список грамматических признаков, с учетом обрамляющих пробелов и сортировки.

2. Найти в COORD_PAIRS запись, содержащую такую строку.

3. Если записи нет (что очень маловероятно), то добавить ее. По вопросу генерации первичного ключа записи см. эту статью.

4. Задать в SG_FORM.ID_DIMS первичный ключ найденной или добавленной записи COORD_PAIRS.

Дополнительные материалы

Дистрибутив SQL словаря

Экспорт словаря из бинарного формата в SQL

Редактор Словаря SQLex

Экспорт словаря из SQL БД в текстовый формат

ORM Persistent Dictionary Library

Кэширование

  © Elijah Koziev 2010
прикладные проекты на основе грамматического словаря API грамматической машины компоненты для доступа к грамматическому словарю условия получения SDK токенизатор и сегментатор морфологический анализ и синтез лемматизатор база N-грамм синтаксический анализатор словоформы морфология и синтаксис русского языка падеж число род совершенный и несовершенный вид экспорт в SQL формат экспорт в XML формат скрипт SQL словаря структура SQL словаря структура XML словаря компоненты для доступа к грамматическому словарю ORM Persistent Dictionary Library лемматизация стемминг примеры использования грамматического словаря склонение существительных в русском языке склонение русских прилагательных спряжение глаголов в русском языке поиск текста с учетом морфологии OCR подсистема расширенные регулярные выражения генератор текста генератор случайного текста и имитатор рандомизатор синонимизатор перефразировщик Статистика буквенных паттернов

Грамматический словарь русского языка



Грамматический словарь
склонение и спряжение глаголов, существительных, прилагательных

В состав входит русский и английский словарь.

платформа:  Windows 2000 ... Windows 7
требования: 512 Mb свободной памяти, 300 Мб на диске
размер:         34 Мб

  скачать грамматический словарь купить грамматический словарь SDK грамматического словаря
грамматический словарь русского языка



SDK Грамматического словаря



SDK Грамматического Словаря
склонение и спряжение глаголов, существительных, прилагательных

В состав входит русский и английский словарь.

платформа:  Windows 2000 ... Windows 7
размер:         13 Мб

SQL словарь (демо):
sqlite mysql oracle firebird mssql

скачать демо-версию SDK купить SDK API грамматического словаря



Поисковая система



Integra
настольная и сетевая поисковая система 

платформа:  Windows XP ... Windows 7
требования: 512 Mb свободной памяти
размер:         21 Мб

Дополнительные компоненты:
MySQL поисковый сервер 13.5 Мб
Integra.Premium MySQL 3.9 Мб

скачать поисковую систему SDK поисковой системыописание поисковой системы



SDK Поисковой системы



SDK Поискового движка
API для настольной и сетевой поисковая система 

платформа:  Windows XP ... Windows 7
размер:         17 Мб

Дополнительные компоненты:

MySQL поисковый сервер 13.5 Мб
Integra.Premium MySQL 3.9 Мб

скачать SDK SDK поисковой системы



Экранный переводчик



Translator
экранный переводчик

платформа:  Windows XP ... Windows 7
требования: 256 Mb свободной памяти
размер:         4.4 Мб

Дополнительные компоненты:
расширенный англо-русский словарь 6.4 Мб


скачать экранный переводчикописание экранного переводчика



изменено 05-Feb-12