Связь между газеттиром и грамматикой

Ссылка из грамматики в газеттир

Если мы хотим ограничить терминал или главное слово нетерминала каким-то множеством слов или словосочетаний, то делаем это с помощью kwtype (подробнее о kwtype) и kwset (подробнее о kwset), например:

Noun<kwtype=имя_типа_или__статьи>

или

NP<kwset=[имя_типа_или_статьи1 , ..., имя_типа_или_статьи2 ]

При нетерминале лучше использовать kwset, так будет быстрее работать.

Если указывается тип статьи, то это равносильно явному перечислению всех имен статей с этим типом. Иногда нужно, чтобы на вход парсеру уже подавались заранее собранные цепочки — мультиворды. Например, мы пишем грамматику выделяющую имена, и мы не хотим выделять имя в цепочке «г. Владимир». Тогда можно написать статью в газеттире, где явно задать список таких городов со словами «г» или «город» («г. Киров», «город Владимир»). Затем с помощью директивы #GRAMMAR_KWSET дать ссылку на эту статью в грамматике про имена. Тогда парсер перед запуском грамматики на предложении «В г. Кирове» в качестве входного символа построит мультиворд «г_Владимир» и парсер просто не увидит отдельно слова «Владимир». Подробнее про этот прием см. тут.

Ссылка из газеттира в грамматику

Если мы хотим написать газеттирную статью, ключом которой являются все цепочки, выделяемые грамматикой из файла grammar.cxx, то мы пишем так:

key = { "tomita:grammar.cxx" type=CUSTOM }

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

Использование газеттира при нормализации

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

Например, есть грамматика:

Country -> Word<kwtype= geo_country >;
S-> Country interp(Geo.Country);

И статья, на которую она ссылается:

geo_country "гео_россия"
{
    key = "россия"| "рф"
    lemma = "россия"
}

Тогда на фразе «президент РФ» грамматика отработает и напишет в поле Country факта Geo слово «россия».

Грамматические признаки мультиворда

Если ключ газетирной статьи состоит больше чем из одного слова и на эту статью есть ссылка из грамматики, то грамматика видит этот ключ как одно слово. При обработке входного предложения из этих слов строится мультиворд. При этом грамматические характеристики, которые проверяются пометами gram или GU<ссылка>, наследуются от главного слова. Оно указывается в поле mainword (см. Главное слово статьи (mainword).

Например, грамматика, ссылающаяся на статью heads:

N -> Word<kwtype=heads>;
Post -> N<gram='anim'>;

Газеттир, в котором есть эта статья:

heads "ген_дир"
{ 
    key = "генеральный директор"
}

На фразе “Генеральный директор Петров” такая грамматика не сработает. У статьи «ген_дир» не указано главное слово, которое по умолчанию первое. Тогда мультиворд «генеральный_директор» берет свои грамматические характеристики от слова «генеральный», у которого нет категории одушевленности. Правильно написать:

heads "ген_дир"
{ 
    key = "генеральный директор"
    mainword = 2
}