Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помощь в создании "облака тэгов", Подскажите сам прицип...плз 
:(
    Опции темы
137
Дата 18.11.2007, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 15.9.2007

Репутация: нет
Всего: нет



Добрый утро/день/вечер/ночер...

Вобщем есть по сути аналог башорга(bash.org.ru).
При добавлении новой историю(или цитату) юзер вводит ещё и тэги... ну если не юзер так модер.
Тэги пишутся в туже самую таблицу что и вся инфа о истории.
Так вот, подскажите пожалуйста, как лучше реализовать это самое облако тэгов, как быстрее осуществлять поистк по нужному тэгу, и тд.
Исходники не обязательны, просто принцип сам.
PM MAIL   Вверх
Alukard
Дата 19.11.2007, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 14.11.2006

Репутация: нет
Всего: нет



Да ну как, впринципе, можно записывать в БД теги, введенные пользователем к каждой цитате, потом при поиске по тегам считывать из в массив, и искать через функцию in_array(), хотя это пипец нерациональный способ...лучше уже в запросе к БД выбирать те цитаты, в которых есть тег...хм...не помню точно , но что-то типа
Код

SELECT * FROM table WHERE tags=*$tags*;


Тока не помню, звездочки ли обозначают любые символы или проценты...
--------------------
Блог блогу рознь: Алукардные РецептыPHP, Операционные системы, Россия & США...etc.
PM MAIL   Вверх
skyboy
Дата 19.11.2007, 02:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



ну, ввод тега, как я понимаю, не проблема.
между множеством "цитат"(или как там у тебя блоки называются) и множеством тегов отношение многие-ко-многим, верно?
вот так и хранить: 
таблица цитат
таблица тегов
таблица связей-отношений "тег-цитата"
--
Это, как мне кажется, не проблема.
Проблема в другом  - в коррекции.
По всей видимости надо будет предусмотреть хотя бы простейший грамматический анализ(и коррекцию).
Причина: сложность русского языка(да, и не только русского..) приводит к тому, что одинаковые по смыслу слова по-разному будут трактоваться компьютером: приставки, суффиксы и(что самое главное) окончания не шибко влиюят на смысл(а то и вовсе не влияют), но если игнорировать их, то поиск по тегу "Василий" и "Василия" может отличаться. 
В принципе, при поиске можно искать по максимально короткому варианту(например, по "Васил" или даже "Вас"), но это приведет к значительному увеличению количества вариантов поиска.
Можно пойти двумя путями: возложить "коррекцию" тегов на пользователя или на модератора.
Кроме того, можно автоматизировать коррекцию, или не автоматизировать.
Неавтоматизированная коррекция пользователем: человеку рекомендуется при определении тегов использовать максимально длинную и максимально неизменную часть слова("Василий" -> "Васил" или "шизоидальный" -> "шизо"). 
Недостаток - не позволяет корректировать опечатки и грамматические ошибки: ошибочно введенный тег будет обрабатываться в отдельности от правильно введенного.
Достоинство - простота реализации. Вся "автоматика" реализуется клиентом.
Неавтоматизированная модерация предполагает наличие человека, который будет просматривать все добавленные теги, которые пока отсуствуют в базе. Человек будет либо сохранять тег в БД, либо корректировать тег так, чтоб он совпал с уже имеющимся в БД. Кроме того, желательно хранить варианты этих замен, так чтоб впоследствии замена "Василия" -> "Василий" выполнялась автоматически.
Недостаток: метод по первых порах предполагает неслабую работу человека-модератора.
Достоинства: с накопленной базой знаний система будет эффективнее любой полностью автоматической системы.
Автоматизированная коррекция и автоматизированная модерация предполагают некоторый анализ вводимых тегов и уже имеющийся БД тегов. К примеру, с использованием расстояния Левештейна - что поможет как при модерации(модератор сразу получит список наиболее близкиз к тегу, но уже имеющихся в БД записей), так и при вводе пользователем напрямую(например, список "возможно, вы имели в виду...")

Конечно, возможить на конечного пользователя задачу выбора тега - самое простое решение, но если система предполагает автоматизированную обработку по тегам(ну, я откуда знаю - вдруг у тебя на самом деле не система цитат, а система документооборота?), то лучше этот процесс контролировать(модерировать).

Добавлено через 56 секунд
прошу прощения, за проведенную мною "разминку ума" smile
PM MAIL   Вверх
137
Дата 19.11.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 15.9.2007

Репутация: нет
Всего: нет



2skyboy:
Спасибо, грамотно разложил всё. Только я забыл указать что все истории сначала попадают на модерацию, поэтому возложить корецию тегов на модера не проблема.
PM MAIL   Вверх
137
Дата 21.11.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 15.9.2007

Репутация: нет
Всего: нет



теперь не пойму как искать по истории помеченый какимто тэгом(

стелал так:
2 таблицы: в одной истории где есть поле с тэгами вида tag1;tag2;... 
а в друго тэги и количество используемости каждого...

и ещё... вопросто тупой, но как через урл передавать русские буквы?) и как под это настроить mod_rewrite...
PM MAIL   Вверх
KonstRuctor
Дата 21.11.2007, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 31.3.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: нет



Интересная тема.
У меня тоже есть идея приобщиться к модному "ОБЛАКУ".
Есть, к примеру, таблица mysql:
Код

id | article_name | article_about | article | keywords

Так вот, при добавлении статьи автор (модератор, админ) добавляет ключевые слова через запятую.
Ну, само собой, статей много, ключевых слов еще больше.
Ключевые слова обычно пишутся в единственном числе (если существительное).
Сейчас работаю над реализацией идеи создания "облака" ключевых слов.
Пока не преуспел, жду идей, если появятся -- делитесь ! smile
PM MAIL WWW ICQ   Вверх
Fulminator
Дата 22.11.2007, 00:56 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.2.2006
Где: Молдова

Репутация: нет
Всего: нет



ну вот и я столкнулся с этим. я не очень хороший php-кодер и тем более не разбираюсь в mysql. пока мне в голову пришел один способ.

таблица posts : post_id, post, title.
таблица tags2posts: id, tag_id,post_id
таблица tags: tag_id,tag_name

далее так: добавляется пост, помеченный одним или несколькими тегами. отсылается запрос в базу к таблице tags, где проверяется существуют ли все теги. если появился новый он добавляется в таблицу. также добавляется сам пост в таблицу posts. далее получаем все нужные идентификаторы(поста и использованных тегов). они добавляются в таблицу tags2posts. к примеру пост 1 - тег 0, пост 1 - тег 1, пост 1 - тег 2 и так далее. 

теперь на руках вся нужная информация для того, чтобы например вывести все теги - это делается простым запросом select*from tags. и вуаля. строим ссылку таким образом somescript.php?teg_id=$row['tag_id'] - где $row - это массив с результатом запроса. а somescript - скрипт который будет выводить все записи помеченные тегом с этим id. это просто select post_id from tags2posts where tag_id=$_GET['tag_id'] и теперь нужно просто выбрать все посты с полученными id.

еще один момент, это когда будут выводиться посты. нужно описать какими тегами каждый из них помечен. для этого можно написать простенькую функцию, которая будет выполнять примерно следующий запрос: SELECT tags.tag_name FROM tags, tags2posts WHERE tags.tag_id = tags2posts.tag_id AND ltags2posts.post_id = ID_поста. 

бр.. вроде понятно? ну вообщем это все я сделал так. очень просто можно изменить в будущем табличку с тегами, добавить какой-нибудь параметр который будет определять их размер. посчитать насколько велик этот параметр достаточно просто. 
но я нефига не уверен если это правильно.
PM MAIL   Вверх
skyboy
Дата 22.11.2007, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Fulminator @  21.11.2007,  23:56 Найти цитируемый пост)
но я нефига не уверен если это правильно. 

вполне подойдет. с точки зрения гибкости - самое оно. это называется нормализацией - когда независимые друг от друга данные(теги и посты) хранятся отдельно друг от друга и от связей между собой(теги + посты). скорость и простота реализации сортировки или фильтрации высока. единственное но: нормализация - это не панацея. в некоторых случаях от дополнительных таблиц в объединениях в запросе тормозов больше, чем от парсинга поля, где через запятую перечислены некоторые поля.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0756 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.