Zoaron : другие произведения.

Ненамеренные хайку

Самиздат: [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Ссылки:
Школа кожевенного мастерства: сумки, ремни своими руками
 Ваша оценка:









                             Ненамеренные хайку


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


   Постановка задачи

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


   Инструментарий

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

--- ripper.c ---------------------------------------------------------------
# include 
# include 
# include 
# include 
# include 
# include 

void
main (int argc, char **argv)
{
  struct stat st;
  int fh, fs, vw = 0;
  char *buffer, *ptr, *cptr;
  if (argc != 2)
    return;
  if (stat (argv[1], &st))
    return;
  if (st.st_size > MAXINT)
    return;
  fs = (int) st.st_size;
  if ((fh = open (argv[1], O_BINARY | O_RDONLY)) == EOF)
    return;
  if ((buffer = malloc (sizeof (char) * fs)) == NULL)
    return;
  ptr = buffer;
  cptr = buffer;
  read (fh, buffer, fs);
  close (fh);
  while (cptr - buffer < fs)
    {
      switch (*cptr++)
        {
        case 'а':
        case 'е':
        case 'ё':
        case 'и':
        case 'о':
        case 'у':
        case 'ы':
        case 'э':
        case 'ю':
        case 'я':
          vw++;
          break;
        case '.':
          if (vw < 17)
            break;
          if (vw == 17)
            {
              int i = 0;
              printf ("-  -  -  -  -\n");
              while (i < cptr - ptr)
                putchar (ptr[i++]);
              printf ("\n");
            }
          while (*ptr++ != '.');
          cptr = ptr;
          vw = 0;
        }
    }
  free (buffer);
}
----------------------------------------------------------------------------


   Ограничения:

   " обрабатываются файлы не более 32 килобайт,
   " файл, должен содержать только plain text
   " приведённый к нижнему регистру,
   " текст должен быть в той же кодировке, в какой был исходник.


   Решения:
   " если текст больше 32К - порубите его на части и обрабатывайте эти части
последовательно в пакетном режиме, например так:

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

   [имя]номер_части

----------------------------------------------------------------------------
#!/bin/bash
name=...
l=...
for ((i=1; i<=l; i++))
 do
  echo "$name$i"
  ./ripper.exe "$name$i">"out$i"
 done
----------------------------------------------------------------------------

   " для работы с регистром текста, удобно  воспользоваться  соответствующим
штатным плагином FAR manager'а;
   " так же, FAR позволяет легко менять и кодировку текста.


   Результаты

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


   Осип Мандельштам:

   Истина темна.
   Человек родится.
   Жемчуг умирает.
                (Bеницейской жизни, мрачной и бесплодной)

   Сёстры -
   Тяжесть и нежность,
   Одинаковы ваши приметы.
                (Сестры - тяжесть и нежность,одинаковы ваши приметы)

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


   Борис Пастернак:

   У плетня меж мокрых веток
   С ветром бледным шёл спор.
   Я замер.
                (Душная ночь)

   Я просыпаюсь.
   Я объят открывшимся.
   Я на учете.
                (Вторая баллада)


   Иосиф Бродский:

   Когда я открыл глаза,
   Север был там,
   Где у пчелки жало.
                (Колыбельная Трескового Мыса)

   Ибо в чистом времени
   Нет преград,
   Порождающих эхо.
                (Колыбельная Трескового Мыса)

   Земля не кругла.
   Она проста длинна:
   Бугорки, лощины.
                (Колыбельная Трескового Мыса)


   Велимир Хлебников:

   Стою, Кручу усы,
   И все как надо.
   Спаситель! Ты дурак.
                (Ночной обыск)


   Владимир Маяковский:

   Чулки-кокотки
   Игриво щурятся.
   Я летел, как ругань.
                (Трагедия)

   Тонут гении,
   Курицы, лошади, скрипки.
   Тонут слоны.
                (Трагедия)


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


   Zoaron
   2010 jun.




 Ваша оценка:

Связаться с программистом сайта.

Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души" М.Николаев "Вторжение на Землю"

Как попасть в этoт список

Кожевенное мастерство | Сайт "Художники" | Доска об'явлений "Книги"