Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
 Аватар для Johnlion
63 / 3 / 1
Регистрация: 11.05.2011
Сообщений: 666

Алгоритм облака тегов

17.03.2014, 00:13. Показов 3476. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, пожалуйста, мучаюсь и никак не могу придумать алгоритм для облака тегов. все, что получилось сделать:
передаю из текстового поля строку, в которой слова разделены пробелом, и делю ее на слова
PHP
1
$arrayOfWords = explode(" ", $_POST['cloudText']);
убираю повторы
PHP
1
$arrayOfUniqueWords = array_unique($arrayOfWords);
Теперь нужно подсчитать сколько раз встречается слово в $_POST['cloudText']. если слово X встречается больше раз, чем слово Y, значит у слова X шрифт будет больше. и в итоге должен записываться в переменную список тегов
HTML5
1
<p class='класс, в котором указан размер шрифта'> СЛОВО </p>
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.03.2014, 00:13
Ответы с готовыми решениями:

Облака тегов
Есть смысл? или так просто примочка.

Есть ли какой то толк от облака тегов на сайте?
вот ...

Эффективность использования облака тегов или модулей подобных "Нас нашли"?
Приветствую. Недавно возник вопрос: насколько эффективно использования облака тегов? Получается это внутренние ссылки, которые ведут на...

26
29 / 29 / 11
Регистрация: 26.07.2013
Сообщений: 160
17.03.2014, 07:56
Как вы будите считать, сколько раз слово повторятся, если перед этим убрали повторы слов?
0
 Аватар для Johnlion
63 / 3 / 1
Регистрация: 11.05.2011
Сообщений: 666
17.03.2014, 17:34  [ТС]
Avery007, вот так
PHP
1
substr_count($_POST['cloudText'], $arrayOfUniqueWords[$i]);
. Только я алгоритм не могу придумать, помогите
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
17.03.2014, 17:42
Достали список слов;
Сделали список уникальным;
Идем в цикле по списку;
Достаем на каждое слово количество совпадений и сохраняем в массив [ слово] = > количество
упорядочиваем массив количества совпадений по значению и получаем массив от самых частых до самых редкий слов
0
 Аватар для Johnlion
63 / 3 / 1
Регистрация: 11.05.2011
Сообщений: 666
17.03.2014, 17:56  [ТС]
Цитата Сообщение от crautcher Посмотреть сообщение
в массив [ слово] = > количество
не совсем понимаю, можно код такого массива?
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
17.03.2014, 17:59
PHP
1
$massiv_kolichestva [  $slovo ] = $kolichestvo_slov_v_stroke;
0
 Аватар для Johnlion
63 / 3 / 1
Регистрация: 11.05.2011
Сообщений: 666
17.03.2014, 18:12  [ТС]
Цитата Сообщение от crautcher Посмотреть сообщение
упорядочиваем массив количества совпадений по значению и получаем массив от самых частых до самых редкий слов
а как мне потом эти слова вывести? если у меня будет просто массив количества повторений, да еще и отсортированный
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
17.03.2014, 18:16
А в ключах нечего не содержится что-ли?
0
 Аватар для Johnlion
63 / 3 / 1
Регистрация: 11.05.2011
Сообщений: 666
17.03.2014, 18:25  [ТС]
crautcher, а как мне их использовать? не соображу пока
0
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
17.03.2014, 18:27
Цитата Сообщение от crautcher Посмотреть сообщение
Достали список слов;
А вот это уже лишнее.
Цитата Сообщение от crautcher Посмотреть сообщение
Сделали список уникальным;
Цитата Сообщение от crautcher Посмотреть сообщение
Идем в цикле по списку;
Суть в том чтоб на этапе обработки мы уже выполнили подсчёт и формирование уникального списка.
1) Обращаемся в таблицу и вытаскиваем все теги.
2) Убираем лишние пробелы оставляя только один и удаляем пробелы перед запятой и после.
3) Разбиваем строку на массив используя разделителем запятую.
4) Проходим циклом по массиву записывая в новый массив ключ как название тега, значение как количество повторений.
PHP
1
2
3
4
foreach ($data as $key => $value)
{
    ++$tags[$key];
}
5) При отображении нам нужно узнать относительную высоту каждого тега. Мы должны узнать степень сжатия, поэтому мы должны отсортировать массив по возрастанию, чтоб в итоге у нас получилось, что самый часто повторяемый элемент самый последний. Именно с ним нам и нужно сравнивать. Для максимального размера шрифта мы возьмём значение 300% и в итоге мы получаем:
PHP
1
2
3
4
5
6
7
8
9
10
11
        asort($tags);
        end($tags);
        $max = current($tags);
        reset($tags);
 
        $result = '';
        foreach ($tags as $key => $val)
        {
            $zoom = ($val / $max) * 200;
            $result .= "<a href='#' style='font-size:{$zoom}%'>{$key}</a>
        }
Вот и всё. Потом просто
PHP
1
 echo $result;
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
17.03.2014, 18:31
PHP
1
2
3
foreach( $massiv_kolichestva as $slovo => $kolichestvo ) {
 echo "привет, я слово '{$slovo}' и я встречаюсь в тексте {$kolichestvo} раз";
}
Добавлено через 2 минуты
Задание:
Цитата Сообщение от Johnlion Посмотреть сообщение
нужно подсчитать сколько раз встречается слово в $_POST['cloudText']. если слово X встречается больше раз, чем слово Y, значит у слова X шрифт будет больше. и в итоге должен записываться в переменную список тегов
Цитата Сообщение от BuPy7 Посмотреть сообщение
на этапе обработки мы уже выполнили подсчёт и формирование уникального списка.
По заданию мы ничего не выполнили.
0
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
17.03.2014, 18:41
crautcher, ЛОЛ.
PHP
1
2
3
4
5
6
foreach ($tags as $key => $val)
{
    if ($x < $y)
    {
        continue;
    }
Или надо оба тега записать? А можно вопрос: "Зачем так надо?".
0
 Аватар для webphp
55 / 53 / 18
Регистрация: 05.08.2013
Сообщений: 327
17.03.2014, 18:41
Johnlion, теги нужно хранить в отдельной таблице и тогда проблем с этим не будет!
0
 Аватар для Johnlion
63 / 3 / 1
Регистрация: 11.05.2011
Сообщений: 666
17.03.2014, 20:17  [ТС]
BuPy7, спасибо за код, попробовал его прикрепить к себе на сайт, но выводит цифры вместо ключей и одинаковым шрифтом 200%
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$cloudString = $_POST['cloudText'];
$cloudStringOneSpace = preg_replace('/ {2,}/', ' ', $cloudString);
$arrayOfWords = explode(" ", $cloudStringOneSpace);
 
        foreach ($arrayOfWords as $key => $value) {
 
            ++$tags[$key];
        }
 
        asort($tags);
        end($tags);
        $max = current($tags);
        reset($tags);
 
        foreach ($tags as $key => $val)
        {
            $zoom = ($val / $max) * 200;
            $siteCode .= "<p style='font-size:" . $zoom . "%'>" . $key . "</p>";
        };
0
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
17.03.2014, 20:40
Johnlion, ну дак и не уддивительно. Нужно же смотреть что пишешь. 7 строка. $key замените на $value.
0
 Аватар для Johnlion
63 / 3 / 1
Регистрация: 11.05.2011
Сообщений: 666
17.03.2014, 21:08  [ТС]
BuPy7, точно, теперь понял а подскажи еще один момент, входные данные: "один два два три три три ". результат на картинке. что-то может с удалением лишних пробелов не так?
Миниатюры
Алгоритм облака тегов  
0
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
17.03.2014, 21:27
PHP
1
$tagsArr = explode(',', preg_replace(array('/(?<!\w)[\s]+|[\s]+(?!\w)/u', '/[\,]+/'), array(' ', ','), $tagsString));
Щас я проверю её. На коленке написал.

Добавлено через 7 минут
Вроде как норм всё.

Добавлено через 5 минут
Если скопировали, то посмотрите ещё раз. Я пофиксил баг.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
17.03.2014, 21:32
Цитата Сообщение от BuPy7 Посмотреть сообщение
PHP
1
preg_replace(array('/(?<!\w)[\s]+|[\s]+(?!\w)/u', '/[\,]+/'), array(',', ','), ....
PHP
1
preg_replace('/(?<=\\w)(?:\\s+?)?,+?\\s+/u', ',', ....
?
Если уж и делать через массив, то если только для удаления "лишних" запятых в начале и конце строки также
PHP
1
preg_replace(array('/(?<=\\w)(?:\\s+?)?,+?\\s+/u', '/\\A,+|,+\\Z/'), array(',', ''), ....
1
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
17.03.2014, 21:36
KOPOJI, Великолепно, маэстро!
0
 Аватар для Johnlion
63 / 3 / 1
Регистрация: 11.05.2011
Сообщений: 666
17.03.2014, 21:42  [ТС]
BuPy7, я не работал с запятыми вообще) посмотрите, пожалуйста, код, что я скинул. я просто слова через пробел ввожу, лишние пробелы если что - надо удалить для этого я preg_replace писал, может там что-то не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.03.2014, 21:42
Помогаю со студенческими работами здесь

Алгоритм поиска тегов
Есть открывающий тег и закрывающий, нужно найти тег индекс вхождения соответсвующий данному в тексте... Например ...

Проверка тегов XML на наличие дочерних тегов
Доброго времени суток. Вот часть файлика которого мне нужно считать... &lt;?xml version=&quot;1.0&quot;...

Система тегов, облако тегов
Здравствуйте. Очень интересно знать как разработать и заставить функционировать &quot;систему тегов&quot;. Честно признаться, даже не знаю...

облака
Есть ли у кого информация, готовые наработки, возможно проекты для студентов касаемо облачных технологий. Нужно примеры клиент и сервер...

Что за облака
Ребята кто ни будь слышал об этом новом проге. от майкрософт


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru