spomoni.com
Регистрация: 06.04.2008
Сообщений: 18,730
Бабло: $2105745
|
Лови
------------------------
Сначала парсит и скачивает первую десятку гугла,
потом на ее основе генерит
нужное кол-во страниц цепями Маркова.
Error_Reporting(E_ALL & ~E_NOTICE);
class textGenerator
{
/************************************************** ****************************************
Эта функция отвечает за закачку заданного списка
URL с веба. Можете ее править по своим нуждам
(делать через неблокирующие сокеты, если cURL на сервере нет, например)
************************************************** ****************************************
/
function download($urllist)
{
$mh = curl_multi_init();
foreach ($urllist as $i => $url)
{
$conn[$i]=curl_init($url);
curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,1);
curl_setopt($conn[$i],CURLOPT_FOLLOWLOCATION,1);
curl_setopt($conn[$i],CURLOPT_MAXREDIRS,2);
curl_setopt($conn[$i],CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($conn[$i],CURLOPT_HEADER,0);
curl_multi_add_handle ($mh,$conn[$i]);
}
do
{
$n = curl_multi_exec($mh,$active);
}
while ($active);
foreach ($urllist as $i => $url)
{
$con = curl_multi_getcontent($conn[$i]);
$res[$i]= $con;
// file_put_contents("debug/$i.html",$con);
curl_multi_remove_handle($mh,$conn[$i]);
curl_close($conn[$i]);
}
curl_multi_close($mh);
return $res;
}
/************************************************** ****************************************
Эта функция парсит URL с первой страницы гугла по данном запросу.
И качает их функцией download.
************************************************** ****************************************
/
function parse_texts($q)
{
$q = urlencode($q);
$q = 'http://www.google.com/search?q='.$q;
$goo = file_get_contents($q);
$regexp = '/<a href=\"?([^\s\"]+)\"? class=l>/';
preg_match_all($regexp,$goo,$res);
$urllist = array();
for ($i = 0; $i<count($res[1]); $i++)
{
$urllist[] = $res[1][$i];
}
$ar = $this->download($urllist);
// var_dump($urllist);
return $this->clear_up_texts($ar);
}
/************************************************** ****************************************
Эта функция чистит массив с текстами от тегов для оформления текста.
Чтобы из него выжать как можно больше именно текста, подходящего для источника
генерации.
************************************************** ****************************************
/
function clear_up_texts($texts)
{
$tags = array('A', 'ABBR', 'ACRONYM', 'ADDRESS', 'AREA', 'B', 'BDO', 'BIG', 'BLOCKQUOTE', 'BR', 'CITE', 'CODE', 'DEL', 'DFN', 'EM', 'EMBED', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'HR', 'I', 'IMG', 'INS', 'LI', 'MAP', 'MARQUEE', 'OL', 'P', 'PRE', 'Q', 'SAMP', 'SMALL', 'SPAN', 'STRONG', 'FONT', 'SUB', 'SUP', 'UL', 'VAR', 'TT');
$res = array();
foreach ($texts as $con)
{
$con = html_entity_decode($con);
foreach ($tags as $tag)
{
$regexp = "/<\/?".$tag."[^>]*>/i";
$con = preg_replace($regexp,"",$con);
}
$regexp = "/<head.+<\/head>/i";
$con = preg_replace($regexp,"",$con);
$regexp = "/<script[^<]+<\/script>/i";
$con = preg_replace($regexp,"",$con);
$regexp = "/<style[^<]+<\/style>/i";
$con = preg_replace($regexp,"",$con);
$regexp = "/\s+/";
$con = preg_replace($regexp," ",$con);
$con = strtolower($con);
$res[] = $con;
}
return $res;
}
/************************************************** ****************************************
Эта функция собственно генерить тексты из массива исходных текстов.
************************************************** ****************************************
/
function generate($data, $words_co,$pages_co)
{
$result = array();
$content = "";
foreach ($data as $con)
{
$regexp = "/<[^>]+>/";
$res = preg_split($regexp,$con);
$m = 0;
foreach ($res as $kusok)
{
if (strlen($kusok)>$m)
{
$m = strlen($kusok);
$ms1 = $kusok;
}
}
$m = 0;
foreach ($res as $kusok)
{
if ((strlen($kusok)>$m)&&($kusok!=$ms1))
{
$m = strlen($kusok);
$ms2 = $kusok;
}
}
$itog = strtolower("$ms1 $ms2"
$content.="$itog ";
}
$regexp = "/[^a-z0-9]+/";
$content = preg_replace($regexp," ",$content);
$regexp = "/\s+/";
$temp = preg_split($regexp,$content);
$words = array();
for ($i = 0; $i<count($temp)-1; $i++)
{
if (!$words[$temp[$i]]) $words[$temp[$i]] = array();
$words[$temp[$i]][] = $temp[$i+1];
}
for ($i = 0; $i<$pages_co; $i++)
{
$r = rand(0,count($temp));
$w = $temp[$r];
$con = "";
for ($j = 0; $j<$words_co; $j++)
{
$r = rand(0,count($words[$w])-1);
$word = $words[$w][$r];
$w = $word;
$capit = false;
$r = rand(0,1000);
if (($r>100)&&($r<180)) $capit = true;
if ($capit)
{
$con.=".";
$word[0] = strtoupper($word[0]);
}
$con.=" $word";
}
$result[] = $con;
}
return $result;
}
}
?>
<?
/************************************************** ***************************************
Файл - пример использования.
Использование: вызываете из своего скрипта функцию
$gen->generate(запрос_в_гугл,количество_слов_на_с тра ницу,количество_страниц_необходимых);
Например:
$gen->generate("windows articles",300,5);
И эта функция возвращается массив с текстами нужной длины.
Предварительно надо создать, естественно, объект $gen:
$gen = new textGenerator();
Т.о. пример вернет массив из 5-ти элементов по 300 слов в каждом элементе.
************************************************** ****************************************
/
//include('textgenerator.class.php');
$gen = new textGenerator();
$data = $gen->parse_texts("windows article"
$texts = $gen->generate($data,500,5);
foreach ($texts as $text)
{
echo $text;
echo "<br><hr><br>";
}
?>
|