Master-X
Форум | Новости | Статьи
Главная » Форум » Поисковые Системы » 
Тема: Генератор текста по цепям маркова на пхп
цитата
29/11/14 в 08:28
 JM
Народ если у кого есть нечто подобное поделитесь за пыво )
цитата
29/11/14 в 10:32
 HeavyHell
гугл в лихую отдал trollface.png


//В этот файл записываем исходный текст
$source_text = 'text.txt';
//Словарь, в который записываются слова, идущей после слов
$dictionary = array();
function load()
{
   global $dictionary,$source_text;
   //Читаем исходный файл
   $str = file_get_contents($source_text);
   //Превращаем текст в одну строку
   $str = preg_replace("#[\r\n]#","",$str);
   //Выделяем все слова из строки (выражение в кавычках или в скобках считается одним словом)
   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 genText(100); 
цитата
30/11/14 в 00:07
 JM
HeavyHell: а тексты исходные (словарь) мы откуда лучше всего берем?
Алго прост и гениален icon_smile.gif
цитата
02/12/14 в 17:29
 karbonv
JM писал:
откуда лучше всего берем?


при любом раскладе лучше всего собираем свои, и как то алго на Лема оч похож trollface.png


Эта страница в полной версии