Синтаксис газеттира

Статья словаря в общем виде

ТипСтатьи “НазваниеСтатьи”
{
    Ключ = "..."
    Поле1 = "..."
    ...
    ПолеN = "...
}

Описание статьи словаря состоит из типа статьи, названия статьи и содержания статьи. Содержание статьи ограничивается фигурными скобками { }. Содержание статьи – это названия полей и их значения после знака равенства =. Каждое следующее поле отделяется переносом строки или фигурными скобками.

Фигурные скобки также отделяют внутренние блоки статьи.

object “Гора”
{
    key = “Говерла”
}

Тип статьи

Тип статьи записывается перед ее названием. Название типа статьи может состоять из букв латинского алфавита с учетом регистра, цифр и символа подчеркивания (_). Цифры в начале названия типа статьи запрещены. Существует базовый тип статьи в газеттире — TAuxDicArticle, остальные типы являются производными от него и должны быть заранее объявлены. Тип статьи определяет состав ее полей.

Примеры правильных названий типов статей: TAuxDicArticle, funny_animal, object.

Типы статей часто используются для того, чтобы объединить статьи в определенные группы, например, все названия городов в тип статьи city. Для этого определяют тип статьи, производный от TAuxDicArticle и не содержащий полей.

message city : TAuxDicArticle {}

Типы статей можно использовать в ограничениях kwtype и kwset.

Предопределенные типы статей

Несколько типов статей определены во встроенном в парсер файле kwtypes_base.proto. Эти названия нельзя переопределять, но ими можно пользоваться в словарях, создавая статьи этого типа, и в грамматиках, ссылаясь на эти типы.

Название типа Семантика
fio встроенный в парсер C++-алгоритм выделения ФИО
fio_without_surname Выделенные тем же алгоритмом ФИО, но без фамилии
date встроенный в парсер алгоритм выделения дат (например, «01.08.1012», «1 января 2011 года»)
number встроенный в парсер алгоритм выделения чисел (например, «1342 тыс.», «1,342 миллиона»)
Название типа Семантика
fio встроенный в парсер C++-алгоритм выделения ФИО
fio_without_surname Выделенные тем же алгоритмом ФИО, но без фамилии
date встроенный в парсер алгоритм выделения дат (например, «01.08.1012», «1 января 2011 года»)
number встроенный в парсер алгоритм выделения чисел (например, «1342 тыс.», «1,342 миллиона»)

Название статьи

Название статьи записывается в кавычках. Оно состоит из букв любого алфавита с учетом регистра, цифр и символов подчеркивание (_) и косая черта (/). Цифры в начале названия статьи запрещены. Названия статей должны быть уникальными. Перед названием статьи обязательно указываться ее тип.

Примеры правильных названий статей: Гора, mountain/83, _dağ1.

Комментарии

Комментарии вводится двумя косыми чертами (как в C++).

// комментарий

Ключ

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

key = "дед мороз"

Варианты ключа (|)

Знак | («или») разделяет несколько вариантов ключа.

key = "кто-то" | "что-то"

Поиск по точной форме (!)

Знак ! («искать по точной форме») сообщает газеттиру, что искомое слово должно совпадать с точной формой слова, указанного в ключе. Знак ! распространяется только на слово, перед которым он находится.

key = { "не !дай !бог" }

Помета morph = EXACT_FORM аналогична знаку «!», поставленному перед каждым словом ключа. Например:

key = { "не дай бог" morph = EXACT_FORM }

Ссылка на другую статью ($)

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

key = “дикий $название_животного”

Регистр (Case = UPPER)

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

key = { "только в верхнем регистре" Case = UPPER }

Главное слово статьи (mainword)

Помета указывает, какое из слов ключа является главным словом (вершиной) статьи. Грамматическая информация от этого слова присваивается цепочке, которую описывает статья. Номера слов считаются, начиная с 1. Например:

key = { "дикая собака" mainword = 2 }

Если mainword записывается снаружи ключа, то он относится ко всем ключам данной статьи. Например:

key = "дикая собака"
key = "дикий кот"
mainword = 2

Замена цепочки (lemma)

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

В поле lemma можно указать параметры always и indeclinable:

* если значение параметра always = 1, то определенная статьей цепочка заменяется на значение поля lemma, даже если статья не участвовала в формировании цепочки, в которую она включается. По умолчанию always = 0.

* если значение indeclinable = 1, то при лемматизации значение поле lemma не меняется. По умолчанию indeclinable = 1

Грамматические пометы в описании ключей

Помета gram

Значения этого поля — граммемы (см. список всех используемых граммем в разделе Значения граммем), которые применяются к ключу. Например, gram=sg означает, что статье соответствуют только формы ключа в единственном числе. Например:

key = { "стол" gram=sg }

Помета word

Помета word указывает, к какому из слов многословного ключа применяется помета gram. Если помета word отсутствует, то gram применяется ко всему ключу (надо проверить). Например:

key = { "право потребитель" gram = {"мн", word=1} gram = {"род", word=2} }

Согласование (помета arg)

Помета описывает согласование между двумя словами в ключе. Возможны два типа согласования:

* по роду, числу и падежу: agr=gnc_agr или agr=GENDER+NUMBER+CASE

* по падежу: agr=CASE

key = { "автономный область" | "автономный округ" agr=gnc_agr }
key = { "главный редактор" agr=GENDER+NUMBER+CASE }
key = { "вооруженный сила" gram="мн" agr=CASE }

Специальные типы ключей

Есть два специальных типа ключей:

* type = CUSTOM для подключения к словарю грамматик и встроенных в парсер алгоритмов

* type = FILE для файлов со списками слов и словосочетаний

* key = { "alg:fio" type=CUSTOM } — ссылается на C++ алгоритм выделения ФИО

* key = { "tomita:geo/city.cxx" type=CUSTOM} — ссылается на грамматику. Можно указывать относительный или полный путь.

* key = { "animals.txt" type=FILE } — ссылается на файл со списком слов.