Ещё один универсальный генератор речей
Те, кто читали книги, наверняка помнят "Торжественный комплект" для сочинения статей, фельетонов и проч., который был продан Остапом Бендером журналисту Ухудшанскому (см., например, здесь). На этой же страничке можно найти и текст для современной версии "Универсального генератора речей", созданный, конечно, не в "период застоя", как пишет автор странички, а уже в новом застое "нулевых"-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 = '<h1>'; $hdr2 = '</h1>'; $p1 = '<p>'; $p2 = '</p>'; } 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 просмотров]