Forum Webscript.Ru

Программирование => PHP => Тема начата: biblos от 06 Марта 2002, 00:43:44

Название: Алгоритм, подсчота количества повторений слов в тексте
Отправлено: biblos от 06 Марта 2002, 00:43:44
Подскажыте пожалуйста, алгоритм анализа текста, который  генирирует ключевые слова релевантные тексту.

Наиболее простое решение - подсчитать сколько раз повторяется каждое слово и принять за ключевые N наиболее популярных.

А есть другие идеи или готовие решение?
Название: Алгоритм подсчета количества повторений слов в тексте
Отправлено: Daiz13 от 06 Марта 2002, 10:02:49
Такой примерчик:
в формочку вставляем текст, и получаем отсортированый масив



function is_relevant($var) {
if ( (!empty($var) && (strlen($var)>4) )  )  return 1;
 else return 0;
 }

function lowercase_cyr($source_text)
{
 return strtr($source_text,\'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯЇІЄ\',\'абвгдеёжзийклмнопрстуфхцчшщьыъэюяїіє\');
}

if (!empty($target)) {
$dest="http://127.0.0.1/".$target;
$fp = @fopen ($dest, \'r\');
if ($fp) {
   while (! feof ($fp))  {$content .= fgets ($fp, 4096);}
   fclose($fp);
}

$words=preg_split("\'\\s+\'i"," {$content} ");
sort($words);
$relevant=array();
$rel=array();
for ($i=1;$i      if (is_relevant($words[$i])) {
      $word=$words[$i];
      $word=strtr($words[$i],"“”«».!«,?","        ");
      $word = eregi_replace ("[[:digit:][:punct:][:space:][:alpha:]]","",$word);
      $word=substr($word, 0,-1);
      $word=lowercase_cyr($word);
      if (is_relevant($word))   $rel[] =$word;
      }
}

$relevant = array_count_values($rel);
arsort($relevant);
}
echo "
>>\\">

";
echo "

\\n";
print_r($relevant);
echo "\\n


\\n";

?>
Название: Алгоритм подсчета количества повторений слов в тексте
Отправлено: Daiz13 от 06 Марта 2002, 10:04:11
ой забыл, там не текст а урл писать надо...
Название: Алгоритм подсчета количества повторений слов в тексте
Отправлено: biblos от 06 Марта 2002, 13:29:43
A вот например tak:


$text = \'Searches subject for all matches to the regular expression given in pattern and puts them in matches in the order specified by order.
After the first match is found, the subsequent searches are continued on from end of the last match.
order can be one of two things:\';

$search_words = array (\'match\', \'search\', \'order\', \'the\');
$result = array();

foreach ($search_words as $word)
{
   preg_match_all (\'/(?im)\'.$word.\'/\', $text, $matches);
   $result[$word] = sizeof ($matches[0]);
}

echo \'
\'; 
print_r ($result);
echo \'
\';
Название: Алгоритм подсчета количества повторений слов в тексте
Отправлено: от 06 Марта 2002, 18:58:32
Закон Зипфа.

За ключевые надо принимать не самые часто встречающиеся слова, а те, которые в середине списка. Иначе там одни предлоги и союзы окажутся.
Название: Алгоритм подсчета количества повторений слов в тексте
Отправлено: Dm от 06 Марта 2002, 19:22:51
это надо на Янедекс (его разработчиков) нападать с такими вопросами. ;)
кстати, в Mnogosearch уже, имхо, созданы все алгоритмы.
Зачем переизобретать велосипед?
Название: Алгоритм подсчета количества повторений слов в тексте
Отправлено: biblos от 06 Марта 2002, 21:11:10
Быть может Вы немного не поняли меня, я имел ввиду генерацию ключевых слов, релевантных контексту данной страницы .
Название: Алгоритм подсчета количества повторений слов в тексте
Отправлено: Dm от 06 Марта 2002, 22:46:32
А готовая поисковая система mnogosearch не подходит?