Подправить скрипт генерации предложений.

Андрей19 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
21.06.2014

Имеется скрипт, который формирует новый текст из предложений с помощью цепей маркова. Проблема в том, что в итоге на странице очень часто повторяются части предложения одного и того же. Даже, если делается, что мы по Маркову делаем 50 предложений из 1000 изначальных.

Требуется это как-то подправить, но! нельзя менять названия переменных никаких - они используются в дальнейшем в другой системе.

/**

* Функция разбивает входящий текст на слова, и складывает нвоый текст на основе цепей Маркова.

*

* @param type $text

* @param type $countp

* @param type $count_in

* @param type $key_parts_in

* @param type $key_type_in

* @return string

*/

function markov($text, $countp, $count_in = 0, $key_parts_in = 0, $key_type_in = 'query'){

# http://www.manhunter.ru/webmaster/358_generator_teksta_na_osnove_cepey_markova.html

$txt = preg_replace('~[^-0-9a-zа-яёaou?їіє\s!\?\.\,&;]~ui', '', $text);// Убрать из текста символы кроме цифр, букв и некоторых знаков препинания

$txt = preg_replace('~ {1,}([!\?\.\,])~', '\\1', $txt);// Подчистить пробелы перед окончаниями предложений

$txt = preg_replace('~([\n\r]+|[\s]+)~u',' ',$txt);// Лишние пробелы | переносы строк

$tmp = explode(' ', trim($txt));// Поделить текст на слова

if (count($tmp)

$words = Array();// Массив "звеньев"

// Заполнить звенья

for($i=0; $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 (preg_match('~^[А-ЯA-Z][а-яa-z]+~u',$word)) {

$start[] = $word;

}

}

// Сгененировать $countp предложений на основе исходного текста

$sentences = array();

for ($i=0; $i

while (true) {

$w = $start[array_rand($start)];

if (preg_match('~[\.!\?]$~',$w)) continue;

$sentence = $w.' ';

$cnt=1;// Количество слов в предложении

while(true) {// Сгенерировать предложение

// Переключить цепочку

$rand_key = array_rand($words[$w]);

$w = $words[$w][$rand_key];

$sentence .= $w.' ';

// Если слово находилось в конце предложения

if (preg_match('~[\.!\?]$~',$w)) break;

$cnt++;

if ($cnt>=18){

$sentence .= '.';

break;// Если генератор зациклился, то принудительно выйти

}

}

// Удачным считать предложение длиной 5-20 слов

if ($cnt>5 && $cnt

}

// Сгенерированное предложение

$sentences[] = $sentence;