При добавлении нового контента на сайт возникает вопрос создания списка ключевых слов для 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);
}
не плохо ни правда ли?!
Дальше, можно поступить следующим образом: просеять все эти слова по базе заведомо подготовленных ключевиков. И оставить только нужные. У меня такая база создавалась несколько лет вручную. Это база тегов, которыми подкрепляется каждая статья.