|
| Дата |
|
USD/RUB | 93.4409 | BTC/USD | 60506.4903 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
03.06.2010, 17:21
|
#1
|
добрый леприкон
Регистрация: 05.03.2009
Сообщений: 379
Бабло: $56978
|
Подмешать кеи в цепи маркова
Есть скрипт
PHP код:
<?
Class MarkovChains{
var $prepared = array();
function MarkovChains($source){
$source = strtolower($source);
$source = str_replace(array ("? ", "! "), ".", $source);
$source = str_replace(array (" -", "- ", "\t", "\r", "\n", "|", "&", '\\', '/', " :", " ;", "©", "•"), ' ', $source);
$source = str_replace(array (")", "(", "]", "[", "'", "\"", '*', '•', '~', '{', '}'), '', $source);
$source = str_replace(" ,", ",", $source);
$source = preg_replace("~(\s+\d{1,2}\s+)|(\w*\.\w+)~", " ", $source);
$source = preg_replace("~\s+~", " ", $source);$sentens = explode('. ', $source);
$count_sentens = count($sentens);
for ($j=0; $j<$count_sentens; ++$j){
$sentens[$j] = explode(' ', $sentens[$j]);
$count_words = count($sentens[$j]) - 1;
for ($i=0; $i < $count_words; ++$i){
$prefix = $sentens[$j][$i];
$this->prepared[$prefix][] = $sentens[$j][$i+1];
}
}
$keys = array_keys($this->prepared);
foreach ($keys as $key){
$this->prepared[$key] = array_unique($this->prepared[$key]);
}
}
function GenerateText($size){
$result_count = 0;
for ($j=0; $result_count < $size; ++$j){
$prev = array_rand($this->prepared);
$num = mt_rand(5, 12);
for ($i=0; $i<$num; ++$i){
$sents[$j][$i] = $prev;
++$result_count;
$p = $this->prepared[$prev][mt_rand(0, count($this->prepared[$prev]) - 1)];
if ($p == '') $p = array_rand($this->prepared);
$prev = $p;
if ($prev == '') break 2;
}
}
foreach ($sents as $sent){
$count_word=count($sent);
if ($count_word<=2) continue;
if (strlen($sent[$count_word-1]) < 4) unset($sent[$count_word-1]);
$sent[$count_word-2] = rtrim($sent[$count_word-2], ",:;");
$sent[$count_word-1] = rtrim($sent[$count_word-1], ",:;");
$output .= ucfirst(implode(' ', $sent)).'. ';
}
$output = str_replace(' .', '.', $output);
return $output;
}
}
$source = file_get_contents("text.txt");
$markov = new MarkovChains($source);
$result = $markov->GenerateText(100);
echo $result;
и я - долбоеб
Как подмешать сюда кеи?
Вроде все элементарно, но совершенно не понимаю как подмешать сюда кеи.
|
|
|
03.06.2010, 17:34
|
#2
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
в последнем цикле for в самый его конец воткнуть примерно следующее:
$sents[$j][] = "keyword";
тогда keyword будет вставлятся в конец предложения
|
|
|
03.06.2010, 17:37
|
#3
|
добрый леприкон
Регистрация: 05.03.2009
Сообщений: 379
Бабло: $56978
ТС -->
|
ТС
Цитата:
Сообщение от chesser
в последнем цикле for в самый его конец воткнуть примерно следующее:
$sents[$j][] = "keyword";
тогда keyword будет вставлятся в конец предложения
|
оу! Спасибо понял в какую сторону смотреть.
|
|
|
03.06.2010, 17:40
|
#4
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
не проверял, но что-то вроде такого:
PHP код:
..... for ($i=0; $i<$num; ++$i){ $sents[$j][$i] = $prev; ++$result_count; $p = $this->prepared[$prev][mt_rand(0, count($this->prepared[$prev]) - 1)]; if ($p == '') $p = array_rand($this->prepared); $prev = $p; if ($prev == '') break 2; $sents[$j][] = array_pop($this->kwds); // <<<<<<<<<<<<<<<<<<<<<<<< это вот надо добавить }
..... $source = file_get_contents("text.txt"); $markov = new MarkovChains($source); $markov->kwds = array('key1', 'key2', 'key3'); // <<<<<<<<<<<<<<<<<<<<<<<< и это $result = $markov->GenerateText(100);
это если в конец, если в начало, то перед циклом $sents[$j][0] = array_pop($this->kwds); и цикл начать не с нуля, а с 1
а еще можно кейворды адаптировать в текст чтобы читалось красиво
|
|
|
03.06.2010, 18:40
|
#5
|
Ебланнед
Регистрация: 07.04.2010
Сообщений: 1,576
Бабло: $0
|
запихиваешь весь текст в массив (например 100 слов = 100 элементов)
потом печатаешь:
1-50 элементов
кей
51-100 элементов
|
|
|
03.06.2010, 19:21
|
#6
|
big bro
Регистрация: 12.07.2008
Сообщений: 931
Бабло: $357966331
|
черт, тоже шас долблю етот скрипт.)))
но дело в том что скрипт как то одинакого генерит текст. брал текст 300-1000кб. он кагбе берет одни и и те же предложения и по ним генерит. в начале предложения часто повторяються одинаковы кеи. порефрешь скрипт и посмотри.
вот бы вытянуть с ред батона генерилку по кею. может у кого что есть готовое уже?)
|
|
|
03.06.2010, 19:29
|
#7
|
Je suis moine ivre
Регистрация: 03.03.2009
Сообщений: 15,268
Бабло: $797172957
|
Могу посмотреть.
Залей куда-нить рб, а то впадло искать.
|
|
|
03.06.2010, 20:02
|
#8
|
добрый леприкон
Регистрация: 05.03.2009
Сообщений: 379
Бабло: $56978
ТС -->
|
ТС
Цитата:
Сообщение от Drunk Monk
Могу посмотреть.
Залей куда-нить рб, а то впадло искать.
|
в личку кинул
|
|
|
03.06.2010, 20:05
|
#9
|
Je suis moine ivre
Регистрация: 03.03.2009
Сообщений: 15,268
Бабло: $797172957
|
yes/ins/functions.php
функция KarlMarks решает. Там для нее всякие переменные нужно понасоздавать (глобалы, в начале функции). Должно заработать.
|
|
|
04.06.2010, 00:12
|
#10
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
а генереный текст(не скрипт) за деньги реально продавать?
может надо кому много уника? Текст хороший, лучше РБ-маркова, иногда со смыслом выходит.
язык любой можно, я, например, на голландском шпарю тексты и отлично, лучше русского выходит(наверно), только базу готовить надо заранее.
Если кому финансово заинтересовало - могу дать в личку ссылку на сервис. В паблик не могу показать, сервак сразу упадет, т.к. ресурсов это потребляет очень много.
|
|
|
|