Словарные и фразовые статьи в лексиконе

Виды статей в лексиконе

Лексикон грамматического cловаря поддерживает два типа статей: словарные и фразовые. Главное отличие между ними заключается в возможностях описания грамматических форм и хранения морфологических признаков.

Словарные статьи лексикона поддерживают определение парадигмы - множества форм, например - склонение для существительных.

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

Словарные статьи

Лексикон главным образом образуется словарными статьями. Каждая словарная статья - это базовая форма, лемма (к примеру, неопределенная форма для глаголов) и полная парадигма, то есть все корректные возможные грамматические формы. С помощью программы Грамматический Словарь Русского Языка можно увидеть содержимое словарных статей:

Русский словарь

С лексиконом, загруженным в SQL БД, можно работать с помощью программы SQLex:

SQL редактор словаря

Словарные статьи создаются с помощью конструкций на внутреннем языке в виде операторов в текстовых файлах словаря.

Проще всего определять словарные статьи для классов слов с нулевой парадигмой:

[entry] имя_статьи : имя_класса

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

entry где : местоимение

Или так:

где:местоимение

Случай обязательного использования ключевого слова entry:

entry где - нибудь : местоимение

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

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

entry КОШКА : СУЩЕСТВИТЕЛЬНОЕ
{
     :
     :
  РОД:ЖЕН
  ПЕРЕЧИСЛИМОСТЬ:ДА
  ОДУШ:ОДУШ

  ПАДЕЖ:(ИМ) ЧИСЛО { КОШКА КОШКИ }
     :
}

Общий формат таков:

entry имя_статьи : имя_класса
{
  [атрибутная_координатная_пара ]
    :
  [задание_таблицы_склонения ]
  [определение_грам_форм ]
    :
  [определение_связей_для_тезауруса ]
    :
}

Каждая атрибутная координатная пара - это имя координаты и имя состояния, разделенные двоеточием:

род : муж

Если координата бистабильная, то определение координатной пары таково:

~одушевленность

или

одушевленность

Порядок определения координатных пар, а также размещение их на странице никакого значения не имеют. Однако все атрибуты, заданные для грамматического класса, к которому относится статья, должны быть определены явно. Исключение составляют бистабильные атрибуты, отсутствие определения которых рассматривается Транслятором как установка состояния false. То есть, атрибутную пару для координаты одушевленность можно пропустить для нашего примера. Если какой-то атрибут окажется неопределенным после считывания описания статьи, Транслятор остановит работу с выдачей диагностики.

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

имя_координаты: имя_сост1, ...,имя_состn

Такая запись означает, что атрибут имеет одновременно все перечисленные через запятую состояния. Типичный случай - описание падежной валентности для предлогов или глаголов, когда некий предлог может сочетаться с подмножеством падежей имен (существительных и т.д):

entry по : предлог { падеж:дат, вин }

Пример описания словарной статьи:

entry клапан : существительное
{
 
род: муж
// координатные пары для атрибутов.
 
~одушевленность // это использование бистабильной координаты
 
падеж: им число: ед { клапан }
 
падеж: им
число: мн { клапаны }
 
падеж: род
число:ед { клапана }
 
падеж: род
число: мн { клапанов }
 
:
  :
}

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

Две строки:

падеж: им число: ед { клапан }
падеж: им
число: мн { клапаны }

могут быть сведены в одну благодаря свойству автоматического перечисления (автоиндексации):

падеж: им число { клапан клапаны }

То есть подразумевается, что небистабильная координата без указанного состояния пробегает все свои состояния согласно порядку их описания оператором enum. Можно записать и так:

число: ед падеж { клапан клапана }

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

Запись типа:

имя_коорд :*  { x }

означает, что несколько грамматических форм, отличающихся только одной координатой, имеют совпадающее лексическое значение. В данном контексте символ * интерпретируется как ‘для всех состояний, заявленных для данной координаты’. Другими словами, это пример употребления квантора any. К примеру:

падеж:* число: ед { кенгуру }

приведет к такому же внутреннему представлению, что группа строк:

падеж:им число:ед { кенгуру }
падеж:род
число:ед { кенгуру }
падеж:тв
число:ед{ кенгуру }
падеж:вин
число:ед { кенгуру }
падеж:дат
число:ед { кенгуру }
падеж:пр
число:ед { кенгуру }

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

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

Описание многолексемных предлогов и союзов достаточно просто, так как морфологическая парадигма классов союз и предлог нулевая:

entry после того как:союз
entry
наряду с:предлог

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

entry кто-либо: местоимение
{
 
падеж: им
{ “кто-либо” }
 падеж: род
{ “кого-либо” }
 :
}

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

Грамматическая сеть (тезаурус) позволяет объявлять связь понятий в явном виде. В сети отражаются отношения синонимии (око-глаз), антонимии (большой-малый), родо-видовые (стол-мебель и мебель-диван), внутривидовые (стул-табурет), межвидовые (бежать-прыгать) и другие . Обычно удобнее указывать связи не прямо в словарных статьях, а отдельно (см. спецификации).

Указание на таблицу формообразования (парадигму)

Хотя можно перечислять грамматические формы для каждой словарной статьи, можно воспользоваться регулярностями формообразования в естественных языках и объявить несколько универсальных таблиц формообразования (парадигм), а в словарных статьях ссылаться на эти таблицы. Сами парадигмы содержат алгоритм получения всех форм из базовой, обычно это усечение базовой формы до корня и добавление различных окончаний.

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

entry АБСТРАКТНОСТЬ : СУЩЕСТВИТЕЛЬНОЕ { paradigm Сущ_2008 }

В данном примере Сущ_2008 - это название нужной парадигмы.

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

Иногда удобнее не указывать явно на нужную парадигму статьи, а воспользоваться автоматическим подбором парадигмы для статьи. Дело в том, что парадигмы могут быть объявлены с указанием регулярного выражения, соответствие которого базовой форме словарной статьи заставляет эту парадигму "примениться" и сформировать все формы. Чтобы автоподбор парадигмы cработал, нужно, во-первых, указать в статье ключевые слова paradigm auto, , во-вторых, объявить парадигму с соответствующим фильтром:

paradigm auto : ENG_NOUN for "(.+)S"
{
 NUMBER { "" "%+ES" }
}

entry PASS : ENG_NOUN
{
 paradigm auto
}

В данном случае будет сгенерировано 2 формы pass и passes.

В конечном итоге не имеет значения, как будут заданы грамматические формы статьи - прямым перечислением в теле статьи или косвенно, через указание на парадигму. После компиляции словаря оба варианта дадут идентичный лексикон.

Импорт форм из другой статьи с модификацией

В английском языке очень большое значение имеет удобство описания фразовых глаголов - устойчивых сочетаний глаголов с постфиксами, чья семантика отличается от базового глагола. К примеру, фразовый глагол to go on - продолжать - по смыслу мало связан с to go (идти) и on (на,в).

Из-за большого количества таких словарных статей, а также по причине того факта, что базовый глагол может быть неправильным, в языке описания словарных статей предусмотрена специальная конструкция для импорта форм из другой статьи с добавлением заданного постфикса (постфиксов). К примеру, словарная статьи to go on может быть описана так:

 entry go on : ENG_VERB
 { 
  import from eng_verb:go{} using postfix on
 }

Разумеется, статья для глагола to go должна быть к этому времени полностью описана.

Кроме добавления постфикса, то есть правой части, можно потребовать добавление префикса с помощью ключевого слова prefix вместо postfix.

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

 entry дать дёру : глагол
 { 
  ВИД : НЕСОВЕРШ
  ПЕРЕХОДНОСТЬ:НЕПЕРЕХОДНЫЙ
  import from глагол:Дать{} using postfix дёру
 }

Имя словарной статьи

Обычно имя словарной статьи совпадает с базовой формой.

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

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

s

Многословные словарные статьи

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

Многословных словарных статей достаточно немного, включение каждой такой статьи в лексикон требует тщательного анализа. Дело в том, что многословные статьи оказывают влияние на работу токенизатора - этот алгоритм автоматически учитывает подобные случаи, и во время сегментации текста объединяет соответствующие цепочки слов в мультилексемы.

Местоимения: кто-либо (склоняется первая часть - кого-либо, кем-либо и так далее)

Наречия: с утра, весь день, дó ночи (любопытно, в некоторых вариантах произношения ударение падает на предлог, и второе слово в этом наречии вообще не несет ударения)

Предлоги: в сравнении с, вместе с

Союзы: постольку, поскольку

Глаголы: дать дёру, потерпеть фиаско

Причастие: потерпевший фиаско

Деепричастие: в ожидании (не совсем корректно считать это слово именно деепричастием, но если сравнить с ожидая то четко прослеживается синонимия в употреблении ожидая чуда - в ожидании чуда)

Существительные: Нижний Новгород, Нижний Тагил, Вышний Волочек, Великий Устюг, Петр Первый

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

Для английского языка тоже есть подобные словарные статьи:

существительные: General Motors, Humpty Dumpty

глаголы: очень большое количество фразовых глаголов - to look out, to sit down и т.д.

Омонимия

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

Если две словарные статьи относятся к разным частям речи (грамматическим классам), то нет никаких сложностей с их описанием. Например, причастие пища (от пищать) и существительное пища (еда) описываются без каких-либо дополнительных усилий. В английском языке данное явление носит массовый характер - существенная часть слов может быть существительными, глаголами, наречиями и прилагательными в зависимости от контекста.

Сложности возникают, если две статьи с одинаковой базовой формой относятся к одной части речи (грамматическому классу). Компилятор словаря для обеспечения консистентности базы данных контролирует, чтобы не было повторного определения пары класс+имя_статьи. Простое, но не очень удобное решение - задавать статьям имена типа

папка_1 для существительного женского рода - папка для документов

папка_2 для существительного мужского рода - просторечный вариант папа

Избавиться от таких неудобных механизмов описания омонимичных статей позволяет специальные директивы лексикона.

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

omonym add существительное:папка{}

Затем, можно описать все омонимичные статьи, компилятор знает, что это допустимо для данной пары класс+имя_стятьи.

Наконец, чтобы обезопасить себя от некорректного описания еще одной статьи с тем же именем, следует написать директиву

omonym remove существительное:папка{}

После этой директивы компилятор не допустит описания нового существительного с именем папка.

В разделе Грамматического Словаря Русского Языка есть подробные описания с примерами омонимии для видовых пар русских глаголов и различные случаи омонимии для русских существительных.

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

Среди исходных текстов русского словаря (входят в Полный SDK) можно найти файлы rus_nouns_omonyms.sol и rus_verbs_omonyms.sol, где видны реальные способы описания омонимов.

Порядок грамматических форм в словарной статье

Вообще говоря, можно определять грамматические формы в любом порядке.

Порядок определения форм играет роль в случае, когда ищется подходящая форма по заданным морфологическим признакам, и в статье есть несколько альтернативных форм, подходящих под условия. К примеру, сравнительная степень русских прилагательных допускает иногда морфологически эквивалентные варианты:

интереснее - интересней - поинтереснее - поинтересней

В таких случаях лучше всего первой описать наиболее распространенную, стилистически нейтральную форму. Это позволит такой функции в правилах трансформации, как wordform_refresh, найти именно эту форму.

Фразовые статьи

Отдельную сущность представляют фразовые статьи - словосочетания и фрагменты текста произвольной длины. С помощью фразовых статей описываются, к примеру, многословные синонимы:

валять дурака = балбесничать

и переводы

out of order = неисправный

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

Обычно фразовые статьи описываются неявным способом в тезаурусе - как левые и правые части сложных связей.

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

   phrase "произвольный текст"
{
 тело статьи - дополнительные данные
}

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

Среди дополнительных данных в теле статьи могут присутствовать:

1. Указание на ведущее слово

pivot "строка"

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

Пример задания ведущего слова - глагола いる - числовым индексом:

phrase 揃っている
     {
      pivot 1
      language:Japanese
     }

То же самое можно описать альтернативным форматом:

phrase 揃っている
     {
      pivot "揃って | [いる]"
      language:Japanese
     }

Семантика данного свойства фразы описывается здесь.

2. Язык фразы (из числа объявленных ранее в словаре)

language:НазваниеЯзыка

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

3. Грамматический класс, если словосочетание участвует в соответствующих грамматических отношениях:

class:НазваниеКласса

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

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

В процедурном API есть набор функций для работы с фразами: sol_FindPhrase, sol_AddPhrase, sol_DeletePhrase, sol_GetPhraseText, sol_GetPhraseLanguage, sol_GetPhraseClass.

Хранение статей в SQL базе данных

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

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

Дополнительные материалы по лексикону и словарю

Части речи

Грамматические координаты

Парадигмы

Метастатьи

Лексикон

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

Языки

Тезаурус

Морфологический анализатор

Внутренний язык грамматической машины

Словарь

Компилятор словаря

Word entries in lexicon

Phrase entries in lexicon

  © 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 Мб


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



изменено 14-Jul-12