БлогNot. Ещё один универсальный генератор речей

Ещё один универсальный генератор речей

Те, кто читали книги, наверняка помнят "Торжественный комплект" для сочинения статей, фельетонов и проч., который был продан Остапом Бендером журналисту Ухудшанскому (см., например, здесь). На этой же страничке можно найти и текст для современной версии "Универсального генератора речей", созданный, конечно, не в "период застоя", как пишет автор странички, а уже в новом застое "нулевых"-2010-х, куда более маразматичном.

Ещё со времён моего "Гениота", а может, и раньше, подобные штучки периодически были в моде, пусть здесь будет ещё одна.

В этом скрипте, по сути, единственная парадигма предложения, так что до "Гениота" поделке далеко, она больше похожа на мой же "Пушкинист". Только теперь в коде всё ещё проще и никаких регулярных выражений :)

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

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

Замечания по существующим алгоритмам
Идеи
Инновационные подходы к решению поставленных задач
...

в 0.txt, а в 1.txt это может быть

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

Скрипт проверяет, всё ли в порядке с файлами (они существуют и содержат не менее 2 непустых строк), затем считывает все данные в массив и выполняет генерацию:

универсальный генератор речей, скриншот скрипта в работе
универсальный генератор речей, скриншот скрипта в работе

Можно дополнительно разметить текст тегами HTML для выделения заголовков и абзацев.

Ниже прилагается ссылка и исходник на момент написания, предполагается, что скрипт и файлы с данными размещаются в одной папке на сервере и в кодировке UTF-8 стандарта Юникод.

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

 Скрипт simpleContentGenerator в работе

<!DOCTYPE html>
<html lang="RU">
 <head>
  <title>Simple Content Generator (RU)</title>
  <meta charset="UTF-8">
 </head>
 <body>
<?php
 function get_int ($val, $min, $max, $default) {
  $v = intval(trim($val));
  if ($v < $min or $v > $max) $v = $default;
  return $v;
 }

 function generate_list ($name, $prefix, $min, $max, $value, $suffix) {
  $s = $prefix.'<select name="'.$name.'" size="1">'."\n";
  for ($i=$min; $i<=$max; $i++) {
   $s .= '<option value="'.$i.'"'.($i==$value?' selected':'').'>'.$i."\n";
  }
  return $s."\n".'</select> '.$suffix;
 }

 function get_random (&$arr) {
  return $arr[rand(0,count($arr)-1)];
 }

 function generate_content (&$a,$headers,$pars,$sents,$tags) {
  $s = '';
  $hdr1 = $hdr2 = $p1 = $p2 = '';
  if ($tags) { $hdr1 = '&lt;h1&gt;'; $hdr2 = '&lt;/h1&gt;'; $p1 = '&lt;p&gt;'; $p2 = '&lt;/p&gt;'; }
  if ($headers) $s .= $hdr1.trim(get_random($a[0])).$hdr2."\n\n";
  $k = 0;
  for ($i = 0; $i < $pars; $i++) {
   $s .= $p1;
   for ($j = 0; $j < $sents; $j++) {
    $s .= trim(get_random($a[1])).' '.trim(get_random($a[2])).' '.
     trim(get_random($a[3])).' '.trim(get_random($a[4])).'.';
    if ($j < $sents-1) $s .=  ' ';
   }
   $s .= $p2;
   if ($i < $pars-1) $s .= "\n";
   if (++$k == $headers and $i < $pars-1) {
    $k = 0; 
    $s .= "\n".$hdr1.trim(get_random($a[0])).$hdr2."\n\n";
   }
  }
  return $s;
 }

 $headers = 0; if (isset($_POST['headers'])) $headers = get_int ($_POST['headers'],0,9,0);
 $pars = 2; if (isset($_POST['pars'])) $pars = get_int ($_POST['pars'],1,12,2);
 $sents = 2; if (isset($_POST['sents'])) $sents = get_int ($_POST['sents'],1,12,2);
 $tags = 0;  if (isset($_POST['tags'])) $tags = 1;
 $form_start = '<form method="post">
  <p>'.generate_list('headers','Абзацев в разделе: ',0,9,$headers,' (0 - не генерировать разделы)').'</p>
  <p>'.generate_list('pars','Всего абзацев: ',1,12,$pars,'').'</p>
  <p>'.generate_list('sents','Предложений в абзаце: ',1,12,$sents,'').'</p>
  <p><input type="checkbox" id="tags" name="tags"'.($tags?' checked':'').'>
   <label for="tags">Вывести с тегами HTML</label>
   <input type="submit" name="action" value="Сгенерировать"></p>';

 $content = '';
 if (isset($_POST['action'])) {
  sleep (1);
  $host='http://'.$_SERVER['HTTP_HOST'];
  $fromurl=getenv('HTTP_REFERER');
  if (strstr($fromurl,$host)===false) die ("Форма отправлена с неправильного URL-адреса :(\n"); 
  $a = array ();
  for ($i=0; $i<5; $i++) {
   $a[$i] = @file("$i.txt",FILE_SKIP_EMPTY_LINES);
   if ($a[$i]===false) die ("Не найден файл $i.txt на сервере :(\n");
   else if (count($a[$i])<2) die ("Менее 2 строк в файле $i.txt на сервере :(\n");
  }
  $content = generate_content ($a,$headers,$pars,$sents,$tags);
 }
 echo $form_start."\n".'<p><textarea rows="10" cols="72">'.$content.'</textarea></p></form>'."\n";
?> 
 </body>
</html>

01.12.2018, 19:10 [2660 просмотров]


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

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