Имя существительное в морфологическом словаре
Кроме наименования объектов, существительные могут обозначать также действия:
возвращение, кручение
В русском языке значительная доля таких существительных образуется от глаголов очень однообразно и имеют в именительном падеже единственного числа окончание -ие/-ье:
кормить - кормление
Эти существительные относятся к среднему роду, многие из них не перечислимые, то есть не имеют употребимых форм множественного числа:
скукоживание
Связь между порождающим глаголом и порожденным существительным можно найти в тезаурусе. Как и все отношения, описываемые в тезаурусе, они имеют определенный тип связи. В справочнике SG_STATE типы связей тезауруса имеют в поле id_coord значение 0, поэтому запрос:
выведет список типов связей, и среди них нужный нам тип в_сущ:
idname . 37в_сов 38в_несов 39в_сущ 40в_прил 41в_наречие .
Чтобы наконец увидеть, от каких глаголов порождаются существительные, воспользуемся таблицами SG_LINK - связи между словарными статьями, SG_ENTRY - шапки словарных статей. Такой запрос:
выдаст примерно такой список:
прирезатьприрезание повиноватьсяповиновение врезатьврезка перерезатьперерезание вырезатьвырезание отрезатьотрезание подрезатьподрезание срезатьсрезание срезатьсясрезание нарезатьсянарезка
Получение информации о существительном из SQL словаря
Род - постоянный грамматический признак имени существительного в русском языке. Все грамматические формы существительного имеют один и тот же род. Как и другие постоянные грамматические признаки словарных статей, информация о роде хранится в таблице SG_ENTRY_COORD . Привязка к словарной статье осуществляется через внешний ключ - поле SG_ENTRY_COORD.id_entry=SG_ENTRY.id. Для одной записи в SG_ENTRY может быть множество записей в SG_ENTRY_COORD, хранящих информацию, к примеру, о роде, одушевленности, перечислимости, глагольном виде и так далее.
Чтобы отфильтровать запись в SG_ENTRY_COORD , соответствующую именно грамматическому роду, надо знать ID признака 'род'. Для его определения можно посмотреть содержимое справочника SG_COORD :
Среди записей найдется и грамматический род:
idname . 9ЛИЦО 10ЧИСЛО 11РОД 12ПЕРЕХОДНОСТЬ 13ПРИЧАСТИЕ .
Обратите внимание, что текстовое наименование хранится в верхнем регистре, это справедливо для многих справочников SQL словаря.
Таким образом, ID для признака грамматического рода имеет значение 11. Следует, впрочем, иметь в виду, что разные версии SQL словаря могут иметь различия в ID справочников. Поэтому следует избегать внесения числовых констант ID в программный код, используя вместо этого либо поставляющие для процедургого API файлы с объявлениями констант, либо искать перед началом работы текущие актуальные значения ID.
Полностью аналогично обстоят дела с ID частей речи. Нам надо отобрать среди всего лексикона только существительные, чтобы гарантированно подстраховаться от омонимов типа мямля (сущ) - мямля (деепричастие). Информация о частях речи хранится в нескольких таблицах, из которых нас интересует только SG_CLASS - собственно список ID и названий частей речи:
idname . 6ADJ 7VERB 8СУЩЕСТВИТЕЛЬНОЕ 9МЕСТОИМ_СУЩ 10МЕСТОИМЕНИЕ .Вернемся к определению рода существительных. В целом задача решается цепочкой таблиц SG_ENTRY , SG_ENTRY_COORD , SG_STATE . В дополнение к ним в запросе будут участвовать таблицы SG_CLASS - справочник частей речи, SG_COORD - справочник грамматических признаков, так что мы вообще избежим задания числовых значений ID в запросе ценой некоторой потери эффективности. Впрочем, оптимизаторы запросов современных СУБД вполне достойно справляются со своими задачами, и в рамках интерактивных настольных приложений дополнительные затраты времени совершенно неощутимы.
Сведя все таблицы, получаем такой демонстрационный запрос:
В нём выполняется поиск трёх словарных статей, соответствующих существительным кот, кошка и животное, а затем для каждого из них выдается информация о грамматическом роде:
существительноеРОД животноеСР котМУЖ кошкаЖЕН
Существительные кот и кошка являются примером довольно обширного подмножества одушевленных русских существительных, обозначающих представителей женского и мужского пола. В этом случае грамматический род фактически совпадает с биологическим полом. Подробнее о родовых парах читайте здесь.
В небольшом количестве случаев в лексиконе присутствуют два существительных с совпадающими грамматическими формами и разным родом. Например, запрос для имени Женя:
вернет две словарных статьи:
существительноеРОД ЖеняМУЖ ЖеняЖЕН
Кроме грамматического рода, каждое существительное в своей словарной статье хранит также признак одушевленности. В целом хранение информации об обушевленности аналогично грамматическому роду. В справочнике SG_COORD есть запись 'ОДУШ', в таблице SG_ENTRY_COORD для словарной статьи по id_entry можно найти значение признака одушевленности. В качестве иллюстрации расширим запрос на вывод грамматического рода, добавив туда вывод одушевленности:
Обратите внимание на нюанс - среди искомых существительных в операторе IN присутствует слово 'оператор', которое соответствует двум словарным статьям. Одно из них одушевленное: оператор станка с ЧПУ. Другое - неодушевленное: оператор дифференцирования. Результаты выполнения запроса будут такие:
СуществительноеРодОдушевлённость операторМУЖОДУШ операторМУЖНЕОДУШ мясоСРНЕОДУШ животноеСРОДУШ котМУЖОДУШ шерстьЖЕННЕОДУШ кошкаЖЕНОДУШ
Склонение существительных
Подавляющее большинство русских существительных имеют множество грамматических форм. Изменение существительного по падежам и числам называется склонение.
Обычно существительное имеет 12 форм - шесть основных падежей в единственном и множественном числе. В некоторых случаях добавляется поэтическая форма творительного падежа рукой-рукою. Для неперечислимых существительных словарные статьи включают шесть грамматических форм.
В самом простом случае вывести все грамматические формы существительного можно таким запросом:
Он использует таблицу SG_FORM , хранящую формы словарной статьи, и справочник COORD_PAIRS с информацией о грамматических признаках каждой формы. Результат будет таким:
namestr_pairs кресло ЧИСЛО:ЕД ПАДЕЖ:ИМ кресла ЧИСЛО:МН ПАДЕЖ:ИМ кресла ЧИСЛО:ЕД ПАДЕЖ:РОД кресел ЧИСЛО:МН ПАДЕЖ:РОД креслом ЧИСЛО:ЕД ПАДЕЖ:ТВОР креслами ЧИСЛО:МН ПАДЕЖ:ТВОР кресло ЧИСЛО:ЕД ПАДЕЖ:ВИН кресла ЧИСЛО:МН ПАДЕЖ:ВИН креслу ЧИСЛО:ЕД ПАДЕЖ:ДАТ креслам ЧИСЛО:МН ПАДЕЖ:ДАТ кресле ЧИСЛО:ЕД ПАДЕЖ:ПРЕДЛ креслах ЧИСЛО:МН ПАДЕЖ:ПРЕДЛ
В поле COORD_PAIRS.str_pairs хранится список признаков в читабельном виде, как одна строка. Каждый признак в ней отделяется пробелами слева и справа. Это позволяет использовать оператор LIKE для фильтрации форм, если скорость запроса не очень важна и использование таблицы SG_FORM_COORD доставляет неудобства. Например, предыдущий запрос можно модифицировать, добавив фильтр единственного числа:
В результирующей выборке после этого останется только шесть падежных форм единственного числа: