Скрипт генерации текста

Тема в разделе "Мелочи", создана пользователем serrgo, 25 ноя 2006.

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

    serrgo

    Регистр.:
    13 авг 2006
    Сообщения:
    158
    Симпатии:
    77
    Скрипт генерации текста по цепям маркова:

    PHP:
    <?
    error_reporting(0);
    $num_key=1000;
    $fname="text.txt";
    $input_text=implode("",file($fname));
    $input_text=str_replace("/r/n","",$input_text);
    $input_text=eregi_replace("([^[:blank:]])(\\- )","",$input_text);
    $input_text=split("[[:blank:]]+",strtolower($input_text));
    $a=mt_rand(0,count($input_text)-4);
    $pr=trim($input_text[$a])." ".trim($input_text[$a+1]);
    for (
    $a=0;$a<count($input_text)-4;$a++)$hash[trim($input_text[$a])." ".trim($input_text[$a+1])][]=trim($input_text[$a+2]);
                   while (
    $num_key>0){
                   
    $count=count($hash[$pr]);
                   
    $suff=mt_rand(0,$count-1);
                   
    $suffix=$hash["$pr"]["$suff"];
                   @
    $bred.= $suffix." ";
                   
    $temp=explode(" ",$pr);
                   
    $pr=array_pop($temp)." ".($suffix);
                   
    $num_key--;
                   }
                   echo 
    $bred;
    ?> 
    PHP:
    < ?PHP
    $fp 
    fopen("C:/text.txt""r");

    $text "";

    while(
    $string fgets($fp)) {
    $string trim($string);
    $text.=$string." ";
    }
    echo(
    $text);
    // echo "<БР>< ХР>“; // тут теги bр и hр, я заменил на русские, т.к. иначе они выполняются.
    $maxgen 1000;
    $nonword \n”;
    $w1 $nonword;
    $w2 $nonword;

    $words explode(” “$text);

    foreach( 
    $words as $word) {
    $table[$w1][$w2][”suff”][] = $word;
    $w1 $w2;
    $w2 $word;
    }
    $table[$w1][$w2][”suff”][] = $nonword;

    $w1 $nonword;
    $w2 $nonword;

    for(
    $i 0$i $maxgen$i++) {
    $suf $table[$w1][$w2]["suff"];
    $t array_rand($suf);
    if(
    $suf[$t] == $nonword)
    exit;
    echo 
    $suf[$t]." ";
    $w1 $w2;
    $w2 $suf[$t];
    }
    ?>
     
    Stripe и Olegan нравится это.
  2. MisterX

    MisterX Постоялец

    Регистр.:
    10 ноя 2006
    Сообщения:
    101
    Симпатии:
    7
    Какую-то ерунду он генерирует мало похожую на цепи Маркова. ИМХО в нем есть баги.
     
  3. Gooogle

    Gooogle Прохожие

    <?
    $source_text = $_POST['text'];
    //Íàø ñëîâàðü ñîîòâåòñòâèÿ ñëîâà è èäóùèõ çà íèì ñëîâ
    $dictionary = array();

    function load()
    {
    global $dictionary,$source_text;
    //Ïðåâðàùàåì òåêñò â îäíó ñòðîêó
    $str = preg_replace("#[\r\n]#","",$source_text);
    //Âûäåëÿåì âñå ñëîâà èç ñòðîêè (âûðàæåíèå â êàâû÷êàõ èëè â ñêîáêàõ ñ÷èòàåòñÿ îäíèì ñëîâîì)
    preg_match_all("#((\"[^\"]+\")|(\([^\)]+\))|([^\(\)\"'\s]+))(\s+|\z)#",$str,$parts);
    $words = $parts[1];
    $count = count($words);

    //Çàïîëíÿåì ñëîâàðü
    for( $i = 0; $i < $count; $i++ )
    {
    if( $i > 0 )
    {
    if( !in_array($words[$i],$dictionary[$prev_word]) )
    $dictionary[$prev_word][] = $words[$i];
    }
    $prev_word = $words[$i];
    if( empty($dictionary[$prev_word]) )
    $dictionary[$prev_word] = array();
    }
    }

    //Ôóíêöèÿ ãåíåðàöèè òåêñòà. $count - êîëè÷åñòâî ãåíåðèðóåìûõ ñëîâ
    function genText($count)
    {
    global $dictionary;
    $words = array_keys($dictionary);
    $word = $words[0];

    $text ='';
    for( $i = 0; $i < $count; $i++ )
    {
    $text .= ' '.$word;
    //Ñëåäóþùåå ñëîâî - ñëó÷àéíîå ñëîâî èç òåõ, ÷òî èäóò â èñõîäíîì òåêñòå çà òåêóùèì ñëîâîì
    $word = $dictionary[$word][rand(0,count($dictionary[$word])-1)];
    }
    return $text;
    }

    load();
    echo ("<center><h4>Äëÿ ïîâòîðíîé ãåíåðàöèè òåêñòà íàæìèòå F5</h4></center><br><br>");
    echo genText(100);
    ?>
     
  4. Serg78

    Serg78

    Регистр.:
    18 ноя 2006
    Сообщения:
    191
    Симпатии:
    61
    просветите кто-нибудь, почему так.
    В описаниях генерации по цепям маркова встречал высказывания и примеры, что генерится читабельный текст,а вот в большинстве продаваемых доргенов Марков даже при большом количестве подсунутого тематического текста генерит совершенно нечитабельную лажу. :(
     
  5. Fernandess

    Fernandess Создатель

    Регистр.:
    26 сен 2006
    Сообщения:
    27
    Симпатии:
    2
    Тескт, созданный каким-либо алгоритмом, не может быть по-определению читабельным для человека, по крайней мере пока. Для поисковика в какой-то мере текст таким назвать еще можно. А ваще читай умаксфорум - там сейчас как-раз идет несколько обсуждений на данную тему.
     
  6. bast

    bast Прохожие

    А как насчет этого? http://vesna.yandex.ru/
     
  7. xKorN

    xKorN Прохожие

    да.. интересно. они там даже стихи генерят. причем весьма рифмовые.. хз конечно как оно насчет пушкинского слога.. но читабильно и даже очень.
    любопытно.
     
  8. jhst

    jhst Постоялец

    Регистр.:
    16 окт 2006
    Сообщения:
    78
    Симпатии:
    18
    По-моему, все зависит от размеров словаря. Дайте маркову "Войну и Мир", а не 50кб текста - получите почти читаемый контент.
     
  9. customs2006

    customs2006 Создатель

    Регистр.:
    26 дек 2006
    Сообщения:
    43
    Симпатии:
    12
    Выйдет наоборот полнейшая лажа.
    Читабельность гораздо больше зависит от длины цепочки, а не от обьема текста.

    Добавлено через 5 минут
    Т.е. все известные генераторы имеют длину цепи = 2.
    Для генерации нормального текста этот параметр должен быть ~=4.
    А алгоритм работы вышеприведенного варианта тут уже не сработает, так как обьемы абсолютно другие требуются.

    Так что нафиг читабельность побоку - главное чтоб поисковикам нравилось.
     
  10. dme

    dme Создатель

    Регистр.:
    2 дек 2006
    Сообщения:
    37
    Симпатии:
    5
     
Статус темы:
Закрыта.