БлогNot. Пушкинист-2, или ещё раз о простой генерации текста по шаблону

Пушкинист-2, или ещё раз о простой генерации текста по шаблону

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

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

Вот пример файла данных:

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

 Вызов скрипта для этого файла (F5 - обновить)

Как видно из адреса ссылки, имя нужного файла передаётся параметром f, от него берётся basename, так что "залезть" в посторонние файлы вызовом скрипта не получится. Если имя файла не передано, текст берётся из файла default.txt текущей папки, другие файлы с текстами нужно кидать также в текущую папку. Скрипт старается ставить знаки препинания по правилам. Предполагается базовая кодировка Windows-1251, но так как действий, зависящих от кодировки, особо нет, можно перекодировать скрипт и в Юникод.

Вот полный код класса VercesRandomizer.php:

<?php
class VercesRandomizer { 
 private $pattern;

 public function __construct () {
  $this->pattern = array ();
 }

 private function read ($filename='') {
  if (!empty($filename)) {
   $this->pattern = @file(basename($filename.'.txt'));
   if ($this->pattern!==false) {
    return true;
   }
   return false;
  }
  return false;
 }

 public function get ($filename='') {
  if ($this->read($filename)) {
   $verce='<p>';
   for ($i=0; $i<count($this->pattern); $i++) {
    $words = preg_split("/\,/", $this->pattern[$i]);
    $cnt = count($words);
    if ($cnt==2 and trim($words[0])=='' and trim($words[1])=='') $verce.=',';
    else {
     $word=trim($words[rand(0,$cnt-1)]);
     if ($i>0) {
      if (preg_match("/^[A-ZА-ЯЁ]/",$words[0])>0) $verce.='<br>';
      else if (preg_match("/^[a-zA-Zа-яА-ЯёЁ\-]/",$word)>0) $verce.=' ';
     }
     $verce.=$word;
    }
   }
   return $verce.'</p>';
  }
  $f = basename($filename);
  if (strlen($f)>30) $f=substr($f,0,30).'...';
  return 'VercesRandomizer.php: File "'.$f.'" not found';
 }

 public function show ($filename='') {
  echo $this->get($filename);
 }
}
?>

Код файла-примера вызова:

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Тест класса VercesRandomizer</title>
</head><body>
<?php
 $f='default';
 if (isset($_GET['f'])) $f= trim(htmlspecialchars($_GET['f']));
 require_once 'VercesRandomizer.php';
 $my = new VercesRandomizer();
 $my->show($f);
?>
</body></html>

Код файла default.txt:

Убит, Сидит, Висит, Ворчит, Шкворчит, Торчит
поэт, Немцов, Гапон, гондон, лимон
-
невольник, охальник, поручик, завистник
чести, лести, тестя, беса
-
Пал, Лёг, Сел, Встал 
,
оклеветанный, оболваненный, остаканенный, успокоенный, обездоленный
молвой, халвой, самсой, мечтой, не той, Москвой
,
С свинцом, С концом, С отцом, С борцом
в
груди, биде, еде, воде
И
жаждой, правдой, ляжкой, водкой, тёткой 
мести, крести, вместе
,
Поникнув, Повякав, Покакав, Попрыгав
гордой, томной, толстой, лёгкой
головой, булавой, муравой
!..
Не
вынесла, родила, сделала, съёжила
душа, лапша, мотня
поэта, корнета, кларнета, минета
Позора, Дозора, Касторки, Каптёрки, Бутылки
мелочных, маленьких, водочных, липовых
обид, ланит, друид
,
Восстал, Поклал, Пошёл
он
против, мимо
мнений, трений, прений, прерий
света, лета, Фета
Один, Торчит, Висит, Лежит, Бежит, Стоит
как прежде, в надежде
... и
убит, знобит, гнобит, бандит
!

 Вызов скрипта без параметра

 Вызов скрипта с параметром - текстом из pushkinist-1

 Вызов скрипта с неправильным и оооочень длинным именем файла

05.03.2015, 13:35 [9384 просмотра]


теги: textprocessing программирование стихи random маразм php

К этой статье пока нет комментариев, Ваш будет первым