1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Markov Chains

Тема в разделе "Web Coding", создана пользователем sarmatik2006, 12 сен 2006.

Статус темы:
Закрыта.
Модераторы: latteo
  1. sarmatik2006

    sarmatik2006 Создатель

    Регистр.:
    26 авг 2006
    Сообщения:
    38
    Симпатии:
    21
    Описано здесь http://thisishot.org/?page_id=17 ;)

    и еще
    <?
    mt_srand((double)microtime()*1000000);

    class Markov
    {
    var $source_text="";

    var $links = array();
    var $dictionary = array();

    function load()
    {
    if ($this->source_text)
    {
    $this->source_text = preg_replace("/[\r\n\|]/s"," ",$this->source_text);
    $this->source_text = trim(preg_replace("/[ ]+/s"," ",$this->source_text));

    preg_match_all("/((\"[^\"]+\")|(\([^\)]+\))|([^\(\)\"'\s]+))(\s+|\z)/s",$this->source_text,$parts);

    $words=$parts[1];
    $count=count($words);
    $prev_num=0;

    $j=0;

    for($i=0;$i<$count;$i++)
    {
    $num=array_search($words[$i],$this->dictionary,TRUE);

    if ($num===false)
    {
    $this->dictionary[$j]=$words[$i];
    $num=$j;
    $j++;
    }

    if ($i>0)
    {
    if (!is_array($this->links[$prev_num])) $this->links[$prev_num]=array();
    if ($num!=$prev_num) array_push($this->links[$prev_num],$num);
    }

    $prev_num=$num;
    }
    }
    else return;
    }

    function genRaw($max_length)
    {
    if (!count($this->dictionary)) $this->load();

    if (!($dict_cnt=count($this->dictionary)) || !($link_cnt=count($this->links))) return "";

    $totalCount=0;
    $totalLength=0;

    $num=mt_rand(0,$dict_cnt-1);
    $text="";

    while($totalLength<$max_length)
    {
    $add_str=" ".$this->dictionary[$num];
    $totalLength+=strlen($add_str);
    $text.=$add_str;
    $totalCount++;

    if ($num<$link_cnt)
    {
    $j=count($this->links[$num]);

    if ($j)
    {
    $i=mt_rand(0,$j-1);
    $num=$this->links[$num][$i];
    }
    else $num=mt_rand(0,$dict_cnt-1);
    }
    else $num=mt_rand(0,$dict_cnt-1);
    }

    return trim($text);
    }
    }

    // ** использование ********************************************

    $markov = new Markov();
    $markov->source_text = "this is source text - you need get it from file or from web";

    $result=$markov->genRaw($block_len); // $block_len - длина текста, который надо получить

    ?>
     
Статус темы:
Закрыта.