Генератор ключевых слов по содержимому сайта

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


Projectname:  Automatic Keyword Generator
Version:    0.3
Author:    Ver Pangonilo <smp_AT_itsp.info>
Last modified: 26 July 2006
Copyright (C): 2006 Ver Pangonilo, All Rights Reserved

* GNU General Public License (Version 2, June 1991)
* This program is free software; you can redistribute
* it and/or modify it under the terms of the GNU
* General Public License as published by the Free
* Software Foundation; either version 2 of the License,
* or (at your option) any later version.
* This program is distributed in the hope that it will
* be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU General Public License
* for more details.

This class can generates automatically META Keywords for your
web pages based on the contents of your articles. This will
eliminate the tedious process of thinking what will be the best
keywords that suits your article. The basis of the keyword
generation is the number of iterations any word or phrase
occured within an article.

This automatic keyword generator will create single words,
two word phrase and three word phrases. Single words will be
filtered from a common words list.

Change Log:
0.2 Ver Pangonilo - 22 July 2005
Added user configurable parameters and commented codes
for easier end user understanding.

0.3 Vasilich (vasilich_AT_grafin.kiev.ua) - 26 July 2006
Added encoding parameter to work with UTF texts, min number
of the word/phrase occurrences,

class autokeyword {

//declare variables
//the site contents
var $contents;
var $encoding;
//the generated keywords
var $keywords;
//minimum word length for inclusion into the single word
var $wordLengthMin;
var $wordOccuredMin;
//minimum word length for inclusion into the 2 word
//phrase metakeys
var $word2WordPhraseLengthMin;
var $phrase2WordLengthMinOccur;
//minimum word length for inclusion into the 3 word
//phrase metakeys
var $word3WordPhraseLengthMin;
//minimum phrase length for inclusion into the 2 word
//phrase metakeys
var $phrase2WordLengthMin;
var $phrase3WordLengthMinOccur;
//minimum phrase length for inclusion into the 3 word
//phrase metakeys
var $phrase3WordLengthMin;

function autokeyword($params$encoding)
//get parameters
$this->encoding $encoding;
$this->contents $this->replace_chars($params['content']);

// одиночное слово
$this->wordLengthMin $params['min_word_length'];
$this->wordOccuredMin $params['min_word_occur'];

// фраза из 2х слов
$this->word2WordPhraseLengthMin $params['min_2words_length'];
$this->phrase2WordLengthMin $params['min_2words_phrase_length'];
$this->phrase2WordLengthMinOccur $params['min_2words_phrase_occur'];

// фраза из 3х слов
$this->word3WordPhraseLengthMin $params['min_3words_length'];
$this->phrase3WordLengthMin $params['min_3words_phrase_length'];
$this->phrase3WordLengthMinOccur $params['min_3words_phrase_occur'];


function get_keywords()
$keywords $this->parse_words().$this->parse_2words().$this->parse_3words();
return substr($keywords0, -2);

//turn the site contents into an array
//then replace common html tags.
function replace_chars($content)
//convert all characters to lower case
$content mb_strtolower($content);
//$content = mb_strtolower($content, "UTF-8");
$content strip_tags($content);

$punctuations = array(','')''(''.'"'"'"',
chr(10), chr(13), chr(9));

$content str_replace($punctuations" "$content);
// replace multiple gaps
$content preg_replace('/ {2,}/si'" "$content);

return $content;

//single words META KEYWORDS
function parse_words()
//list of commonly used words
// this can be edited to suit your needs
$common = array("able""about""above""act""add""afraid""after",
//create an array out of the site contents
$s split(" "$this->contents);

$k = array();
//iterate inside the array
foreach( $s as $key=>$val ) {
    //delete single or two letter words and
    //Add it to the list if the word is not
    //contained in the common words list.
    if(mb_strlen(trim($val)) >= $this->wordLengthMin &&
        !in_array(trim($val), $common) && !is_numeric(trim($val)))
       $k[] = trim($val);
//count the words
$k array_count_values($k);
//sort the words from
//highest count to the
$occur_filtered $this->occure_filter($k$this->wordOccuredMin);

$imploded $this->implode(", "$occur_filtered);
//release unused variables

return $imploded;

function parse_2words()
//create an array out of the site contents
$x split(" "$this->contents);
//initilize array

//$y = array();
for ($i=0$i count($x)-1$i++) {
//delete phrases lesser than 5 characters
if( (mb_strlen(trim($x[$i])) >= $this->word2WordPhraseLengthMin ) &&
    (mb_strlen(trim($x[$i+1])) >= $this->word2WordPhraseLengthMin) )
    $y[] = trim($x[$i])." ".trim($x[$i+1]);

//count the 2 word phrases
$y array_count_values($y);

$occur_filtered $this->occure_filter($y$this->phrase2WordLengthMinOccur);
//sort the words from highest count to the lowest.

$imploded $this->implode(", "$occur_filtered);
//release unused variables

return $imploded;

function parse_3words()
//create an array out of the site contents
$a split(" "$this->contents);
//initilize array
$b = array();

for ($i=0$i count($a)-2$i++) {
//delete phrases lesser than 5 characters
if( (mb_strlen(trim($a[$i])) >= $this->word3WordPhraseLengthMin) &&
    (mb_strlen(trim($a[$i+1])) > $this->word3WordPhraseLengthMin) &&
    (mb_strlen(trim($a[$i+2])) > $this->word3WordPhraseLengthMin) &&
    (mb_strlen(trim($a[$i]).trim($a[$i+1]).trim($a[$i+2])) > $this->phrase3WordLengthMin) )
    $b[] = trim($a[$i])." ".trim($a[$i+1])." ".trim($a[$i+2]);

//count the 3 word phrases
$b array_count_values($b);
//sort the words from
//highest count to the
$occur_filtered $this->occure_filter($b$this->phrase3WordLengthMinOccur);

$imploded $this->implode(", "$occur_filtered);
//release unused variables

return $imploded;

function occure_filter($array_count_values$min_occur)
$occur_filtered = array();
foreach ($array_count_values as $word => $occured) {
if ($occured >= $min_occur)
    $occur_filtered[$word] = $occured;

return $occur_filtered;

function implode($gule$array)
$c "";
foreach($array as $key=>$val) 
    @$c .= $key.$gule;
return $c;


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


Календарь приёма объявлений

Небольшой пример из повседневной практики. Организация меняет реквизиты, и они вступят в силу через  пару недель. На сайте идет приём объявлений и объявления принимаются на несколько месяцев в...

Дырка в com_content

Сегодня у товарища, сайт которого находится на старой  Joomla 1.0.3, была сильная нагрузка на сервере, просматривая логи обнаружил не вежливый запрос такого порядка: http://сайт/index2...

Лечим вирус на сайте

  Первоначальный осмотр сайта обнаружил, что у клиента закрыт доступ по фтп, что сузило круг подозреваемых уязвимостей, стало быть отверстие в какомто скрипте движка joomla. Касперский яро...


Снова грянул гром зарежения сайтов новым вирусом  Troj/JSRedir-MH.  И так в коротко по вирусу Troj/JSRedir-MH. Вирус или троян куда интереснее чем свои предшествиники, тепер...

Доработка расширения для рассылки Send Email JK

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

Привет Ie 10 регулярка

И вот и мне пришлось столкнулся с проблемами перехода на win 8 в придачу с ie 10, некоторых постоянных пользователей моих сайтов. На многих сайтах  имеющих раздел по приёму объявлений, использ...

Kunena заменяем ссылку на профиль пользователя

Всем привет, снова снова кунена, получил задание на допиливание популярного форума Kunena, сегодня потребовалось поменять ссылку на профиль пользователя. Это связано с тем, что на сайте стоит социа...

Работает на Kunena - зачем на каждой странице?

  Все у кого стоит форум kunena мешает надпись с двумя ссылкам внизу форума "Работает на Kunena". Сея надпись висит на каждой странице форма, а также страница разработчиков содержит множество вн...

Kunena избавимся от лишних quote

Для тех кто действительно делает сайт для людей, моя следующая заметка. Расскажу вам, как избавиться от лишних quote в постах на форуме kunena. У меня несколько тематических сайтов с нормальной посеща...

Kunena решаем проблему с пропажей аватаров

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


Обработка параметров расширений joomla

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

Кunena крамсаем шаблон

1. В папке \components\com_kunena\template\ваш_шаблон\ находим файл template.xml и вставляем в него такой кусок (чтобы была возможность выбора показывать это поле или нет): <param name="l...

Подключить свои классы и методы в Joomla?

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

3 новых полезных класса в Joomla 2.5

В платформе Joomla 11.3 разработчики добавлил несколько полезных новых классов для разработчиков. Рассмотрю некоторый из них - JGrid (для построения HTML таблиц), JWebClient (для получения информац...

Репозиторий файлов на Joomla средствами Apache

Создадим две вложенные директории /files/files в корне сайта. Если вы пожелаете использовать другие имена директорий, то вам необходимо будет внести соответствующие правки в дальнейшем. ...