[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Обрамление текста
HIDDENSY
Всем привет. PHP практически не знаю, пытаюсь капать изучаю....

В сети нашел замечательный CLASS для автоматизации и подбору ключевых слов на сайте из контента сайта. Привинтил его к себе на сайт, все работает, но хочется еще кое что....

Собственно сам CLASS

Свернутый текст
PHP
<?php
class Counter
{
    var $origin_arr;
    var $modif_arr;
    var $min_word_length = 5;

function explode_str_on_words($text)
{

$search = array ("'ё'",
                 "'<script[^>]*?>.*?</script>'si",  // Вырезается javascript
                 "'<[\/\!]*?[^<>]*?>'si",           // Вырезаются html-тэги
                 "'([\r\n])[\s]+'",                 // Вырезается пустое пространство
                 "'&(quot|#34);'i",                 // Замещаются html-элементы
                 "'&(amp|#38);'i",
                 "'&(lt|#60);'i",
                 "'&(gt|#62);'i",
                 "'&(nbsp|#160);'i",
                 "'&(iexcl|#161);'i",
                 "'&(cent|#162);'i",
                 "'&(pound|#163);'i",
                 "'&(copy|#169);'i",
                 "'&#(\d+);'e");

$replace = array ("е",
                  " ",
                  " ",
                  "\\1 ",
                  "\" ",
                  " ",
                  " ",
                  " ",
                  " ",
                  chr(161),
                  chr(162),
                  chr(163),
                  chr(169),
                  "chr(\\1)");

$text = preg_replace ($search, $replace, $text);

    $del_symbols = array(",", ".", ";", ":", "\"", "#", "\$", "%", "^",
                         "!", "@", "`", "~", "*", "-", "=", "+", "\\",
                         "|", "/", ">", "<", "(", ")", "&", "?", "№", "\t",
                         "\r", "\n", "{","}","[","]", "'", """, """, "",
                         "как", "для", "что", "или", "это", "этих",
                         "всех", "вас", "они", "оно", "еще", "когда",
                         "где", "эта", "лишь", "уже", "вам", "нет",
                         "если", "надо", "все", "так", "его", "чем",
                         "при", "даже", "мне", "есть", "раз", "два",
                         "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
                         );

    $text = str_replace($del_symbols, array(" "), $text);
    $text = ereg_replace("( +)", " ", $text);
    $this->origin_arr = explode(" ", trim($text));
    return $this->origin_arr;
}

function count_words()
{
    $tmp_arr = array();
    foreach ($this->origin_arr as $val){
        if (strlen($val)>=$this->min_word_length){
            $val = strtolower($val);
        if (array_key_exists($val, $tmp_arr)){
            $tmp_arr[$val]++;
        }
        else
        
{
            $tmp_arr[$val] = 1;
        }
        }
    }
    arsort ($tmp_arr);
    $this->modif_arr = $tmp_arr;
}

function get_keywords($text){
$this->explode_str_on_words($text);
$this->count_words();
$arr = array_slice($this->modif_arr, 0, 15);
$str = "";

foreach ($arr as $key=>$val){
$str .= $key . ", ";
}

return trim(substr($str, 0, strlen($str)-2));
}
}


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

PHP
// создание экземпляра класса
$word_counter = new Counter();

// если длинна строки больше 100000
if (strlen($bodyblock)>100000){
    // подбор слов
    $keywords = $word_counter->get_keywords(substr($bodyblock, 0, 50000));
}
else // если меньше
{
    // подбор слов
    $keywords = $word_counter->get_keywords($bodyblock);
}


В моём случа в $bodyblock находится весь текст статьи на сайте. После обработки получаем список ключевых слов через запятую.

1. Помогите доработать или создать новый CLASS который обрамит текст в $bodyblock. т.е. берем ключевое слово и ицем его по всему тексту $bodyblock, если нашли, то обрамляем его жирным, переходим к следующему слову. В результате все подобранные слова в тексте будут выделены жирным.

2. Если есть идеи как составить не только слова, а еще и фразы очень буду благодарен за подсказку.



Спустя 3 часа, 18 минут, 43 секунды (15.09.2009 - 12:12) HIDDENSY написал(а):
Уважаемые программисты, мне никто не может помочь? Слишком сложная тема?
Я сам просто только начинаю изучать азы в PHP и в данной теме не бум-бум. Помогите пожалуйста. Мне кажется для знатока вопрос на 2 минуты.

Спустя 6 часов, 2 минуты, 18 секунд (15.09.2009 - 18:15) kirik написал(а):
PHP
$bodyblock 'Сотона разинул рот, булку просит бегемот.'// текст
$words = array('сотона''рот''просит'); // выделяемые слова

// -------
foreach($words as &$word)
{
    
$word preg_quote($word'/');
}
$return preg_replace('/('.implode('|'$words).')/iu''<b>\\1</b>'$bodyblock);
// -------


echo $return// результат с выделенными словами

Спустя 2 часа, 46 минут, 29 секунд (15.09.2009 - 21:01) HIDDENSY написал(а):
Спасибо за пример. Но он не работает.

Выводит следующее:

Warning: preg_replace() [function.preg-replace]: Compilation failed: invalid UTF-8 string at offset 2 in /home/virtwww/*******/http/test.php on line 10

Установлен PHP Version 5.2.4

Спустя 54 минуты, 54 секунды (15.09.2009 - 21:56) kirik написал(а):
HIDDENSY
у тебя значит файл/данные не в utf-8.

Спустя 2 минуты, 39 секунд (15.09.2009 - 21:59) HIDDENSY написал(а):
У меня используется кодировка windows-1251, как быть в этом случае?

Спустя 35 минут, 32 секунды (15.09.2009 - 22:34) kirik написал(а):
HIDDENSY
нууу.. можешь попробовать u убрать из паттерна..

Спустя 32 минуты, 26 секунд (15.09.2009 - 23:07) HIDDENSY написал(а):
Убрал u заработало. УРА! Спасибо огромное.

Только вот работает все это только на примере приведенном.
Как строку:
трудового, работнику, обязуется, кодекс

перегнать в массив для дальнейшего использование в данной функции.

$keywords = "трудового, работнику, обязуется, кодекс";
как получить
$words = array('трудового', 'работнику', 'обязуется', 'кодекс'); // выделяемые слова


Спустя 12 минут, 26 секунд (15.09.2009 - 23:19) kirik написал(а):
Цитата (HIDDENSY @ 15.09.2009 - 15:07)
Как строку:...перегнать в массив для дальнейшего использование в данной функции.

Так:
PHP
$keywords = 'трудового, работнику, обязуется, кодекс';
$words = array_map('trim', explode(',', $keywords));

Спустя 9 минут, 31 секунда (15.09.2009 - 23:29) HIDDENSY написал(а):
kirik, огромное тебе спасибо. Все получилось.

Надо каждую функцию примененную разобрать по букварям PHP.

Спустя 23 минуты, 33 секунды (15.09.2009 - 23:52) kirik написал(а):
HIDDENSY smile.gif

Цитата (HIDDENSY @ 15.09.2009 - 15:29)
Надо каждую функцию примененную разобрать по букварям PHP.

чего? иль это не вопрос?)

Спустя 3 минуты, 43 секунды (15.09.2009 - 23:56) HIDDENSY написал(а):
Нет это не вопрос, это мысли вслух о том что буквари нужно читать мне что-бы разобраться как и что.

Спустя 32 минуты (16.09.2009 - 00:28) kirik написал(а):
HIDDENSY
ок) Успехов!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.