Рандомайзер текста он-лине (создаёт варианты текста на основе чегонадо)

pro-maker
На сайте с 08.12.2003
Offline
281
#11
Vladimir_Rublin:
To: pro-maker
Извините, но могу только на:
Assembler (80x86, PIC 16xxxx, Z80); C; perl; JavaScript; BASIC; HTP.
На php могу только за 5 литров молока (за вредность) + WMZ за работу, кроме того, php слишком медленный и корявый для такой работы с текстом.

Vladimir_Rublin, перловка при некоторых условиях всё равно, что вырезание апендицита через попу. Спасибо за идею. :)

Kolyaj, спасибо!

[Удален]
#12

To: pro-maker

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

/ru/forum/67458

Ну а с php или другими языками, здесь специалистов много, не всё же одеяло на себя перетягивать, нужно и Kolyaj оставить :)

To: Kolyaj

Там бы ещё стравнение не помешало, если $v содержит только 1 элемент, то возвращать его вместе со скобками (на случай рандомизации текста под Wiki разметку).

Kolyaj
На сайте с 28.03.2006
Offline
69
#13
Vladimir_Rublin:
Там бы ещё стравнение не помешало, если $v содержит только 1 элемент, то возвращать его вместе со скобками (на случай рандомизации текста под Wiki разметку).

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


<?php
function callback($matches) {
$v = preg_split("/(?<!\|)\|(?!\|)/", $matches[1]);
return str_replace("||", "|", (count($v) == 1 ? "{" . $v[0] . "}" : $v[array_rand($v)]));
}
$str = "Это {простой|не сложный} но {сильный|нужный} {сервис|интернет сервис|утиль|веб-сустем}, который {несомненно|определённо|стопудово|полюбому} будет полезен {веб|web}-мастерам и {SE оптимизаторам|труженикам в сфере оптимизации веб для поисковых систем}.
{Сервис|Интернет сервис} помогает {избавить себя от|избежать} пустой траты времени, и высвободить {это|освободившееся} время для {куража с девками|поездки в Венецию|трёхмесячного отдыха на Сейшельских островах|полёта в качестве космического туриста на околоземную орбиту}.";
echo preg_replace_callback("/\{([^{}]*?)\}/", "callback", $str);
?>
[Удален]
#14

To: Kolyaj

Да, соглашусь, так лучше.

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

P.S. Справедливости ради нужно сказать: идея такого рандомайзера текста не моя, принадлежит кому-то из создателей спам-ботов для форумов.
P.P.S. Иногда полезно использовать технологии врага :)

SE
На сайте с 26.02.2006
Offline
71
#15

Здорово, сам ленился такое сделать )

Обязательно применю при следующих сабмитах.

Deni
На сайте с 15.04.2006
Offline
355
#16

Kolyaj, А не были бы столь любезны изменить чуть скрипт что бы он выводил не одно значение а весь список возможных как это реализовано у Vladimir_Rublin только без пробелов между строками?

Очень удобно будет генерить читабельные описания для регистрации через Allsubmitter

Kolyaj
На сайте с 28.03.2006
Offline
69
#17
Deni:
Kolyaj, А не были бы столь любезны изменить чуть скрипт что бы он выводил не одно значение а весь список возможных как это реализовано у Vladimir_Rublin только без пробелов между строками?

Скоро родится новый опен-соурс продукт :) . А пока очередная версия


<?php
define("CHOICE_COUNT", 10);
define("MAX_REST_COUNT", 5);

function callback($matches) {
$v = preg_split("/(?<!\|)\|(?!\|)/", $matches[1]);
return str_replace("||", "|", (count($v) == 1 ? "{" . $v[0] . "}" : $v[array_rand($v)]));
}
$str = "Это {простой|не сложный} но {сильный|нужный} {сервис|интернет сервис|утиль|веб-сустем}, который {несомненно|определённо|стопудово|полюбому} будет полезен {веб|web}-мастерам и {SE оптимизаторам|труженикам в сфере оптимизации веб для поисковых систем}.
{Сервис|Интернет сервис} помогает {избавить себя от|избежать} пустой траты времени, и высвободить {это|освободившееся} время для {куража с девками|поездки в Венецию|трёхмесячного отдыха на Сейшельских островах|полёта в качестве космического туриста на околоземную орбиту}.";
$choices = array();
$rest = 0;
while (count($choices) < CHOICE_COUNT) {
$begin_count = count($choices);
$choices[] = preg_replace_callback("/\{([^{}]*?)\}/", "callback", $str);
$choices = array_unique($choices);
if (count($choices) > $begin_count)
$rest = 0;
else
$rest++;
if ($rest >= MAX_REST_COUNT)
break;
}
echo implode("\n\n", $choices);
?>

И небольшие пояснялки:

CHOICE_COUNT - нужное количество вариантов

MAX_REST_COUNT - защита от зацикливания, если это количество раз содержимое массива с результатами менятся не будет, то вылетаем из цикла.

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

Deni
На сайте с 15.04.2006
Offline
355
#18

Kolyaj, Огромное спасибо :)

Только текст идет без переноса строки одним сплошняком

Kolyaj
На сайте с 28.03.2006
Offline
69
#19
Deni:
Только текст идет без переноса строки одним сплошняком

Это в браузере, в исходном коде с переносами.

Если надо чтоб в браузере было с переносами замените последнюю строчку на

echo implode("<br><br>", $choices); 
DrJeans
На сайте с 06.07.2006
Offline
228
#20

Kolyaj, Вам с топикстартером нужно патент брать на код срочно! :)

Это ж задатки генератора полиморфного текста. Осталось научить его понимать падежи, время (прошедшее, настоящее), число (множественное, единственное) и практически голова профессора Доуэля!

Спасибо, всё гениальное, как всегда, просто.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий