» » » Генерация бредо-текста (цепи Маркова)

Генерация бредо-текста (цепи Маркова)

21-05-2015, 11:22
Автор: .
Просмотров: 1 161
Комментариев: 0
Версия для печати

Генерация бредо-текста (цепи Маркова)

 


в запас отправляется небольшой скрипт генерации бессмысленного текста, основанный на цепях Маркова


	
		
	// Прочитать исходный текст, на основе которого будет генерироваться новый 
	$str=file_get_contents('generate.txt'); 
	  
	// Установить кодировку системы 
	//setlocale(LC_ALL, 'ru_RU.UTF8'); 
	  
	// Убрать из текста символы кроме цифр, букв и некоторых знаков препинания 
	$str=eregi_replace('[^-a-zа-я0-9 !\?\.\,]',' ',$str); 
	  
	// Подчистить пробелы перед окончаниями предложений 
	$str=eregi_replace(' {1,}([!\?\.\,])','\\1',$str); 
	  
	// Поделить текст на слова 
	$tmp=preg_split('/[[:space:]]+/is',$str); 
	  
	// Массив "звеньев" 
	$words=Array(); 
	  
	// Заполнить звенья 
	for($i=0; $i<count($tmp); $i++) { 
	    if ($tmp[$i+1]!='') { 
	        $words[$tmp[$i]][]=$tmp[$i+1]; 
	    } 
	} 
	$words=array_map('array_unique',$words); 
	  
	// Массив начальных слов в предложениях 
	$start=Array(); 
	  
	foreach($words as $word=>$links) { 
	    if (ereg('^[А-Я][а-я]+',$word)) { 
	        $start[]=$word; 
	    } 
	} 
	  
	// Сгененировать 100 предложений на основе исходного текста 
	for ($i=0; $i<100; $i++) { 
	    while (true) { 
	        $w=$start[rand(0,(count($start)-1))]; 
	        if (ereg('[\.!\?]$',$w)) { continue; } 
	        $sentence=$w.' '; 
	        // Количество слов в предложении 
	        $cnt=1; 
	        // Сгенерировать предложение 
	        while(true) { 
	            $links=$words[$w]; 
	            // Переключить цепочку 
	            $w=$words[$w][rand(0,(count($words[$w])-1))]; 
	            $sentence.=$w.' '; 
	            // Если слово находилось в конце предложения 
	            if (ereg('[\.!\?]$',$w)) { break; } 
	            $cnt++; 
	            // Если генератор зациклился, то принудительно выйти  
	            if ($cnt>19) { break; } 
	        } 
	        // Удачным считать  предложение длиной 5-20 слов 
	        if ($cnt>5 && $cnt<20) { break; } 
	    } 
	    // Сгенерированное предложение 
	    echo $sentence; 
	} 
 
Рейтинг статьи:
  
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо зайти на сайт под своим именем.