Об автоматизации нетворческих литературных процессов

Карпов В.Э., Мещерякова Т.В.

// Информационные технологии №8, 2004.

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

Введение

Сразу следует отметить, что в этой статье не идет речь о развитии работ М.Г.Гаазе-Рапопорта, Д.А.Поспелова и Е.Т. Семеновой ([Гаазе-Рапопорт и др., 1980], [Гаазе-Рапопорт, 1983]) - известных "Поисков вариантов…" и уж тем более - о программной реализации исследований В.Я.Проппа. Во-первых, множество из 31 функции волшебной сказки ([Пропп, 2001]) со всеми взаимосвязями и согласованиями - это достаточно сложный объект, а во-вторых, мы будем говорить как раз о тех произведениях, в отношении которых замечательная, глубокая аналитика Проппа просто не работает. Речь идет о системе, автоматизирующей написание сценариев всякого рода бесконечных сериалов, детективов и прочих им подобных литературных поделок. Не в последнюю очередь выбор именно этих направлений обусловлен тем, что подобного рода сочинений выходит крайне (слишком) много, в этой области занято много людей, а труд их малоквалифицирован, механичен, тяжел и рутинен. Иными словами - это область, испытывающая насущную необходимость в полной или хотя бы частичной автоматизации.

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

Структура произведения

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

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

Рис.1. Общая структура произведения

Пролог  определяет главного героя, его состояние и целевую функцию.  Тело произведения  состоит из множества эпизодов. Каждый эпизод - это встреча двух персонажей - объекта и субъекта. В результате встречи может быть реализован обмен или отъем принадлежащих им вещей.  Эпилог  - это просто некая концовка истории, зависящая от того, по какой причине была завершена история. Причинами могут быть: главный герой добыл то, что нужно; главный герой умер; исчерпано наперед заданное максимальное количество встреч-эпизодов.

Рассмотрим теперь структуры, описывающие объекты, из которых складывается наше произведение.

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

P = <N, {ti}, {gj}, C, L>,                                                (1)

где N - имя персонажа; {ti} - множество принадлежащих ему предметов; {gj} - множество "целей", т.е. тех предметов, которые он хочет получить; C - характеристика (или множество характеристик); L - текущий локус. Типов Cможет быть сколь угодно много. Они нужны лишь для определения того, каков может быть  исход встречи  персонажей. Например, могут использоваться такие характеристики, как H - герой, A - антагонист, N - нейтральный персонаж, h - помощник героя и т.д.

Встреча. Описание встречи состоит из указания объекта и субъекта (кто и с кем встретился). Кроме того, встреча может иметь различные последствия для каждого из участников. Последствия делятся на фатальные и нефатальные. Фатальным последствием может быть "умертвление" персонажа, в результате чего он перестает фигурировать в дальнейшем развитии сюжета. Нефатальными являются "хорошие" или "плохие" исходы, не оказывающие влияние на ход сюжета. Они необходимы исключительно для внешнего антуража текста. Персонаж может заболеть (не смертельно), пострадать (не фатально), обрадоваться и т.п. На ход повествования это влияния не оказывает. Будем называть исход (результат) встречи ее  типом .

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

Следовательно, встреча описывается четверкой

M = <PA, PB, R, T(tA,tB)>,                                    (2)

где PA, PB - персонажи субъект и объект встречи, R - тип встречи (например, объекту встречи PA "хорошо", а субъект PB умер), T - описание перехода вещей (например, объект PA отдает принадлежащую ему вещь tAсубъекту PB).

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

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

Рис.2. Структура эпизода

Пролог встречи имеет сложную структуру. Во-первых, пролог определяет временные связи эпизодов:  "долго ли, коротко…", "прошло 10 лет"  и т.п. Поскольку мы рассматриваем произведения без побочных параллельных сюжетных линий, т.е. все эпизоды лежат на одной временной оси, то эти связи носят исключительно литературный характер, не влияя на причинно-следственные отношения. Во-вторых, персонажи действуют в определенных локусах. Следовательно, если субъект встречи в предыдущем эпизоде находился в локусе LA (скажем,  "лес" ), а объект находится в LB ( "пустыня" ), то необходим текст, увязывающий между собой переход из локуса LA в локус LB( "Он из лесу вышел… и увидел пустыню" ). В-третьих, желательно иметь описание локуса ( "лес был тих и печален" ).

Кроме того, в состав эпизода необходимо включать всякого рода фразы-паразиты (элементы ФП на схеме). Они вообще не несут смысловой нагрузки. Их задача - несколько разукрасить текст. Элементами ФП могут быть всякие ничего не значащие эмоциональные фразы и авторские отступления.

Текст и эпилог зависят от параметров встречи. При этом если эпилог EM есть функция только от типа встречи R (исхода, в т.ч. и фатальности), то выдаваемый текст TM зависит и от того, как был определен переход вещей T:

EM = EM(R), TM = TM(R, T)

Тексты и шаблоны

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

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

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

Отсюда следует, что качество литературных произведений зависит от доли используемых шаблонов в общем объеме текста, количества параметров и разнообразия авторских вставок. Количественный и качественный анализ использования шаблонов выходит за рамки настоящей работы, поэтому примем эту гипотезу как данное.

Генерация сюжетов

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

При этом мы предполагаем, что во всех случаях у нас имеется множество персонажей с некоторыми   характеристиками, определенными в (1). Для простоты будем пока считать их абсолютно равноправными. Каждый из персонажей обладает множеством "вещей" и желает заполучить, в свою очередь, то, что может иметься у других. На этом и будут базироваться наши дальнейшие рассуждения.

Линейная схема

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

{M} = {<PA, PB, R, T(tA,tB)> / PA= const, PB ÎP, PA¹PB },                         (4)

где P - множество всех персонажей.

Эта схема годится для генерации линейных сказок (точнее, фантастических историй) и прочих произведений с выраженным главным героем.

Сериал

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

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

{M} = {<PA, PB, R, T(tA,tB)> / PA, PB ÎP, PA¹PB }                            (5)

Детективная схема

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

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

p = <N, {ti}, {gj}>,                                               (6)

где N - имя персонажа, {ti} - множество принадлежащих ему предметов, {gj} - множество "целей", т.е. тех предметов, которые он хочет получить.

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

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

Рассмотрим следующий пример. Пусть имеются персонажи p1=<A,{a1,a2,a3},{x}>, p2=<B,{b1,b2},{a2,c1}>, p3=<C,{c1,c2},{a2}>, p4=<D,{x},{a3,b1,c1,c2,e}>.

При этом главным героем является персонаж p1, который хочет найти/получить x. Искомый x имеется у персонажа p4. Для определения  всех  возможных путей получения x (наша цель - выжать по максимуму из столь бедного фактического материала) изобразим эти персонажи в виде  графа   возможных обменов :

Рис.3. Граф возможных обменов

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

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

Рис.4. Граф перехода вещей

Таким образом, наш сюжет представляет собой множество простых путей, ведущих из вершин a1, a2, и a3 в вершину x. Для нашего примера будет сформировано следующее множество:

a3 ® x, a2 ® b1 ® x, a2 ® c1 ® b1 ® x …

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

Завязка : (A хочет иметь x)

Путь вещей :  a 3   ®   x

Сюжет : (A идет к D, отдает a3 и забирает x).

Путь вещей :  a 2   ®   b 1   ®   x

Сюжет : (A идет к B, отдает a2 и забирает b1); ( A  идет к D, отдает b1 и забирает x).

Путь вещей :  a 2   ®   c 1   ®   b 1   ®   x

Сюжет : (A идет к C, отдает a2 и забирает c1); ( A  идет к B, отдает c1 и забирает b1); ( A  идет к D, отдает b1 и забирает x).

и т.д.

А отсюда следует, что мы можем генерировать полностью определенные последовательности встреч, прологов, эпилогов и т.п.

Типизация персонажей

Выше говорилось о том, что для каждого персонажа определен его тип. Эта типизация необходима исключительно для того, чтобы определить возможный исход встречи с точки зрения "хорошо/плохо". Поскольку встречаются в каждый момент времени два персонажа, то исход (тип) встречи может быть определен двойкой

     I = (IA, IB),                                                  (7)

где IA, IB={+,-,d}. Здесь символ '+' обозначает благоприятный исход, '-' - неблагоприятный, а d обозначает фатальные последствия (персонаж умирает). Тогда исход встречи (d,+) означает, что субъект встречи умирает (d), а объекту встречи, напротив, хорошо (+).

Для каждой пары типов персонажей, в зависимости от жанра, определяются эти варианты исходов. Например, в "доброй сказке" результатом встречи героя (тип H) с антагонистом (тип A) могут быть варианты (+,-), (+,d), но никак не (d, +). Трагедия, наоборот, изобилует печальными как для субъекта, так и для объекта встречи вариантами: (-, -), (d, d) и т.д. Отметим, что в [Гаазе-Рапопорт и др., 1980] предлагается иной подход - там определяются возможные встречи персонажей (кто и с кем) в зависимости от их типа, считая исходы встреч фиксированными.

База данных

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

Состав БД

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

Общие словари

Базовый словарь. Содержит слова в виде пятерки

(<Слово> <Тип> <Число> <Род> <Падеж>)

где <Тип> Î { n (существительное), v (глагол), p (прилагательное)}

Например:

word  {   разбойник    n ,  s ,  m ,  im

разбойником   n, s, m, tv
разбойнике   n ,  s ,  m ,  pr }

Словарь нужен для извлечения слов, согласованных по падежу, числу, роду и т.п. Например, в тексте шаблона может быть указано  "…<бежать. A >…" . Это означает, что необходимо отыскать слово  "бежать"  в том роде и числе, которые определяются параметром субъекта встречи A.

Синонимы. Для придания большей "живости" желательно не только отыскать слово в базовом словаре, но и попробовать заменить его на какой-нибудь синоним.

synonym { отнять {отнять отобрать забрать}}
synonym { увидеть {увидеть посмотреть глянуть}}

Словоформы. Очевидно, что всех слов в базовом словаре не напасешься. Поэтому можно воспользоваться следующим достаточно грубым приемом. Если слово, указанное в шаблоне, не найдено в базовом словаре (или нет его необходимой формы), то анализируется его окончание. Далее, в зависимости от рода, окончание заменяется на указанное. Например:

wform {"ть", "", m, "л"  }
wform {" ти ", "", m, ""  }

wform {" ый ", im, m, " ый " }

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

Фразы-паразиты. Они же - авторские отступления.

VocParazit {
  ""
  "А дальше вот что было."

  "Стало быть, "
  "А что дальше было? А вот что."}

Связующие элементы

Обстоятельства времени. Ничего не значащие фразы о времени встречи.

time {
  "Рано утром"
  "Поздно вечером, когда солнце уже село… "
  "Аккурат под Новый Год"

  "Восьмого марта"}

Переходы во времени. Определяют интервал между встречами. Тоже ничего не значат.

mvtime {
  "Скоро сказка сказывается, да не скоро дело делается."
  "Долго ли, коротко ли..."
  "Прошло 15 лет."

}

Локусы. Для каждого локуса необходимо сгенерировать соответствующий текст.

locus { "Лес"
  {"Темный лес шумел кругом."
   "Лес был тих и печален."}}

locus { "Тундра" 
  {"В то время года тундра была особенно красива."
  "Тучные стада оленей паслись неподалеку."}}

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

Формат: <Локус отправления> <Локус назначеня> {<Текст перехода>}

Например:

link { Лес,  "Берег моря" 
  {"<Выйти.A> из лесу <pA.im> <A.im> и <дойти.A> до берега."}}
link { "Берег моря", тундра 
  {"<Сойти.A> <pA.im> <A.im> на берег. Впереди - тундра."}}

Здесь конструкция  <A.im>  означает подстановку имени персонажа-субъекта в именительном падеже, а  <pA.im> -  подстановку характеристики субъекта в том же именительном падеже.

Управляющие словари

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

result { H,PH,  {++} }
result { PH,A,  {+-,--,-+} }
result { PH,PA, {++,--,+-,-+} }

Здесь H - герой, A - антагонист (антигерой), PH - помощник героя, PA - помощник антагониста.

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

Прологи и эпилоги. Они определяют завязку сюжета и различные варианты окончания. К ним же относятся словари прологов и эпилогов эпизодов. Приведем некоторые из них без комментариев.

Prolog  {
  "<Жить.A> в <lA.pr> <A.im>. Захотелось <A.da> во что бы то ни стало заполучить <gA.vi>. И <отправиться.A> <A.im> искать <gA.vi>."…}

EpilogGoal  {
  "<Получить.A> <A.im> то, что <хотеть.A>. Тут и сказке конец."}

meetProlog ++
  {  "<встретить.A> <pA.im> <A.im> <pB.vi> <B.vi>. Обрадовались."
    "Видит <A.im> - сидит <pB.im> <B.im>, улыбается." }}

meetProlog  { d+
  {"Что-то неладно, <подумать.A> <A.im>. В глазах <B.ro> мелькнула радость." }}

meetEpilog  { ++
  { "Разошлись очень довольные друг другом."}}

Встречи. Это - основной словарь шаблонов. Его формат:

<Тип встречи> <Перемещение вещей> {<Текст>}

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

tmeet  { +-,  AA , { "Случилось так, что <отнять. A > < A . im > у < B . ro > < tB . vi >." }}

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

(<Субъект>, <Объект>, <Исход встречи>, <Переход вещей>, <вещь A>, <вещь B>)

Например, в эпизоде:

episode{"Солдат", "Змей   Горыныч", "+d", "BA", "Ковёр-самолёт", "Шапка-невидимка" }

происходит взаимный обмен вещами, при этом объект встречи (Змей Горыныч) погибает.

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

Методология выбора шаблонов

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

Например, если не определен список возможных эпитетов, то этот список формируется случайным образом путем выборки прилагательных из основного словаря. Таким образом появляются  "круглые Василисы-Премудрые"  и "зеленые Колобки" . То же относится и к случаю отсутствия заранее заданного списка персонажей. Тогда вполне можно получить истории в стиле Г.Х.Андерсена, когда персонажем может быть топор, облако или даже какая-нибудь тундра.

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

Обычно это хорошо проходит для сказок и сериалов. Несколько сложнее обстоит дело с детективными историями. Словари для них создавать значительно сложнее. Если словарь мексиканско-бразильского сериала формируется на основе словаря сказок путем прямой замены Ивана-Царевича на очередного Луиса-Альберто, а поиск Царевны-Лягушки - на поиск утерянного младенца, то с детективами все не так просто. Если в сказке/сериале/любовном романе последовательность эпизодов может генерироваться случайным образом прямо во время выполнения программы, т.е. по ходу действия, то для детектива эпизоды формируются заранее. При этом каждый эпизод/встреча построен на том, что персонажи обмениваются вещами, причем  обязательно   взаимно . В сериальном же варианте тип встречи в смысле перехода вещей может выбираться произвольно (поэтому при встречах персонажи могут и не меняться вещами, могут отнимать, терять и т.п.).

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

<Свидетель, {"показания"}, {"большой кулак", "удостоверение"}>,

т.е. свидетель готов обменять "показания" на "большой кулак" или "удостоверение".

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

Примеры работы

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

Мексиканская (бразильская) история

Эта совокупность текстов была получена на основе словарей, созданных Е.В.Карповой. Поскольку история получилась длинной, то приведено лишь несколько эпизодов. В приведенном ниже фрагменте подчеркнутым шрифтом обозначена справочная (отладочная) информация, а зачеркнут рудимент сказочной базы данных. Автором система считает начальное значение инициализации генератора случайных чисел.

МЕКСИКАНО-БРАЗИЛЬСКАЯ ИСТОРИЯ. ВЕРСИЯ 1.04. Автор: '1064824021'

Про то, как Несчастная Роза хотела большое наследство найти

ПРОЛОГ

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

*** 1 ***

СПРАВКА (СОДЕРЖАНИЕ ВСТРЕЧИ): { "Несчастная Роза", "Прекрасная Марианна", "++", "AA", "Золотое сомбреро", "Белая яхта"}

Прошло примерно 3 часа, но как долго они тянулись! Не легок путь от прерии до Мехико. Огромное стадо волов паслось неподалеку.

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

………………………………………………………………………………………………………………

*** 4 ***

СПРАВКА (СОДЕРЖАНИЕ ВСТРЕЧИ): { "Несчастная Роза", "Прекрасная Марианна", "++", "BB", "Золотое сомбреро", ""}

Скоро сказка сказывается, да не скоро дело делается.

Спустилась с плато добрая Несчастная Роза. Видит - Мехико.

В то время года в Мехико было особенно много людей. Рано утром глянула добрая Несчастная Роза - сидит Прекрасная Марианна, радуется. Короче, подарила Несчастная Роза Прекрасной Марианне золотое сомбреро. Поблагодарила Прекрасная Марианна Несчастную Розу за золотое сомбреро. И пошла Несчастная Роза дальше. На душе было легко и спокойно.

………………………………………………………………………………………………………………

Долго можно было бы рассказывать о похождениях Несчастной Розы. Но на этом пока все.

В другом варианте (автор - 1064824089) история закончилась на девятом эпизоде:

………………………………………………………………………………………………………………

*** 9 ***

СПРАВКА (СОДЕРЖАНИЕ ВСТРЕЧИ):

{ "Гильермо Капетильо", "Донна Изаура", "+-", "AA", "Белая яхта", "Большое наследство"}

Прошла ночь. Солнце сияло на небосклоне. Не легок путь от болота до Мехико. Огромное стадо волов паслось неподалеку. Ровно в полдень видит Гильермо Капетильо - сидит умная Донна Изаура. В глазах Донны Изауры мелькнула тревога. Случилось так, что отобрал Гильермо Капетильо у Донны Изауры большое наследство.

Получил Гильермо Капетильо то, что хотел. Тут сериалу и конец.

Детективная история

Пример одной из детективных историй (словари Е.В.Карповой и Т.В.Мещеряковой) построен на описании начальной ситуации, соответствующей схеме на рис.3. При этом была сделана следующая содержательная замена идентификаторов:

A="Шерлок Холмс", B="доктор Ватсон", C="секретарь", D="профессор Мориарти", a1="удостоверение детектива", a2="Z", a3="пистолет", b1="улика", b2="мотив преступления", c1="фоторобот", c2="показания свидетеля", x="признание в преступлении".

При этом не участвующий ни в каких обменах предмет e1 вообще исключен. Кроме того, следует обратить внимание на вещь a2. Это - т.н.  псевдовещь . Служит она для того, чтобы можно было по ходу сюжета не ограничиваться обменами вещей (пусть даже и фиктивными - удостоверениями, грозными взглядами, кулаками и проч.). Введение псевдовещи позволяет осуществлять отъем вещей в зависимости от  типов   персонажей . Например, чтобы можно было позволить положительным персонажам отнимать только у отрицательных, первые автоматически снабжаются не фигурирующей в сюжете псевдовещью, а антигерои, напротив, получают таковую в качестве цели. Это, кстати, позволяет вводить персонажи как неимущие, так и бесцельные.

На основе сгенерированной последовательности эпизодов

episode("Шерлок Холмс", "секретарь", "++", "AA", "", "фоторобот") 
episode("Шерлок Холмс","доктор Ватсон","++","BA","фоторобот","улика") 
episode("Шерлок Холмс","профессор Мориарти","+-", "BA", "улика", "признание в преступлении")

(путь персонажей A®C®B®D и путь вещей a2®cbx) был получен следующий текст.

Автор: '1065116356'

ПРОЛОГ

В городе  N  было совершено преступление. Этим делом занялся Шерлок Холмс. И отправился Шерлок Холмс искать преступника.

*** 1 ***

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

- Нет ли у Вас фоторобота? - Спросил Шерлок Холмс секретаря.
- А как же! - Ответил радостно секретарь.
Получил Шерлок Холмс от секретаря фоторобот.
- Спасибо за фоторобот. - сказал Шерлок Холмс секретарю.
Махнул Шерлок Холмс рукой и пошел дальше.

*** 2 ***

Прошла ночь. От Парка до Больницы пришлось добираться на двух трамваях. Утром стояла тишина. На пост позвонили.

После обеда посмотрел глупый Шерлок Холмс - сидит молодой доктор Ватсон.

-А нет ли у тебя случайно фоторобота? - Поинтересовался доктор Ватсон у Шерлока Холмса, робко улыбаясь.

Показал издали Шерлок Холмс фоторобот доктору Ватсону.

Протянул доктор Ватсон обе руки к фотороботу и предложил Шерлоку Холмсу махнуться. Скрепя сердце, отдал Шерлок Холмс доктору Ватсону фоторобот.

Поблагодарил доктор Ватсон Шерлока Холмса за фоторобот и отдал доктор Ватсон Шерлоку Холмсу улику.

Напряженно думая и бережно прижимая к груди улику, Шерлок Холмс пошел дальше.

*** 3 ***

Долго ли, коротко ли... Добраться до Дома оказалось нелегко.
В заброшенном доме стоял беспорядок. Видит Шерлок Холмс - сидит красивый профессор Мориарти.
В глазах профессора Мориарти мелькнула тревога. А что дальше было? А вот что.

- А вот что есть у меня! - Сказал Шерлок Холмс и предъявил профессору Мориарти улику.
- Ладно, делать нечего. - Сказал профессор Мориарти. - Держи.

Получил Шерлок Холмс от профессора Мориарти признание в преступлении.

- Благодарить не буду. - Сказал сурово Шерлок Холмс профессору Мориарти.

Раскрыл Шерлок Холмс это сложное дело. Тут детективу и конец.

Заключение

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

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

Литература

1.  Гаазе-Рапопорт М.Г., Поспелов Д.А., Семенова Е.Т. Порождение структур волшебных сказок. М.: ВИНИТИ, 1980. - 20 с.

2.  Гаазе-Рапопорт М.Г. Поиск вариантов в сочинении сказок. В кн. Зарипов Р.Х. Машинный поиск вариантов при моделировании творческого процесса. - М.: Наука, 1983. - 232 с.

3.  Пропп В.Я. Морфология волшебной сказки. -  М.: Лабиринт, 2001. - 192 с.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=36317