diez
Гуру форума
- Регистрация
- 1 Ноя 2006
- Сообщения
- 188
- Реакции
- 66
спасибо. попробую в делеAFrost написал(а):Это от snoopy кажетсяКод:......
tomcat буду оч благодарен, если такой найдется,
сам не напишу, т.к. в пхп я не оч рублю (
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
спасибо. попробую в делеAFrost написал(а):Это от snoopy кажетсяКод:......
у меня такой на винте лежит, а я и не знал, что он тексты тоже граббит. все путем. спасибо тебеtomcat написал(а):Вот ссылка на архив...
*** скрытое содержание ***
Честно скажу - скрипт писался по ходу дела, так что с точки зрения нормального программера может показаться несколько... стремноватым.
Но тем не менее работает, хотя там еще доделывать и доделывать.
Да, оттуда выброшена процедура удаления предложений с уникальными словами - я ее так и не довел до ума. Время появится - сделаю и выложу.
да не за что...diez написал(а):у меня такой на винте лежит, а я и не знал, что он тексты тоже граббит. все путем. спасибо тебе
diez написал(а):а не, у меня другой был. просто по внешнему виду как 2 капли похожи. в код не сразу полез посмотреть.
осталось увязать этот граббер с генератором текста по Маркову
diez написал(а):а не, у меня другой был. просто по внешнему виду как 2 капли похожи. в код не сразу полез посмотреть.
осталось увязать этот граббер с генератором текста по Маркову
Как щаз помню, этот марковский генератор у себя дядя Гринвуд выкладывалCharle написал(а):а не у кого кстати нету скрипта генератора текста по Маркову ?
<?php
error_reporting(0);
header("Content-Type: text/html; charset=windows-1251");
print "<title>text generator</title>
<style type='text/css'>
TEXTAREA {border: 1px solid #666; background: #C0C0C0; font:12px Courier New; color: #000; width: 400px; height: 200px}
BODY, TABLE {font: 12px Arial; color:#000; background: #FFF}
INPUT {font:12px Arial; color: #000; background: #C0C0C0; border: 1px solid #666; height: 16px}
INPUT.keyword {font:12px Arial; color:#000; background: #C0C0C0; border: 1px solid #666; height: 16px; width: 180px}
INPUT.prop {font:12px Arial; color:#000; background: #C0C0C0; border: 1px solid #666; height: 16px; width: 30px}
</style>
<table align='center' cellpadding='2' cellspacing='0' width='400'>
<form method=POST>
<tr>
<tr>
<td><b>text</b><br><textarea name='text' rows='35'>".$_POST['text']."</textarea></td>
</tr>
</table>
<table align='center' cellpadding='2' cellspacing='0' width='400'>
<tr>
<td><b>min</b> <input name='min' class='prop' value='".$_POST['min']."'> <b>max</b> <input name='max' class='prop' value='".$_POST['max']."'> <b>density</b> <input name='density' class='prop' value='".$_POST['density']."'> </td>
</tr>
<tr>
<td><b>keyword</b> <input name='keyword' class='keyword' value='".$_POST['keyword']."'></td>
</tr>
</table>
<table align='center' cellpadding='2' cellspacing='0' width='400'>
<tr>
<td><input type='submit' value='generate'></td>
</tr>
</form>
</table>";
if (empty($_POST['text'])) die();
function prep_text($text)
{
/* грузит и подготавливает текст */
$text = strtolower($text);
$text = str_replace(array ("? ", "! "), ".", $text);
$text = str_replace(array (" -", "- ", "\t", "\r", "\n", "|", "&", '\\', '/', " :", " ;", "©"), ' ', $text);
$text = str_replace(array (")", "(", "'", "\"", '*'), '', $text);
$text = str_replace(" ,", ",", $text);
$text = preg_replace("~(\s+\d{1,2}\s+)|(\w*\.\w+)~", " ", $text);
$text = preg_replace("~\s+~", " ", $text); // удаляем пробелы длиннее одного
/* разбиваем на префиксы и суффиксы */
$sents = explode('. ', $text); // разбиваем на предложения
$count_sents = count($sents);
for ($j=0; $j<$count_sents; ++$j)
{
$sents[$j] = explode(' ', $sents[$j]); // разбиваем на слова
$count_words = count($sents[$j]);
for ($i=0; $i < ($count_words - 1); ++$i)
{
$prefix = $sents[$j][$i];
$output[$prefix][] = $sents[$j][$i+1];
}
}
/* удаляем повторяющиеся суффиксы */
$keys = array_keys($output);
foreach ($keys as $key)
{
$output[$key] = array_unique($output[$key]);
}
return $output;
}
function gen_text($text, $keyword, $min, $max, $density)
{
/* генерируем текст */
$result_count = 0; // считаем количество сгенереных слов
$need = mt_rand($min, $max); // размер текста
for ($j=0; $result_count < $need; ++$j)
{
$prev = array_rand($text); // первое слово предложения
$num = mt_rand(5, 12); // количество слов в предложении
for ($i=0; $i<$num; ++$i)
{
$sents[$j][$i] = $prev;
++$result_count;
$p = $text[$prev][mt_rand(0, count($text[$prev]) - 1)];
if ($p == '') $p = array_rand($text);
$prev = $p;
if ($prev == '') break 2;
}
}
/* ищем слова после которых можно поставить кейворд */
foreach ($sents as $num_sent => $sent)
{
foreach ($sent as $num_word => $word)
{
if ($word == 'an' || $word == 'a' || $word == 'is' || $word == 'are'||
$word == 'will' || $word == 'or' || $word == 'not' || $word == 'but' ||
$word == 'that' || $word == 'this' || $word == 'of') $replace[][] = array ($num_sent, $num_word+1);
}
}
/* вставляем кейворд */
$to_replace = round(($result_count / 100) * $density); // сколько слов нужно заменить
$replaced = 0; // количество замененных слов
while ($replaced < $to_replace)
{
$n = 0;
/* выбираем какое слово заменять */
do
{
$i = mt_rand(0, count($replace)-1);
$j = mt_rand(0, count($replace[$i])-1);
$num_sent = $replace[$i][$j][0];
$num_word = $replace[$i][$j][1];
++$n; // чтобы не оказалось бесконечного цикла, из-за плохого текста
if ($n>100) break 2;
}
/* чтобы рядом не стояло кейворда */
while ($sents[$num_sent][$num_word] == $keyword ||
$sents[$num_sent][$num_word+1] == $keyword ||
$sents[$num_sent][$num_word-1] == $keyword ||
$sents[$num_sent][$num_word-2] == $keyword ||
$sents[$num_sent][$num_word+2] == $keyword);
$sents[$num_sent][$num_word] = "<b>$keyword</b>";
++$replaced;
}
/* собираем все в строку */
foreach ($sents as $sent)
{
$count_word=count($sent);
if ($count_word<=2) continue;
/* удаляем слова, которые не должны быть в конце */
if ($sent[$count_word-1] == 'to' || $sent[$count_word-1] == 'for' || $sent[$count_word-1] == 'from' || $sent[$count_word-1] == 'is' || $sent[$count_word-1] == 'are'|| $sent[$count_word-1] == 'of'|| $sent[$count_word-1] == 'in' || $sent[$count_word-1] == 'the'|| $sent[$count_word-1] == 'and'|| $sent[$count_word-1] == 'or' || $sent[$count_word-1] == 'into' || $sent[$count_word-1] == 'a' || $sent[$count_word-1] == 'an' || $sent[$count_word-1] == 'with')
unset($sent[$count_word-1]);
/* удаляем ,:; в последних словах */
$sent[$count_word-2] = rtrim($sent[$count_word-2], ",:;");
$sent[$count_word-1] = rtrim($sent[$count_word-1], ",:;");
$output .= ucfirst(implode(' ', $sent)).'. ';
}
$output = str_replace(' .', '.', $output);
return $output;
}
if ($_POST['min'] < 0) $_POST['min'] = 0;
if ($_POST['min'] > 1900) $_POST['min'] = 2000;
if ($_POST['max'] > 1900) $_POST['max'] = 2000;
if ($_POST['max'] < 0 || $_POST['max'] < $_POST['min']) $_POST['max'] = $_POST['min'] + 100;
if ($_POST['density'] < 0) $_POST['density'] = 0;
if ($_POST['density'] > 70) $_POST['density'] = 70;
$text = prep_text($text);
print "<table align='center' cellpadding='2' cellspacing='0' width='500'><tr><td>";
print gen_text($text, $_POST['keyword'], $_POST['min'], $_POST['max'], $_POST['density']);
print "</td></tr></table>";
?>
у меня генератор просто свой, собранный по кускам. т.к. в основном доры делаю на блогах руками, поэтому нужна система, которая бы генерила готовые посты для блога... а **х его увязывать. Я полученный текст в дорогенератор закидываю... а там и Марков, и другие финтифлюшки...