UmaxForum
Ответ
 
Опции темы Опции просмотра
Старый 18.07.2007, 18:10   #1
nevitas
Members
 
Регистрация: 22.04.2006
Адрес: Томск
Сообщений: 46
nevitas пока неопределено
Отправить сообщение для nevitas с помощью ICQ
По умолчанию

Сабж - копия вот этой условно-программы - http://umaxforum.com/topic/3/22801/ - на php. Зачем написал? Вдруг кому-то пригодится. К тому же были вроде как просьбы написать это на php.
В общем, держите:
<table border="0" align="center" width="95%" cellpadding="0" cellspacing="0"><tr><td>Исходный код </td></tr><tr><td id="CODE">
<?
/************************************************** ****************************************


Text Generator v 0.00002
Сделал nevitas.
ICQ 212928653.
Сначала парсит и скачивает первую десятку гугла,
потом на ее основе генерит
нужное кол-во страниц цепями Маркова.

Пример использования - example.php.

Удачной генерации.
************************************************** ****************************************

/
Error_Reporting(E_ALL &amp; ~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)&amp;&amp;($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)&amp;&amp;($r<180)) $capit = true;
if ($capit)
{
$con.=".";
$word[0] = strtoupper($word[0]);
}
$con.=" $word";
}
$result[] = $con;
}
return $result;
}

}

?>
[/quote]



И пример использования:

<table border="0" align="center" width="95%" cellpadding="0" cellspacing="0"><tr><td>Исходный код </td></tr><tr><td id="CODE">
/************************************************** ***************************************
Text Generator v 0.00002
Сделал nevitas.
ICQ 212928653.

Файл - пример использования.
Использование: вызываете из своего скрипта функцию
$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>";
}
[/quote]
nevitas вне форума   Ответить с цитированием
Старый 18.07.2007, 19:10   #2
sspy
Members
 
Аватар для sspy
 
Регистрация: 26.08.2006
Сообщений: 580
sspy - весьма и весьма положительная личностьsspy - весьма и весьма положительная личность
Отправить сообщение для sspy с помощью ICQ
По умолчанию

как раз кстати, thanx
sspy вне форума   Ответить с цитированием
Старый 18.07.2007, 19:12   #3
nevitas
Members
 
Регистрация: 22.04.2006
Адрес: Томск
Сообщений: 46
nevitas пока неопределено
Отправить сообщение для nevitas с помощью ICQ
По умолчанию

на здоровье...
захочется отблагодарить материально - милости просим - Z807610599192 :))
nevitas вне форума   Ответить с цитированием
Старый 19.07.2007, 03:37   #4
StHost
Members
 
Аватар для StHost
 
Регистрация: 14.06.2007
Адрес: Бангкок, Сиам
Сообщений: 957
StHost как роза среди колючекStHost как роза среди колючекStHost как роза среди колючек
Отправить сообщение для StHost с помощью ICQ
По умолчанию

Будем затачивать...
На всякий случай закинул номер кошелька к себе, как напьюсь с наживы, так кину обязательно.
__________________
Недавнее исследование ООН показало, что беднота всего мира может выйти из бедности за счёт богатства семи (7!!) богатейших миллиардеров мира... Ну и не пох?
StHost вне форума   Ответить с цитированием
Старый 19.07.2007, 03:53   #5
nevitas
Members
 
Регистрация: 22.04.2006
Адрес: Томск
Сообщений: 46
nevitas пока неопределено
Отправить сообщение для nevitas с помощью ICQ
По умолчанию

надеюсь, с моим генератором наживы будет немного больше
nevitas вне форума   Ответить с цитированием
Старый 29.07.2007, 16:49   #6
-[uf0]-
 
Регистрация: 26.07.2007
Сообщений: 3
-[uf0]- пока неопределено
Отправить сообщение для -[uf0]- с помощью ICQ
По умолчанию

Всё супер! Спасибо! Как раз его мне и нехватало )
-[uf0]- вне форума   Ответить с цитированием
Старый 02.08.2007, 09:44   #7
tralala
 
Регистрация: 27.02.2007
Адрес: Кишинёв
Сообщений: 22
tralala пока неопределено
По умолчанию

хороший скриптец.спасибо
__________________
Йа потпись.
tralala вне форума   Ответить с цитированием
Старый 02.08.2007, 09:59   #8
GTAlex
Members
 
Аватар для GTAlex
 
Регистрация: 12.09.2005
Адрес: Новосибирск
Сообщений: 417
GTAlex пока неопределено
Отправить сообщение для GTAlex с помощью ICQ
По умолчанию

php5
GTAlex вне форума   Ответить с цитированием
Старый 02.08.2007, 15:17   #9
Silverstorm
Местный
 
Аватар для Silverstorm
 
Регистрация: 20.02.2005
Адрес: LBN
Сообщений: 1,466
Silverstorm на пути к лучшему
Отправить сообщение для Silverstorm с помощью ICQ
По умолчанию

GTAlex и правильно. нех старье тянуть за собой.
по сабжу ничего не скажу, генерация текста не панацея.
но оформление кода - имхо страдает (не тут а вообще - комментарии, названия переменных итп)
__________________
Artelectrons Блог
Silverstorm вне форума   Ответить с цитированием
Старый 11.08.2007, 11:34   #10
nevitas
Members
 
Регистрация: 22.04.2006
Адрес: Томск
Сообщений: 46
nevitas пока неопределено
Отправить сообщение для nevitas с помощью ICQ
По умолчанию

да, есть такое, код у меня не слишком аккуратный. ну да ладно - главное людям помогает хоть немного.
nevitas вне форума   Ответить с цитированием
Ответ


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT, время: 01:39.


Powered by vBulletin® Version 3.7.4
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd. Перевод: zCarot