[Ищу] Парсер текста ??

Статус
В этой теме нельзя размещать новые ответы.
AFrost написал(а):
Код:
......
Это от snoopy кажется
спасибо. попробую в деле :)

tomcat буду оч благодарен, если такой найдется,
сам не напишу, т.к. в пхп я не оч рублю (
 
Вот ссылка на архив...



Честно скажу - скрипт писался по ходу дела, так что с точки зрения нормального программера может показаться несколько... стремноватым. :D
Но тем не менее работает, хотя там еще доделывать и доделывать.
Да, оттуда выброшена процедура удаления предложений с уникальными словами - я ее так и не довел до ума. Время появится - сделаю и выложу.
 
tomcat написал(а):
Вот ссылка на архив...

*** скрытое содержание ***

Честно скажу - скрипт писался по ходу дела, так что с точки зрения нормального программера может показаться несколько... стремноватым. :D
Но тем не менее работает, хотя там еще доделывать и доделывать.
Да, оттуда выброшена процедура удаления предложений с уникальными словами - я ее так и не довел до ума. Время появится - сделаю и выложу.
:D у меня такой на винте лежит, а я и не знал, что он тексты тоже граббит. все путем. спасибо тебе
 
diez написал(а):
:D у меня такой на винте лежит, а я и не знал, что он тексты тоже граббит. все путем. спасибо тебе
да не за что...

его работу можно еще ускорить, если немного переделать - грабить текст не с самих сайтов, а из гугловского кэша.... кто бы сделал...:D
 
  • Нравится
Реакции: diez
а не, у меня другой был. просто по внешнему виду как 2 капли похожи. в код не сразу полез посмотреть.
осталось увязать этот граббер с генератором текста по Маркову :cool:
 
diez написал(а):
а не, у меня другой был. просто по внешнему виду как 2 капли похожи. в код не сразу полез посмотреть.
осталось увязать этот граббер с генератором текста по Маркову :cool:

а не у кого кстати нету скрипта генератора текста по Маркову ?
 
  • Нравится
Реакции: diez
diez написал(а):
а не, у меня другой был. просто по внешнему виду как 2 капли похожи. в код не сразу полез посмотреть.
осталось увязать этот граббер с генератором текста по Маркову :cool:

ну дык... стандартные TEXTAREA и BUTTON - они везде как две капли похожи...:)

... а **х его увязывать. Я полученный текст в дорогенератор закидываю... а там и Марков, и другие финтифлюшки....
 
  • Нравится
Реакции: diez
Charle написал(а):
а не у кого кстати нету скрипта генератора текста по Маркову ?
Как щаз помню, этот марковский генератор у себя дядя Гринвуд выкладывал :)

PHP:
<?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>&nbsp;<input name='min' class='prop' value='".$_POST['min']."'>&nbsp;&nbsp;&nbsp;<b>max</b>&nbsp;<input name='max' class='prop' value='".$_POST['max']."'>&nbsp;<b>density</b>&nbsp;<input name='density' class='prop' value='".$_POST['density']."'>&nbsp;</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>";
?>
 
  • Нравится
Реакции: diez
... а **х его увязывать. Я полученный текст в дорогенератор закидываю... а там и Марков, и другие финтифлюшки...
у меня генератор просто свой, собранный по кускам. т.к. в основном доры делаю на блогах руками, поэтому нужна система, которая бы генерила готовые посты для блога
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху