Автоматический подбор ключевых слов для текста на php

Автоматический подбор ключевых слов для текста на php

При добавлении нового контента на сайт возникает вопрос создания списка ключевых слов для meta тэга.

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

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

<?
class Counter
{
var $origin_arr;
var $modif_arr;
var $min_word_length = 5;
 
function explode_str_on_words($text)
{
 $text = strtolower($text);
 $search = array ("'ё'",
"'<script[^>]*?>.*?</script>'si", // Вырезается javascript
 "'<[/!]*?[^<>]*?>'si", // Вырезаются html-тэги
 "'([rn])[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, 10);
 $str = "";
 foreach ($arr as $key=>$val)
 {
 $str .= $key . ", ";
 }
 return trim(substr($str, 0, strlen($str)-2));
}
}
 
 
$word_counter = new Counter();
if (strlen($content)>50000)
{
 $keywords = $word_counter->get_keywords(substr($content, 0, 50000));
}
else
{
 $keywords = $word_counter->get_keywords($content);
}
echo $keywords;
?>

Вот еще одна функция Получения ключевых слов

function seokeywords($contents,$symbol=5,$words=35){
 $contents = @preg_replace(array("'<[/!]*?[^<>]*?>'si","'([rn])[s]+'si","'&[a-z0-9]{1,6};'si","'( +)'si"),
 array("","1 "," "," "),strip_tags($contents));
 $rearray = array("~","!","@","#","$","%","^","&","*","(",")","_","+",
"`",'"',"№",";",":","?","-","=","|",""","","/",
 "[","]","{","}","'",",",".","<",">","rn","n","t","«","»");
 
 
 $adjectivearray = array("ые","ое","ие","ий","ая","ый","ой","ми","ых","ее","ую","их","ым",
 "как","для","что","или","это","этих",
 "всех","вас","они","оно","еще","когда",
 "где","эта","лишь","уже","вам","нет",
 "если","надо","все","так","его","чем",
 "при","даже","мне","есть","только","очень",
 "сейчас","точно","обычно"
 );
 
 
 
 
 $contents = @str_replace($rearray," ",$contents);
 $keywordcache = @explode(" ",$contents);
 $rearray = array();
 
 
 foreach($keywordcache as $word){
 if(strlen($word)>=$symbol && !is_numeric($word)){
 $adjective = substr($word,-2);
 if(!in_array($adjective,$adjectivearray) && !in_array($word,$adjectivearray)){
 $rearray[$word] = (array_key_exists($word,$rearray)) ? ($rearray[$word] + 1) : 1;
 }
 }
 }
 
 
 @arsort($rearray);
 $keywordcache = @array_slice($rearray,0,$words);
 $keywords = "";
 
 
 foreach($keywordcache as $word=>$count){
 $keywords.= ",".$word;
 }
 
 
 return substr($keywords,1);
}

не плохо ни правда ли?!

Дальше, можно поступить следующим образом: просеять все эти слова по базе заведомо подготовленных ключевиков. И оставить только нужные. У меня такая база создавалась несколько лет вручную. Это база тегов, которыми подкрепляется каждая статья.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх
Пролистать наверх