Вычисляем плотность слов.
Недавно, во время работы над одним из своих проектов, у меня возникла необходимость определить ключевые слова. Ну да, такая вот парадоксальная ситуация, когда ключевики неизвестны заранее, ну что же тут поделать. В общем, беглый взгляд на выдачу поисковика ничем меня не порадовал. В основном различные on-line сервисы, которые вычисляют плотность ключевых слов и даже фраз. Мне фразы не нужны были, хотелось простого результата, а именно: какие слова сколько раз встречаются в тексте. В то же время, не очень то хотелось прогонять свой уник по неизвестно каким сайтам и сервисам. Вот такая паранойя (будешь тут параноиком, когда речь идет о 250 тысячах знаков без пробелов).
Может, я плохо искал, но достойных программ, способных выполнить необходимые мне не сложные вычисления, я тоже с маху не нашел. И тут посетила меня простая мысль: а что если написать самому необходимый мне код? Тем более, что ничего сверхъестественного считать мне не нужно было. Сказано, сделано. Писать решил на php. Вот что получилось в результате.
<?php
\\ intext.txt – файл, содержащий анализируемый текст.
$f_text=”intext.txt”;
\\ функция для загрузки файла, с анализируемым текстом
function load_content_file($f_text) {
$hh = fopen($f_text, ‘r’);
$ret = fread($hh, filesize($f_text));
fclose($hh);
return $ret;
}
// читаем текст из файла в строку
$string = load_content_file($f_text);
// преобразуем все к нижнему регистру
$string = strtolower($string);
// парсим текст. В результате получаем массив, каждый элемент
//которого – одно слово
preg_match_all(“#\b(\w+)\b#”,$string,$out);
// определяем общее количество слов
$all_word=count($out[1]);
// определяем количество уникальных слов
// в результате получаем массив, каждый элемент которого – это количество
// повторений слова в анализируемом массиве, а ключ – само слово.
$ret = array_count_values($out[1]);
// сортируем массив по убыванию
arsort($ret,SORT_NUMERIC);
// выводим результаты на экран
echo “Всего слов “.$all_word.”<br>”;
foreach ($ret as $key=>$value) {
// каждая строка на экране результатов это:
// слово => количество вхождений : плотность
echo $key.” => “.$value.” : “.round($value/$all_word * 100,2) .”<br>”;
}
?>
Вот такой простенький получился код. Гуру прошу сильно не пинать, поскольку писалось под конкретные нужды. В результате не отфильтровываются различные предлоги, союзы, цифры. Но задача такая и не стояла. Главное, что наглядно видно, какие слова в тексте встречаются чаще всего и вычисляется их плотность. Проанализировав свой текст из 250 тысяч знаков, я довольно быстро выбрал десять ключевиков.
Если кому то пригодится данный код, хоть в оригинальном, хоть в переработанном виде, я буду только рад.
Вот нравится мне, когда люди могут доходчиво и на доступном языке донести свои мысли до читателей. Спасибо огромное. Я получил истинное удовольствие, читая Вас.