Ищу функцию цепей Маркова

Тема в разделе "Тех. вопросы", создана пользователем I_not, 29 апр 2007.

Статус темы:
Закрыта.
  1. I_not

    I_not su -root

    Регистр.:
    9 янв 2007
    Сообщения:
    124
    Симпатии:
    50
    Ищу функцию или класс по обработке текста по алгоритму цепей Маркова на пхп
     
  2. bigbro

    bigbro Создатель

    Регистр.:
    12 авг 2006
    Сообщения:
    13
    Симпатии:
    8
  3. alexzh

    alexzh

    Регистр.:
    13 сен 2006
    Сообщения:
    222
    Симпатии:
    88
    http://nonsense.sourceforge.net/

    Nonsense generates random (and sometimes humorous) text from datafiles and templates using a very simple, recursive grammar.
     
  4. Andrey Malosolniy

    Andrey Malosolniy Создатель

    Регистр.:
    10 авг 2006
    Сообщения:
    30
    Симпатии:
    11
  5. alexzh

    alexzh

    Регистр.:
    13 сен 2006
    Сообщения:
    222
    Симпатии:
    88
  6. jacksoft

    jacksoft

    Регистр.:
    22 мар 2007
    Сообщения:
    595
    Симпатии:
    460
    Думаю понятно
     
  7. Flake

    Flake Постоялец

    Регистр.:
    11 май 2007
    Сообщения:
    80
    Симпатии:
    6
    Ещё один пример :)

    _http://webhell.org/book/markov
     
  8. tondaho

    tondaho Создатель

    Регистр.:
    26 май 2007
    Сообщения:
    36
    Симпатии:
    1
    в ласто доргене довольно неплохо реализована сия функция.:read:
     
  9. ArtInt

    ArtInt Постоялец

    Регистр.:
    3 июн 2007
    Сообщения:
    88
    Симпатии:
    35
  10. omni

    omni Постоялец

    Регистр.:
    13 июн 2007
    Сообщения:
    99
    Симпатии:
    15
    не смотрел на уже предложенные примеры. для генерации текста не в доргене, а как отдельную функцию, пользую вот это:

    Код:
    <?php error_reporting(0); ?>
    <html>
    
    <head>
     <title></title>
    </head>
    
    <body>
    <form method="POST">
    			
    <textarea name="textarea" cols="40" rows="4"></textarea><input type="text" name="len" size="24" value="50"><input type="submit">
    		</form>
    <?
    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();
    	$source = $_POST['textarea'];
    	$block_len = $_POST['len'];
    	//$source = "this is source text - you need get it from file or from web";
    	$markov->source_text = $source;
    	$result=$markov->genRaw($block_len);
    	echo "<br><br><br>";
    	echo $result;
    ?>
    
    </body>
    
    </html>
    собственно это удобный вариант, т.к. здесь есть готовый класс, который можно всунуть куда угодно
     
Статус темы:
Закрыта.