Библиотека программиста

28.04.2024 - PHP. Генерация meta name=keywords "на лету"

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

Конечно, многие могут сказать, что поисковики не учитывают мета теги keywords и description, и вовсе незачем голову морочить проблемой подбора ключевых слов, но учитывают или нет, это известно только администраторам поисковых машин. В частности, я недавно проводил эксперимент, в котором участвовало три пары сайтов, на каждой паре сайтов был один и тот же контент, но на одном из сайтов каждой пары были прописаны keywords и description. И что вы думаете, через месяц, все три сайта с keywords и description были выше в выдаче Яндекса, чем их двойники без этих мета тегов. (Примечание: сайты были оптимизированы под абсолютно не конкурентные запросы и не имели бэклинков).

Принцип работы php скрипта, основной задачей которого является “на лету” подбирать к тексту ключевые слова (keywords), заключается в разделении всего текста на слова и занесение их в массив. Из исходного текста сначала удаляются все знаки препинания, затем слова помещаются в массив и каждому слову присваивается число его повторений в тексте. После заполнения массива слова упорядочиваются по количеству повторений, и в качестве результатов берется верхушка массива – 15-25 самых часто употребляемых слов.

А вот и сам исходный код этого php-скрипта для подбора ключевых слов:
PHP - Код

class Counter
{
    var 
$origin_arr;
    var 
$modif_arr;
    var 
$min_word_length 3;
 
function 
explode_str_on_words($text)
{
    
$search = array ("'ё'",
                     
"'<script[^>]*.*?</script>'si",  // Вырезается javascript
                     
"'<[&#092;/&#092;!]*?[^<>]*'si",           // Вырезаются html-тэги
                     
"'([&#092;r&#092;n])[&#092;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",
                     
"'&#(&#092;d+);'e");
    
$replace = array ("е",
                      
" ",
                      
" ",
                      
"&#092;&#092;1 ",
                      
"&#092;" ",
                      " ",
                      " ",
                      " ",
                      " ",
                      chr(161),
                      chr(162),
                      chr(163),
                      chr(169),
                      "
chr(&#092;&#092;1)");
    
$text preg_replace ($search$replace$text);
    
$del_symbols = array(",""."";"":""&#092;"", "#", "&#092;$", "%", "^",
                         
"!""@""`""~""*""-""=""+""&#092;&#092;",
                         
"|""/"">""<""("")""&""?""?""&#092;t",
                         
"&#092;r""&#092;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_arr030);
    
$str "";
    foreach (
$arr as $key=>$val)
    {
       
$str .= $key ", ";
    }
    return 
trim(substr($str0strlen($str)-2));
}
}

Пользоваться данным php классом очень просто, создаете экземпляр класса функцией new а потом вызываете внутреннюю функцию get_keywords(), класса Counter. Вот наглядный пример использования этого класса:

PHP - Код
$word_counter = new Counter();
if (
strlen($content)>50000)
{
    
$keywords $word_counter->get_keywords(substr($content050000));
}
else
{
    
$keywords $word_counter->get_keywords($content);
}


В переменной $content должен содержатся основной текст страницы, для которой создаются ключевые слова. И еще, полученная строка содержит только ключевые слова, без мета тегов. Скачать данный php класс для подбора ключевых слов в zip архиве вы можете здесь.
Опубликовано на сайте: http://www.coders-library.ru
Прямая ссылка: http://www.coders-library.ru/index.php?name=news&op=view&id=236