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

К примеру мы спарсили объявление с доски, в нем продается Apple Iphone 4s, подержанный. Небольшой текст описания с характеристиками и цена.

Из этого текста необходимо выделить ключевые слова. Заполнять их при автоматическом парсинге будет накладно. Поэтому нужно использовать скрипты для выборки ключевых слов.

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

Когда-то давно, для разработки сайтов я использовал Danneo CMS. Так вот, в ней была великолепная функция выделения ключевых слов в тексте. Только ради этого, скачал новую версию Danneo, она кстати обновилась до версии 0.5.5 

 

Вот эта функиця

function seokeywords($contents,$symbol=5,$words=35){
	$contents = @preg_replace(array("'<[\/\!]*?[^<>]*?>'si","'([\r\n])[\s]+'si","'&[a-z0-9]{1,6};'si","'( +)'si"),
	array("","\\1 "," "," "),strip_tags($contents));
	$rearray = array("~","!","@","#","$","%","^","&","*","(",")","_","+",
		                 "`",'"',"№",";",":","?","-","=","|","\"","\\","/",
		                 "[","]","{","}","'",",",".","<",">","\r\n","\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);
}

 

 из выше набранного текста функция выдает вот такой набор 

 

array,rearray,contents,keywordcache,слова,keywords,слов,adjectivearray,symbol,replace,words,этого,вот,

Danneo,тексте,функция,нужно,ключевых,foreach,текста,ключевые,substr,необходимо,adjective,выдает,

была,великолепная,выделения,скачал,ради,Только,ней,набранного,набор,давно

 

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

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

Так по ключевым словам можно легко восстановить информацию о статье. Т.е. поисковик будет иметь конкретное представление о том, что содержим Ваша страница. Подобно тому, как service812.ru  восстанавливает данные с Вашего винчестера, по крупицам и фрагментам. 

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

Комментарии  

Guest
# Guest 04.05.2013 18:32
Спасибо! Блин, месяца на 2 пораньше бы опубликовал, я был бы рад. А так - уже сам написал. Писал, кстати, с использованием стеммера Портера, чтобы одинаковые слова с разными окончаниями не залезли в список
Leroy
# Leroy 05.05.2013 00:03
может выложите тут свой вариант решения?!
zzyxel
# zzyxel 12.04.2019 11:33
Не подскажите, с UTF-8 работает нормально?