Кроме наименования объектов, существительные могут обозначать также действия:
возвращение, кручение
В русском языке значительная доля таких существительных образуется от глаголов очень однообразно и имеют в именительном падеже единственного числа окончание -ие/-ье:
кормить - кормление
Эти существительные относятся к среднему роду, многие из них не перечислимые, то есть не имеют употребимых форм множественного числа:
скукоживание
Связь между порождающим глаголом и порожденным существительным можно найти в тезаурусе. Как и все отношения, описываемые в тезаурусе, они имеют определенный тип связи. В справочнике SG_STATE типы связей тезауруса имеют в поле id_coord значение 0, поэтому запрос:
SELECT id, name FROM sg_state WHERE id_coord=0 ORDER BY id
выведет список типов связей, и среди них нужный нам тип в_сущ:
id | name |
---|---|
... | |
37 | в_сов |
38 | в_несов |
39 | в_сущ |
40 | в_прил |
41 | в_наречие |
... |
Чтобы наконец увидеть, от каких глаголов порождаются существительные, воспользуемся таблицами SG_LINK - связи между словарными статьями, SG_ENTRY - шапки словарных статей. Такой запрос:
SELECT V.name, N.name FROM sg_class C, sg_entry N, sg_link L, sg_state S, sg_entry V WHERE C.name='ИНФИНИТИВ' AND V.id_class=C.id AND L.id_entry1=V.id AND S.id_coord=0 AND S.name='в_сущ' AND L.istate=S.id AND N.id=L.id_entry2
выдаст примерно такой список:
прирезать | прирезание |
повиноваться | повиновение |
врезать | врезка |
перерезать | перерезание |
вырезать | вырезание |
отрезать | отрезание |
подрезать | подрезание |
срезать | срезание |
срезаться | срезание |
нарезаться | нарезка |
Род - постоянный грамматический признак имени существительного в русском языке. Все грамматические формы существительного имеют один и тот же род. Как и другие постоянные грамматические признаки словарных статей, информация о роде хранится в таблице SG_ENTRY_COORD. Привязка к словарной статье осуществляется через внешний ключ - поле SG_ENTRY_COORD.id_entry=SG_ENTRY.id. Для одной записи в SG_ENTRY может быть множество записей в SG_ENTRY_COORD, хранящих информацию, к примеру, о роде, одушевленности, перечислимости, глагольном виде и так далее.
Чтобы отфильтровать запись в SG_ENTRY_COORD, соответствующую именно грамматическому роду, надо знать ID признака 'род'. Для его определения можно посмотреть содержимое справочника SG_COORD:
SELECT id, name FROM sg_coord ORDER BY id
Среди записей найдется и грамматический род:
id | name |
---|---|
... | |
9 | ЛИЦО |
10 | ЧИСЛО |
11 | РОД |
12 | ПЕРЕХОДНОСТЬ |
13 | ПРИЧАСТИЕ |
... |
Обратите внимание, что текстовое наименование хранится в верхнем регистре, это справедливо для многих справочников SQL словаря.
Таким образом, ID для признака грамматического рода имеет значение 11. Следует, впрочем, иметь в виду, что разные версии SQL словаря могут иметь различия в ID справочников. Поэтому следует избегать внесения числовых констант ID в программный код, используя вместо этого либо поставляющие для процедургого API файлы с объявлениями констант, либо искать перед началом работы текущие актуальные значения ID.
Полностью аналогично обстоят дела с ID частей речи. Нам надо отобрать среди всего лексикона только существительные, чтобы гарантированно подстраховаться от омонимов типа мямля (сущ) - мямля (деепричастие). Информация о частях речи хранится в нескольких таблицах, из которых нас интересует только SG_CLASS - собственно список ID и названий частей речи:
SELECT id, name FROM SG_CLASS ORDER BY id
id | name |
---|---|
... | |
6 | ADJ |
7 | VERB |
8 | СУЩЕСТВИТЕЛЬНОЕ |
9 | МЕСТОИМ_СУЩ |
10 | МЕСТОИМЕНИЕ |
... |
Вернемся к определению рода существительных. В целом задача решается цепочкой таблиц SG_ENTRY, SG_ENTRY_COORD, SG_STATE. В дополнение к ним в запросе будут участвовать таблицы SG_CLASS - справочник частей речи, SG_COORD - справочник грамматических признаков, так что мы вообще избежим задания числовых значений ID в запросе ценой некоторой потери эффективности. Впрочем, оптимизаторы запросов современных СУБД вполне достойно справляются со своими задачами, и в рамках интерактивных настольных приложений дополнительные затраты времени совершенно неощутимы.
Сведя все таблицы, получаем такой демонстрационный запрос:
SELECT E.name AS 'существительное', GS.name AS 'РОД' FROM sg_coord GC, sg_state GS, sg_class C, sg_entry E, sg_entry_coord EC WHERE GC.name='РОД' AND GS.id_coord=GC.id AND C.name='СУЩЕСТВИТЕЛЬНОЕ' AND E.id_class=C.id AND E.name IN ('кот','кошка','животное') AND EC.id_entry=E.id AND EC.icoord=GC.id AND GS.id=EC.istate
В нём выполняется поиск трёх словарных статей, соответствующих существительным кот, кошка и животное, а затем для каждого из них выдается информация о грамматическом роде:
существительное | РОД |
---|---|
животное | СР |
кот | МУЖ |
кошка | ЖЕН |
Существительные кот и кошка являются примером довольно обширного подмножества одушевленных русских существительных, обозначающих представителей женского и мужского пола. В этом случае грамматический род фактически совпадает с биологическим полом. Подробнее о родовых парах читайте здесь.
В небольшом количестве случаев в лексиконе присутствуют два существительных с совпадающими грамматическими формами и разным родом. Например, запрос для имени Женя:
SELECT E.name AS 'существительное', GS.name AS 'РОД' FROM sg_coord GC, sg_state GS, sg_class C, sg_entry E, sg_entry_coord EC WHERE GC.name='РОД' AND GS.id_coord=GC.id AND C.name='СУЩЕСТВИТЕЛЬНОЕ' AND E.id_class=C.id AND E.name='Женя' AND EC.id_entry=E.id AND EC.icoord=GC.id AND GS.id=EC.istate
вернет две словарных статьи:
существительное | РОД |
---|---|
Женя | МУЖ |
Женя | ЖЕН |
Кроме грамматического рода, каждое существительное в своей словарной статье хранит также признак одушевленности. В целом хранение информации об обушевленности аналогично грамматическому роду. В справочнике SG_COORD есть запись 'ОДУШ', в таблице SG_ENTRY_COORD для словарной статьи по id_entry можно найти значение признака одушевленности. В качестве иллюстрации расширим запрос на вывод грамматического рода, добавив туда вывод одушевленности:
SELECT E.name AS 'Существительное', GS.name AS 'Род', AnS.name AS 'Одушевлённость' FROM sg_coord GC, sg_state GS, sg_coord AnC, sg_state AnS, sg_class C, sg_entry E, sg_entry_coord EC1, sg_entry_coord EC2 WHERE GC.name='РОД' AND GS.id_coord=GC.id AND AnC.name='ОДУШ' AND AnS.id_coord=AnC.id AND C.name='СУЩЕСТВИТЕЛЬНОЕ' AND E.id_class=C.id AND E.name IN ('оператор','кот','кошка','мясо','шерсть','животное') AND EC1.id_entry=E.id AND EC1.icoord=GC.id AND GS.id=EC1.istate AND EC2.id_entry=E.id AND EC2.icoord=AnC.id AND AnS.id=EC2.istate
Обратите внимание на нюанс - среди искомых существительных в операторе IN присутствует слово 'оператор', которое соответствует двум словарным статьям. Одно из них одушевленное: оператор станка с ЧПУ. Другое - неодушевленное: оператор дифференцирования. Результаты выполнения запроса будут такие:
Существительное | Род | Одушевлённость |
---|---|---|
оператор | МУЖ | ОДУШ |
оператор | МУЖ | НЕОДУШ |
мясо | СР | НЕОДУШ |
животное | СР | ОДУШ |
кот | МУЖ | ОДУШ |
шерсть | ЖЕН | НЕОДУШ |
кошка | ЖЕН | ОДУШ |
Подавляющее большинство русских существительных имеют множество грамматических форм. Изменение существительного по падежам и числам называется склонение.
Обычно существительное имеет 12 форм - шесть основных падежей в единственном и множественном числе. В некоторых случаях добавляется поэтическая форма творительного падежа рукой-рукою. Для неперечислимых существительных словарные статьи включают шесть грамматических форм.
В самом простом случае вывести все грамматические формы существительного можно таким запросом:
SELECT F.name, P.str_pairs FROM sg_class C, sg_entry E, sg_form F, coord_pairs P WHERE C.name='СУЩЕСТВИТЕЛЬНОЕ' AND E.id_class=C.id AND E.name='кресло' AND F.id_entry=E.id AND P.id=F.id_dims
Он использует таблицу SG_FORM, хранящую формы словарной статьи, и справочник COORD_PAIRS с информацией о грамматических признаках каждой формы. Результат будет таким:
name | str_pairs |
---|---|
кресло | ЧИСЛО:ЕД ПАДЕЖ:ИМ |
кресла | ЧИСЛО:МН ПАДЕЖ:ИМ |
кресла | ЧИСЛО:ЕД ПАДЕЖ:РОД |
кресел | ЧИСЛО:МН ПАДЕЖ:РОД |
креслом | ЧИСЛО:ЕД ПАДЕЖ:ТВОР |
креслами | ЧИСЛО:МН ПАДЕЖ:ТВОР |
кресло | ЧИСЛО:ЕД ПАДЕЖ:ВИН |
кресла | ЧИСЛО:МН ПАДЕЖ:ВИН |
креслу | ЧИСЛО:ЕД ПАДЕЖ:ДАТ |
креслам | ЧИСЛО:МН ПАДЕЖ:ДАТ |
кресле | ЧИСЛО:ЕД ПАДЕЖ:ПРЕДЛ |
креслах | ЧИСЛО:МН ПАДЕЖ:ПРЕДЛ |
В поле COORD_PAIRS.str_pairs хранится список признаков в читабельном виде, как одна строка. Каждый признак в ней отделяется пробелами слева и справа. Это позволяет использовать оператор LIKE для фильтрации форм, если скорость запроса не очень важна и использование таблицы SG_FORM_COORD доставляет неудобства. Например, предыдущий запрос можно модифицировать, добавив фильтр единственного числа:
SELECT F.name, P.str_pairs FROM sg_class C, sg_entry E, sg_form F, coord_pairs P WHERE C.name='СУЩЕСТВИТЕЛЬНОЕ' AND E.id_class=C.id AND E.name='кресло' AND F.id_entry=E.id AND P.id=F.id_dims AND P.str_pairs LIKE '% ЧИСЛО:ЕД %'
В результирующей выборке после этого останется только шесть падежных форм единственного числа:
name | str_pairs |
---|---|
кресло | ЧИСЛО:ЕД ПАДЕЖ:ИМ |
кресла | ЧИСЛО:ЕД ПАДЕЖ:РОД |
креслом | ЧИСЛО:ЕД ПАДЕЖ:ТВОР |
кресло | ЧИСЛО:ЕД ПАДЕЖ:ВИН |
креслу | ЧИСЛО:ЕД ПАДЕЖ:ДАТ |
кресле | ЧИСЛО:ЕД ПАДЕЖ:ПРЕДЛ |
Подробнее о склонении существительных с помощью грамматического словаря...
Единственное и множественное число
Существительные без форм единственного числа
Поиск слов в словарной базе данных по русской морфологии
Определение грамматического рода существительных в SQL словаре
© Козиев Илья 2019
![]() |
|
изменено 19-Feb-12 |