Подмешать кеи в цепи маркова - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB93.7196
BTC/USD63179.1670
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 03.06.2010, 17:21   #1
jskorvin
добрый леприкон
 
Аватар для jskorvin
 
Регистрация: 05.03.2009
Сообщений: 379
Бабло: $56978
Question Подмешать кеи в цепи маркова

Есть скрипт
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(512);
            for (
$i=0$i<$num; ++$i){
                
$sents[$j][$i] = $prev;
                ++
$result_count;
                
$p $this->prepared[$prev][mt_rand(0count($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;
и я - долбоеб
Как подмешать сюда кеи?
Вроде все элементарно, но совершенно не понимаю как подмешать сюда кеи.
__________________
EvaPharmacy - лучшая фарма партнерка (ICQ: 750000 Jabber: [email protected]) / Помощь детям.
jskorvin вне форума  
Старый 03.06.2010, 17:34   #2
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

в последнем цикле for в самый его конец воткнуть примерно следующее:
$sents[$j][] = "keyword";
тогда keyword будет вставлятся в конец предложения
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 03.06.2010, 17:37   #3
jskorvin
добрый леприкон
 
Аватар для jskorvin
 
Регистрация: 05.03.2009
Сообщений: 379
Бабло: $56978
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от chesser Посмотреть сообщение
в последнем цикле for в самый его конец воткнуть примерно следующее:
$sents[$j][] = "keyword";
тогда keyword будет вставлятся в конец предложения
оу! Спасибо понял в какую сторону смотреть.
__________________
EvaPharmacy - лучшая фарма партнерка (ICQ: 750000 Jabber: [email protected]) / Помощь детям.
jskorvin вне форума  
Старый 03.06.2010, 17:40   #4
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 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(0count($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
а еще можно кейворды адаптировать в текст чтобы читалось красиво
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 03.06.2010, 18:40   #5
seeker
Ебланнед
 
Регистрация: 07.04.2010
Сообщений: 1,576
Бабло: $0
По умолчанию

запихиваешь весь текст в массив (например 100 слов = 100 элементов)
потом печатаешь:
1-50 элементов
кей
51-100 элементов
seeker вне форума  
Старый 03.06.2010, 19:21   #6
googleum
big bro
 
Аватар для googleum
 
Регистрация: 12.07.2008
Сообщений: 931
Бабло: $357966331
По умолчанию

черт, тоже шас долблю етот скрипт.)))
но дело в том что скрипт как то одинакого генерит текст. брал текст 300-1000кб. он кагбе берет одни и и те же предложения и по ним генерит. в начале предложения часто повторяються одинаковы кеи. порефрешь скрипт и посмотри.

вот бы вытянуть с ред батона генерилку по кею. может у кого что есть готовое уже?)
googleum вне форума  
Старый 03.06.2010, 19:29   #7
Drunk Monk
Je suis moine ivre
 
Аватар для Drunk Monk
 
Регистрация: 03.03.2009
Сообщений: 15,268
Бабло: $797172957
По умолчанию

Могу посмотреть.
Залей куда-нить рб, а то впадло искать.
Drunk Monk вне форума  
Старый 03.06.2010, 20:02   #8
jskorvin
добрый леприкон
 
Аватар для jskorvin
 
Регистрация: 05.03.2009
Сообщений: 379
Бабло: $56978
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от Drunk Monk Посмотреть сообщение
Могу посмотреть.
Залей куда-нить рб, а то впадло искать.
в личку кинул
__________________
EvaPharmacy - лучшая фарма партнерка (ICQ: 750000 Jabber: [email protected]) / Помощь детям.
jskorvin вне форума  
Старый 03.06.2010, 20:05   #9
Drunk Monk
Je suis moine ivre
 
Аватар для Drunk Monk
 
Регистрация: 03.03.2009
Сообщений: 15,268
Бабло: $797172957
По умолчанию

yes/ins/functions.php
функция KarlMarks решает. Там для нее всякие переменные нужно понасоздавать (глобалы, в начале функции). Должно заработать.
Drunk Monk вне форума  
Старый 04.06.2010, 00:12   #10
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

Offtopic
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума