1

Тема: Auto Keyword Generator, если кому нужно.

Не претендуя на эксклюзивность конечно, но почти на всех своих сайтах заюзываю свой генератор кейвордов.
Ниже код, если кому нужен, сохраните в любом РНР файле:

### Функция создает список ключевых слов по тексту, а также краткое описание.
### Входящие параметры:
###   - $text - Сообственно текст для которого хотим получить ключевые слова
###   - $keywords - Дополнительные ключевые слова. Будут добавляться в начало полученных.
###   - $description - Дополнительное описание. Будет добавляться в начало полученного.
###                    (Учтите, описание не более 200 символов, поэтому полученное будет
###                     обрезаться с учетом длинны дополнительного)
###
### Выходные параметры:
###   - $meta['keywords'] - Соответственно ключевые слова
###   - $meta['description'] - и описание
###
### Использование:
###   - $meta=create_meta($text);
###   - $meta=create_meta($text, $keywords);
###   - $meta=create_meta($text, 'дополнительные,ключевые,слова');
###   - $meta=create_meta($text, $keywords, $description);
###   - $meta=create_meta($text, 'дополнительные,ключевые,слова', 'дополнительное,описание');
function create_meta($text, $keywords='', $description='') {
    ### Нормализация текста
    $text=trim(stripslashes(preg_replace('/[\r\n\t]/i', ' ', strip_tags($text))));
    ### Формируем описание из текста, макс.200 за до первого знака пунктуации
    $idx=200;
    if(!empty($description)) {
        $description=trim($description).' ';
        $idx-=strlen($description);
    }
    while(!in_array($text[$idx], array('.', '!', '?')))$idx--;
    $meta['description']=$description.substr($text, 0, $idx+1);

    ### Загружаем таблицу общих слов и удаляем эти слова из текста
    $name='common-words.txt';
    if(file_exists($name)) {
        if($file=fopen($name, 'r')) {
            $data='';
            while(!feof($file)){
                $word=trim(fgets($file));
                if($word[0]=='#')continue;
                $data.=' '.$word;
            }
            fclose($file);
            $data=str_replace(' ', '|', trim($data));
        }
        $text=preg_replace('/\b'.$data.'\b/i', '', $text);
    }

    ### Удаляем из текста все знаки препинаний и пунктуации и преобразуем в массив слов
    $text=split(' ', preg_replace('/[^\w]+/i', ' ', $text)); $data='';
    foreach($text as $key=>$word) if(strlen($word)>4)$data.=' '.strtolower($word);
    $text=split(' ', trim($data)); $size=count($text);
    $arr1=array(); $arr2=array(); $arr3=array();

    ### Строим массив слов отсортированный по частоте вложений в тексте
    for($i=0; $i<$size; $i++) {
        $word=$text[$i];
        if($arr1[$word])$arr1[$word]++; else $arr1[$word]=1;
    }
    arsort($arr1);
    ### Строим массив фраз состоящих из двух слов отсортированный по частоте вложений в тексте
    for($i=0; $i<$size-1; $i++) {
        $word=$text[$i].' '.$text[$i+1];
        if($arr2[$word])$arr2[$word]++; else $arr2[$word]=1; 
    }
    arsort($arr2);
    ### Строим массив фраз состоящих из трех слов отсортированный по частоте вложений в тексте
    for($i=0; $i<$size-2; $i++) {
        $word=$text[$i].' '.$text[$i+1].' '.$text[$i+2];
        if($arr3[$word])$arr3[$word]++; else $arr3[$word]=1;
    }
    arsort($arr3);

    ### Выбираем 15 первых слов с максимальной частотой вложений
    $data=array(); $i=0;
    foreach($arr1 as $word=>$count) {
        $data[$word]=$count;
        if($i++==16)break;
    }
    ### Выбираем 8 первых фраз состоящих из двух слов с максимальной частотой вложений
    $i=0;
    foreach($arr2 as $word=>$count) {
        $data[$word]=$count;
        if($i++==8)break;
    }
    ### Выбираем 4 первых фраз состоящих из трех слов с максимальной частотой вложений
    $i=0;
    foreach($arr3 as $word=>$count) {
        $data[$word]=$count;
        if($i++==4)break;
    }
    arsort($data); $text='';

    ### Переводим массив фраз в текст, опять таки с учетом частот вложений
    foreach($data as $word=>$count) $text.=','.$word; $text=substr($text, 1);
    if(!empty($keywords))$keywords=preg_replace('/,$/i', '', $keywords).',';
    $meta['keywords']=$keywords.$text;

    ### Возвращаем полученный результат
    return $meta;
}

А это образец на файл содержащий общие слова которые нужно выкидывать, сохраните его как файл "common-words.txt" в той же директории где и скрипт:

# Список общих слов для keyword генератора.
# Допускается одно общее слово на линию.
# Список может состоять как из английских так и из русских слов. Влияет только на производительность.
a
the
because
также
нибудь
этого
некоторые
которой
который
наоборот
только
много
некто
нашей
нашего
тогда
после
всего
писали

Усе. Фроде работает быстро, хотя можно и еще пооптимизить. На текст из 1500 слов тратится примерно: 0.1-0.07 секунд времени.
Заюзываю обычно на этапе создания статьи, поэтому время не критично.

Re: Auto Keyword Generator, если кому нужно.

можно подробней про установку?

Re: Auto Keyword Generator, если кому нужно.

этот топик давно надо удалить с форума, так как этот код не работает, и с 15 Sep 2006 13:50:32 до сего дня так ни кто и не отписался про его использование... таких видать и нет...

Отредактировано anz (04 Sep 2007 11:08:40)

Беспокойство - это неправильное употребление воображения.

Re: Auto Keyword Generator, если кому нужно.

anz, этот код отлично работает, но в виде отдельного скрипта. Просто нужно его прикрутить к плагину Meta tags, чтобы на этапе редактирования можно было автоматически заполнять поля результатами ее работы.

Re: Auto Keyword Generator, если кому нужно.

ANT-Soft пишет:

anz, этот код отлично работает, но в виде отдельного скрипта. Просто нужно его прикрутить к плагину Meta tags, чтобы на этапе редактирования можно было автоматически заполнять поля результатами ее работы.

ANT-Soft вот tim   15 Sep 2006 13:50:32 спросил - можно подробней про установку? а в ответ тишина, мне тоже не понятно, я  как знал по всякому пробовал - результата ноль, но не дорос ещё...

Просто нужно его прикрутить к плагину Meta tags

- для меня азбука морзе, а кто знает что код отлично работает, тому почему то трудно рассказать другим КАК его прикрутить...грустно...:( , а лишний раз спросить тоже незя:rolleyes:

Беспокойство - это неправильное употребление воображения.

Re: Auto Keyword Generator, если кому нужно.

anz, пожалуйста, не взваливайте вину автора (Dan Daemon) на меня! Он опубликовал, он пусть и комментирует. В конце концов, у него есть почта, выскажите ему за такой "игнор" судьбы своей "примочки".

Я проверил, работает. У вас и у tim'а не получилось. Об остальных нескольких сотнях пользователей ничего не известно, по крайней мере никто больше не отозвался, что это не работает. А ждать, что все, кто ею воспользовался, начнут благодарить автора - бесполезно. Этого у нас не принято. Так кто виноват?

Эту функцию не нужно устанавливать, она работает сама и именно так, как написал автор.

Re: Auto Keyword Generator, если кому нужно.

ANT-Soft пишет:

anz, пожалуйста, не взваливайте вину автора (Dan Daemon) на меня! Он опубликовал, он пусть и комментирует. В конце концов, у него есть почта, выскажите ему за такой "игнор" судьбы своей "примочки".

Я проверил, работает. У вас и у tim'а не получилось. Об остальных нескольких сотнях пользователей ничего не известно, по крайней мере никто больше не отозвался, что это не работает. А ждать, что все, кто ею воспользовался, начнут благодарить автора - бесполезно. Этого у нас не принято. Так кто виноват?

Эту функцию не нужно устанавливать, она работает сама и именно так, как написал автор.

когда я вырасту, хотябы до 11 лет, я стану Администратором как уважаемый ANT-Soft, и пошлю всех в сад... как меня и учат...

спасибо.

Беспокойство - это неправильное употребление воображения.

Re: Auto Keyword Generator, если кому нужно.

anz, если бы мне давали по рублю за каждый раз, когда называют подростком, я бы уже накопил себе на небольшой островок в Тихом океане. Есть жалобы? Тогда вам сюда: http://strawberry.goodgirl.ru/forum/viewforum.php?id=8, там даже есть отдельная тема, посвященная мне wink И хватит флудить!

От вашего возмущения у вас знаний по PHP не прибавится. И от того, что я скажу, что эта функция должна быть заключена в операторные скобки

<?PHP ... ?>

...а вызвана при помощи конструкции

$meta = create_meta($text, '', '');

...и результат мы сможем увидеть, если напишем

echo $meta['keywords'];
echo $meta['description'];

...конечно при условии, что перед вызовом функции, мы переменной $text присвоим хоть какое-нибудь значение (это в зависимости от того, куда ее вставим), например

$text = $tpl['post']['short-story'];

...вы не станете хоть чуть-чуть сообразительнее. А жаль!

Поймите, это не ликбез по PHP, это форум поддержки Strawberry. Не стоит благодарить.

Re: Auto Keyword Generator, если кому нужно.

ANT-Soft пишет:

1. этот код отлично работает, но в виде отдельного скрипта. Просто нужно его прикрутить к плагину Meta tags, чтобы на этапе редактирования можно было автоматически заполнять поля результатами ее работы.

2. Поймите, это не ликбез по PHP, это форум поддержки Strawberry. Не стоит благодарить.

так как я нахожусь на форуме поддержки Strawberry, то п.1 предполагался изначально, иначе в нем смысла нет, так как анологичных скриптов тысячи...

то что ты подсказал - есть в посте автора, лучше подскажи пожалуйста где изменить код что бы: 

прикрутить к плагину Meta tags, чтобы на этапе редактирования можно было автоматически заполнять поля результатами ее работы

ибо с ним у меня и не работает...
или это ты так просто сказал в теории...

спасибо.

Отредактировано anz (05 Sep 2007 15:05:52)

Беспокойство - это неправильное употребление воображения.

10

Re: Auto Keyword Generator, если кому нужно.

Мне стало интересно. Strawberry 1.1.1 MySQL.
Может есть у кого-нибудь мысли как скрестить скрипт топикстартера с Meta-tags?

11

Re: Auto Keyword Generator, если кому нужно.

Все работает и работает великолепно). Поставил скрипт на Strawberry 1.2.0 с включенными Meta tags.
В addnews.mdu добавьте следующий код:

include_once "autokey.php";
if ($full_story){$meta = create_meta($full_story, '', '');}else{$meta = create_meta($short_story, '', '');}

,где autokey.php - файл с кодом скрипта. Затем найдите строчки:

'metakeywords'    => replace_news('add', $meta_info_keywords),
'metadescription'  => replace_news('add', $meta_info_description),

Замените их на:

'metakeywords'    => replace_news('add', $meta['keywords']),
'metadescription'  => replace_news('add', $meta['description']),

Теперь откройте страничку на которой выводите новости и впишите в заголовок:

<meta name="keywords" content="<?=metainfo('keywords'); ?>">
<meta name="description" content="<?=metainfo('description'); ?>">

Теперь, по идее, все должно работать smile))

P.S. Спасибо автору скрипта за хорошо проделанную работу wink

Отредактировано Mitrandir (11 Jun 2009 16:45:30)

"Бог умер" (с) Ницше
"Ницше умер" (с) Бог

Re: Auto Keyword Generator, если кому нужно.

Не рекомендую использовать текущую версию Strawberry 1.2.0 как конечную. В третьей бете ведутся значительные изменения.

Скрипт интересный. Подумаю над его использованием! smile

3 месяца, 2 недели и 19 часов спустя:

Отписываюсь по работе скрипта.
Добавте в список выкидываемых слов союзы типа "а", "и" или "но", то эти "слова" будут вырезаться из всех слов.
Т.е. вместо "закуска к пиву" будет "зкуск к пву". Вот.
Честно говоря - я сначала офигел от такой русскай язык.
Но потом нашел причину. Она в строке:

            $data=str_replace(' ', '|', trim($data));
        }
        $text=preg_replace('/\b'.$data.'\b/i', '', $text);
Здесь молодость бродит крылато, и старость не клонит голов...
Демо площадка Strawberry 1.2 - заходим и тестируем!

13

Re: Auto Keyword Generator, если кому нужно.

Так и не смог заставить работать на 1.1.1
Стоит WYSIWYG SPAWEDITOR... Может он из-за редактора не может взять текст???
Помогите кто поставил этот скрип у себя и у кого работает.... очень надо!