Функция получения description


Из тех же запасов. Функция для вычисления в тексте предложения с наибольшей плотностью ключевых слов и минимальной длинной. Алгоритм и реализация страшны (слабонервным программистам не смотреть), но всё работает.

function description($text) 
{
$key=keyword($text,5,10);
$desk="";$len=0;$k=0;
 
if(preg_match_all("/([А-Я][А-Яа-я:;\-?!, ]+\.)/",$text,$word))
{
	for ($i=0; $i< count($word[1]); $i++)
	{
		$desk[$i]=0;
		for ($j=0; $j< count($key); $j++)
		{
			if (substr_count($word[1][$i], $key[$j])>0){$desk[$i]=$desk[$i]+1;}
		}
	}
 
	arsort($desk);
 
	foreach ($desk as $key => $value)
	{
		if($value!=0){$k++;$len=$len+strlen($word[1][$key]);}
	}
 
	foreach ($desk as $key => $value)
	{
		if($value!=0&&strlen($word[1][$key])<($len/$k)){return $word[1][$key];}
	}
}
return false;
}
 
function keyword($text,$lenkey,$kolkey) 
{
$text=strtolower(strip_tags($text));//удаляем таги и все в нижний регистр
preg_match_all("/[а-я]{".$lenkey.",}+/is",$text,$word);
$return=array_flip(array_count_values ($word[0]));//получаем слова и частоту, меняем местами ключ-значение
krsort($return);//сортируем по убыванию
$return = array_slice ($return, 0,$kolkey);//отрезаем верхушку массива
return $return;
}
 
echo description($text);//вывод

Метки:

4 комментариев на “Функция получения description”

  1. aldo пишет:

    И работает? Прога ваша

  2. Administrator Bitman пишет:

    Нет конечно. Рабочих кусков кода тут не держим :)

  3. sone пишет:

    Хм, интересно, недавно как раз подобное изобретал, нужно было сгенерить теги для текста. А вот про титл не подумал :) Наверно прикручу

  4. Administrator Bitman пишет:

    Прикручивайте.
    У меня есть ещё более “навороченное” решение. В нём используется нормализация ключевых слов и поиск описания текста идет по плотности-длинне с учётом возможных словоформ. Но в таком виде всё намного проще.

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

CAPTCHA image