Автописатель

в 10:23, , рубрики: kohana framework, php, литературное творчество, метки: , ,

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

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

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


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

Самое простое — генерация названия. Леонид Каганов, известный писатель, хорошо знакомый с программированием, в свое время написал статью "Как назвать свою книгу", содержащую исчерпывающий перечень возможных схем. В самом простом варианте «Существительное в именительном падеже + существительное в родительном падеже» («Меч Дракона», «Игра престолов», «Король ринга») реализуется за полчаса. Например, на фреймворке Kohana с его QueryBuilder:

	public function random_textname ()
	{
		// Get random text name part 1
		$offset = DB::select(DB::expr('MIN( `id` ) AS min, MAX( `id` ) AS max'))->from('story_names')->where('part', '=', 1)->execute()->as_array();
		$RID = mt_rand($offset[0]['min'],$offset[0]['max']);
		$random_name = DB::select('story')->from('story_names')->where('id', '>=', $RID)->and_where('part', '=', 1)->limit(1)->execute()->get('story');			
				
		// Get random text name part 2
		$offset = DB::select(DB::expr('MIN( `id` ) AS min, MAX( `id` ) AS max'))->from('story_names')->where('part', '=', 2)->execute()->as_array();
		$RID = mt_rand($offset[0]['min'],$offset[0]['max']);
		$result = DB::select('story')->from('story_names')->where('id', '>=', $RID)->and_where('part', '=', 2)->limit(1)->execute()->get('story');		
		$random_name .= ' '.$result;
		
		return $random_name;
	}

Достаточно иметь базу первых и вторых частей с такой структурой:

id | part | story

Далее, стоит подумать о сюжете. Известно высказывание Борхеса о том, что в литературе всего 4 сюжета:

  • О штурме и обороне укреплённого города (Троя)
  • О долгом возвращении (Одиссей)
  • О поиске (Ясон)
  • О самоубийстве бога (Один, Атис)

Но у современного читателя это вызывает некоторое недоумение. Гораздо ближе к жизни теория «Тридцати шести драматических ситуаций» Жоржа Польти, с помощью которой, с некоторыми допущениями, можно классифицировать любое литературное произведение.
То есть, создав всего 36 схем построения сюжета, мы уже можем — в черновом варианте — составить абсолютно любое произведение на свете, не уступающее ни проверенной классике, ни современным творениям.

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

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

СХЕМА ТЕКСТА-ПОВЕСТВОВАНИЯ

  1. Начало события.
  2. Его развитие.
  3. Конец события.

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

СХЕМА ТЕКСТА-ОПИСАНИЯ

  1. Общее впечатление о предмете (явлении).
  2. Признаки предмета (явления).
  3. Отношение к предмету (явлению).

СХЕМА ТЕКСТА-РАССУЖДЕНИЯ

  1. Вступление.
  2. Тезис.
  3. Доказательства (объяснения).
  4. Вывод.

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

Если в каждом из 36 сюжетов написать алгоритм последовательного построения повествований, описаний и рассуждений, то мы получим. практически весь «скелет» и основные «мышцы» произведения.

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

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

Парсить строки — не такая уж сложная задача. Достаточно в изначальный текст вместо конкретных имен и названий помещать маркер вроде "#Main_Char#", "#Main_Enemy#" и т.д. Немного осложняет ситуацию необходимость в русском языке изменять окончания слов в разных падежах, но, полагаю, добавить еще один флаг, явно указывающий на использование определенного падежного окончания, не составит труда.

Таким образом, несколько месяцев работы грамотного программиста смогут заменить сотни лет и тысячи единиц человеческого труда. Смею заметить, абсолютно бесполезного и печального.

Платформой для автописателя, очевидно, должен стать веб:

  1. У него невысокий порог вхождения как для пользователя, так и для разработчика
  2. Хороший потенциал для модификаций
  3. Высочайшая доступность в современном мире
  4. Сравнительно высокая надежность за счет хранения информации в облаках

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

Автор: lutov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js