Здесь определяются некоторые правила генерации, такие как: превращать ли первый символ каждого предложения в заглавный; ставить ли точку в конце текста, если текст не оканчивается символом завершения; в каком XML файле хранится шаблон и т. д.
Модели
Каждая модель имеет одну или несколько вариаций строк. При обращении к модели - возвращается текст, содержащийся в одной из её вариаций. Например, если модель [монстр] содержит следующие вариации 1) леший 2) огр 3) болотник
То при обращении к [монстр] возвращается либо леший, либо огр, либо болотник. Различные вариации могут иметь различные приоритеты. Например, если приоритет лешего равен единице, а приоритет огра равен двойке, то огр будет встречаться в два раза чаще, чем леший.
В тексте могут употребляться специальные теги, которые отличаются между собой по функционалу. Например, тег [модель] замещается случайным текстом по указанной модели. Таким образом, модели могут ссылаться друг на друга создаётся сложную иерархию генерируемого текста. Рассмотрим на примере шаблона, имеющего две модели [main](с которого и начинается генерация текста) и [монстр]
Модель [main]содержит вариации: 1) На тебя напал [монстр]! 2) К тебе движется [монстр]! 3) Тебе встретился [монстр]!
Модель [монстр] содержит вариации: 1) леший 2) огр 3) болотник
Значит, при обращении к [main]данного шаблона может быть сгенерировано одно из девяти предложений: 1) На тебя напал леший! 2) На тебя напал огр! 3) На тебя напал болотник! 4) К тебе движется леший! 5) К тебе движется огр! 6) К тебе движется болотник! 7) Тебе встретился леший! 8) Тебе встретился огр! 9) Тебе встретился болотник!
Помимо тегов, ссылающихся на модели, существуют теги, ссылающиеся на переменные и выборку, устанавливающие переменным новые значения и т. д.
Переменные
Шаблон может содержать набор переменных, используемых в процессе генерации текста или хранящихся в ответе на запрос к шаблону для дальнейшего извлечения в технических целях. Значения переменных могут передаваться по запросу к шаблону (например, если заранее известно кто монстр, но нужно сгенерировать текст, который содержал бы имя известного монстра); а могут устанавливаться и в процессе генерации текста через тег set(variable=value), например, следующая модель установит случайного монстра
модель [установить_монстра] вариации: 1) set(монстр=леший) 2) set(монстр=огр) 3) set(монстр=болотник)
А модель [main]сначала обращается к установке монстра, а затем использует переменную {?монстр} для генерации текста: 1) [установить_монстра]На тебя напал {?монстр}! 2) [установить_монстра]Тебе встретился {?монстр}!
Выборка
Значение выборки зависит от определяющей переменной, если проводить аналогию с программированием, то выборка схожа на конструкцию select case
Для выборки определяется переменная и список возможных значений. Каждое возможное значение помимо самого значения содержит ключ (значение переменной при которой применяется именно данное значение) Например, у нас есть выборка {упал} которая возвращает "упал", "упала", "упало" или "упали" в зависимости от значения переменной {?род}. Если {?род} = м, то {упал} = "упал" Если {?род} = ж, то {упал} = "упала" Если {?род} = с, то {упал} = "упало" Если {?род} = мн, то {упал} = "упали"
Описание выборки {упал}: Определяющая переменная = род Список значений: 1) м: упал 2) ж: упала 3) c: упало 4) мн: упали
В значениях выборки допустимо использование тегов: 1) м: [упал] 2) ж: [упала] 3) c: [упало] 4) мн: [упали]