Создаем “облако тегов” (диаграмму ссылок)
Облако тегов можно по праву назвать одним из традиционных приемов web 2.0. Действительно, этот прием помогает ориентироваться в большом количестве текстовой информации, представленной на страницах вашего веб-проекта.
Для создания диаграммы необходимо проанализировать ключевые слова статьи, провести подсчет слов и изменить размер шрифта для каждого из слов пропорционально частоте использования в тексте статьи.
Итак, у нас есть переменная $text, содержащая некий текст статьи, например, взятый из файла:
<?php
$text = file_get_contents(‘article.txt’);
?>
Для начала, создадим массив, элементами которого будут отдельные слова, входящие в этот текст (в качестве разделителя используем пробел):
<?php
$words = split(‘ ‘, $text);
?>
Теперь нам необходимо в цикле подсчитать вес каждого элемента массива (слова) в общей массе. Для этой цели нам понадобится служебный ассоциированный массив $word_infos, в который мы будем помещать слова в качестве индекса, и их количество в тексте в качестве значения.
<?php
$word_info = array(); // инициализируем массив
?><?php
foreach($words as $word)
{
$word = strtolower($word); // преобразуем слово в нижний регистр
if(strlen($word) > 1) // если длина слова более одного символа
{
if( ! array_key_exists($word, $word_info)) // если такого элемента нет в служебном массиве
$word_info[$word] = 0; // то создаем его со значением ноль$word_info[$word] += 1; // увеличиваем на 1 кол-во этого слова в массиве
}
}
?>
Теперь найдем наиболее и наименее часто встречающиеся в тексте слова.
<?php
// создадим заведомо широкий “коридор” чисел
$max = -1000000;
$min = 1000000;
foreach(array_keys($word_info) as $word)
{
if($word_info[$word] > $max)
$max = $word_info[$word];
if($word_info[$word] < $min)
$min = $word_info[$word];
}
$ves = 18.0 / ($max – $min); // определяем “удельный вес” слова в тексте
?>
И выводим в браузер
<div style=”width:500px”>
<?php
$slova = array_keys($word_info);
sort($slova);foreach($slova as $word)
{
$font_size = (int)(11+($word_info[$word] * $ves));
echo “<a href=http://yoursite.ru?q=$word style=\”font-size:$font_size\”>$word</a> “;
}
?>
</div>
Все готово. Как всегда, ждем ваших вопросов и комментариев




июля 6, 2008 at 16:46
Отличная статья. Только есть одно замечание: при разбиении статьи на слова надо бы поработать с регуляркой и поубирать все знаки препинания, иначе подсчёт слов будет не совсем точным.
июля 7, 2008 at 16:59
Согласен. Подготовлю урок по регулярным выражениям…
октября 24, 2008 at 12:17
а как сделать чтобы выводилось только 10 популярных тегов, а не все слова которые есть в текстовике?
февраля 25, 2010 at 11:13
Ошибка при выводе – надо так
arsort($word_info);
foreach($word_info as $word => $val)
{
$text_filt .= $word.” “;
}
С размерами шрифтов соотв, мне просто не надо было
Строка для проверки – раз два два три три три четыре
февраля 26, 2010 at 04:57
Сорри, задача другая у меня, не совсем прав
Добавить комментарий