Из тех же запасов. Функция для вычисления в тексте предложения с наибольшей плотностью ключевых слов и минимальной длинной. Алгоритм и реализация страшны (слабонервным программистам не смотреть), но всё работает.
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);//вывод
Метки: descripton
И работает? Прога ваша
Нет конечно. Рабочих кусков кода тут не держим
Хм, интересно, недавно как раз подобное изобретал, нужно было сгенерить теги для текста. А вот про титл не подумал
Наверно прикручу
Прикручивайте.
У меня есть ещё более “навороченное” решение. В нём используется нормализация ключевых слов и поиск описания текста идет по плотности-длинне с учётом возможных словоформ. Но в таком виде всё намного проще.