Генерация текстов для дорвеев на PHP

(Ответов: 0, Просмотров: 4877)
  1. Новичок Аватар для Archey
    • Регистрация: 10.06.2011
    • Сообщений: 28
    • Репутация: 5
    • Webmoney BL: ?
    Главная проблема при дорвеестроении заключается в отсутствии объемного уникального контента. Для решения этой проблемы многие используют генерацию случайного текста. Такой "уникальный текст" представляет собой мешанину из фраз, изъятых из различных литературных источников и разбавленных ключевиками. Я решил сделать нечто подобное.

    После некоторых умственных усилий было решено, что генерировать текст лучше всего следующим образом:

    1. Берем художественное произведение и разбиваем его на фразы. Началом и концом каждой фразы будем считать знаки препинания - точку, запятую, тире, знак восклицания и т. д.
    2. Расставляем получившиеся фразы в случайном порядке, разбавляя их рандомными запятыми и точками. Полученный текст будет хоть и бредовым, но синтаксически правдоподобным. Естественно, новые предложения начинаем с больших букв.
    3. В бредотекст вкрапляем слова из поискового запроса (ключевики).

    Для разбивки текста на фразы я использовал текстовый редактор Notepad++. Алгоритм следующий:

    1. Находим в тексте знак препинания, выделяем его вместе с пробелами (чтобы получилось, например, ", ").
    2. Жмем Ctrl+H (заменить). Устанавливаем режим поиска "расширенный".
    3. Устанавливаем параметры замены: найти ", " заменить на "\r\n" (перевод строки)
    4. Проделываем это со всеми знаками препинания, подчищаем прочий шлак. В итоге получаем длинный файл, каждая строка в котором - маленькая фраза.
    5. Выделяем весь текст (Ctrl-A), выполняем Правка --> Регистр выделенного --> все строчные. Это нужно для того, чтоб в генерируемом бредотексте не было ситуаций, когда после запятых идут слова с прописных букв. Прописные же буквы после точек будем делать сами в скрипте.

    Теперь нужно занести получившийся текстовый файл в таблицу БД. Мотивы очевидны: для генерации текстов лучше обращаться к БД, чем постоянно загружать метровый текстовый файл.

    Еще некоторые соображения по поводу бредотекста. Слова вроде "скачать", "бесплатно", "без регистрации" и т. д. лучше использовать реже, чем конкретные предметы поискового запроса. Всех этих "скачать" и "бесплатно" у вас будет предостаточно и на странице дорвея, зато использование конкретных слов делает текст как бы тематическим, и этих слов желательно мешать в текст побольше. Также нужно будет отсеивать междометия, союзы и прочий шлак. Делать это будем простой проверкой длины текста.

    Вот, собственно, функция. $zapros - поисковый запрос, под который заточен текст.

    PHP код:
    function gen_text($zapros)
    {
        
    /******* НАСТРОЙКИ *******/
        //количество предложений в тексте, от
        
    $predl_from 5;
        
    //количество предложений в тексте, до
        
    $predl_to 9;
        
    //количество фраз в выражении, от
        
    $phrases_from 3;
        
    //количество фраз в выражении, до
        
    $phrases_to 6;
        
    //количество букв в слове из запроса, начиная с которого слово не считается шлаком
        
    $ne_shlak 4;
        
    //вероятность того, что во фразу будет добавлено слово из запроса (включая общие слова вроде "скачать" и "бесплатно")
        
    $general_key_chance 50;
        
    //вероятность того, что будет добавлено конкретное слово из запроса, без "скачать" и "бесплатно"
        
    $concrete_key_chance 35;
        
    /*************************/
        
        
    $query "SELECT id FROM textgen ORDER BY id DESC LIMIT 1";
        
    $res mysql_query($query) or die(mysql_error());
        
    $row mysql_fetch_array($res);
        
    $max_id $row["id"]; //общее количество выражений
        
    $keys explode(" "$zapros); //получаем массив слов из запроса
        
    $keys1 = array(); //сюда будем добавлять слова из запроса, отсеянные от мелких союзов, междометий и прочего шлака, а также от слов скачать, бесплатно и прочего в этом роде
        
    $keys2 = array(); //сюда будем добавлять общие слова из запроса ("скачать бесплатно")
        
    foreach ($keys as $word)
        {
            if (
    strlen($word) >= $ne_shlak)
            {
                if
                (
                (
    substr_count($word'бесплат') > 0)
                || (
    substr_count($word'безплатн') > 0)
                || (
    substr_count($word'качат') > 0)
                )
                {
                    
    array_push($keys2$word); //заполняем массив общих слов (скачать бесплатно)
                
    }
                else
                {
                    
    array_push($keys1$word); //заполняем массив конкретных слов
                
    }
            }
        }
        
    $full_text ''//сюда будем записывать генерируемый текст
        
    $pr rand($predl_from$predl_to); //количество предложений в генерируемом тексте
        
    for($i 1$i <= $pr$i++)
        {
            
    $sl rand($phrases_from$phrases_to); //количество выражений в тексте
            
    for($j 1$j $sl$j++)
            {        
                
    $query "SELECT text FROM textgen WHERE id = '".rand(1$max_id)."'"//выбираем случайную фразу
                
    $res mysql_query($query) or die(mysql_error());
                
    $row mysql_fetch_array($res);
                if (
    $j == 1// если начало предложения...
                
    {
                    
    $full_text .= ucfirst($row["text"]).", "//то начинаем его с большой буквы
                
    }
                else
                {                
                    
    $key_chance rand(1,100);
                    if (
    $key_chance <= $concrete_key_chance//добавляем "конкретное" слово из запроса
                    
    {
                        
    $full_text .= $row["text"]." ".$keys1[rand(0count($keys1)-1)].", ";
                    }
                    elseif (
    $key_chance <= $general_key_chance//добавляем "общее" слово из запроса
                    
    {
                        
    $full_text .= $row["text"]." ".$keys2[rand(0count($keys2)-1)].", ";
                    }
                    else
                    {
                        
    $full_text .= $row["text"].", ";
                    }
                }    
            }
            
    $query "SELECT text FROM textgen WHERE id = '".rand(1,$max_id)."'";
            
    $res mysql_query($query) or die(mysql_error());
            
    $row mysql_fetch_array($res);
            
    $full_text .= $row["text"].". "//оформляем конец предложения
        
    }
        return 
    $full_text;

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

    PHP код:
    echo gen_text("скачать бесплатные мультики аниме"); 
    Пример результата:

    Она шла, и ей нечего было возразить, знак ее помолвки аниме, что говорю. Как мне благодарить вас, не правда ли аниме, пленник ускользнул из за его собственной неосмотрительности. Прекрасная дикарка, тигровая лилия мультики, о чем ей говорила мадам бенуа аниме, прими ее в свой дом, ее комнатка находилась на первом этаже и окном выходила на заброшенный пустырь. Губернаторша покраснела, как смерть, и обещал показать дорогу. Так подчеркивала истинно христианское милосердие его поступка, по видимому мультики, –это несложно. Нет, что аниме, она прекрасно осознавала скачать, довольно мультики, беречь каждое су, сказал волк онор. Никто за нами не идет, наверняка скачать, может мультики, я не хочу.
    Вот и все. Не кашляйте.
    Последний раз редактировалось Archey; 06.03.2012 в 21:06.
    • 5

    Спасибо сказали:

    Alejandro(11.03.2012), alexz15(15.12.2013), Catmo(05.11.2013), orion55(16.03.2012), yabuti(15.06.2012),

Похожие темы

Темы Раздел Ответов Последний пост
генерация sitemap.xml для часто обновляемого сайта. Как правильно сделать?
Общие вопросы поисковой оптимизации 2 29.08.2010 16:25
Генерация текста на примере
Дайджест блогосферы 0 07.05.2010 13:38
Генерация описаний для биржи ссылок sape - видео урок
Дайджест блогосферы 0 28.12.2009 07:33
Генерация текста
Вопросы от новичков 0 17.09.2009 00:26

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры