![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
137 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 15.9.2007 Репутация: нет Всего: нет |
Добрый утро/день/вечер/ночер...
Вобщем есть по сути аналог башорга(bash.org.ru). При добавлении новой историю(или цитату) юзер вводит ещё и тэги... ну если не юзер так модер. Тэги пишутся в туже самую таблицу что и вся инфа о истории. Так вот, подскажите пожалуйста, как лучше реализовать это самое облако тэгов, как быстрее осуществлять поистк по нужному тэгу, и тд. Исходники не обязательны, просто принцип сам. |
|||
|
||||
Alukard |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 14.11.2006 Репутация: нет Всего: нет |
Да ну как, впринципе, можно записывать в БД теги, введенные пользователем к каждой цитате, потом при поиске по тегам считывать из в массив, и искать через функцию in_array(), хотя это пипец нерациональный способ...лучше уже в запросе к БД выбирать те цитаты, в которых есть тег...хм...не помню точно , но что-то типа
Тока не помню, звездочки ли обозначают любые символы или проценты... --------------------
Блог блогу рознь: Алукардные РецептыPHP, Операционные системы, Россия & США...etc. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
ну, ввод тега, как я понимаю, не проблема.
между множеством "цитат"(или как там у тебя блоки называются) и множеством тегов отношение многие-ко-многим, верно? вот так и хранить: таблица цитат таблица тегов таблица связей-отношений "тег-цитата" -- Это, как мне кажется, не проблема. Проблема в другом - в коррекции. По всей видимости надо будет предусмотреть хотя бы простейший грамматический анализ(и коррекцию). Причина: сложность русского языка(да, и не только русского..) приводит к тому, что одинаковые по смыслу слова по-разному будут трактоваться компьютером: приставки, суффиксы и(что самое главное) окончания не шибко влиюят на смысл(а то и вовсе не влияют), но если игнорировать их, то поиск по тегу "Василий" и "Василия" может отличаться. В принципе, при поиске можно искать по максимально короткому варианту(например, по "Васил" или даже "Вас"), но это приведет к значительному увеличению количества вариантов поиска. Можно пойти двумя путями: возложить "коррекцию" тегов на пользователя или на модератора. Кроме того, можно автоматизировать коррекцию, или не автоматизировать. Неавтоматизированная коррекция пользователем: человеку рекомендуется при определении тегов использовать максимально длинную и максимально неизменную часть слова("Василий" -> "Васил" или "шизоидальный" -> "шизо"). Недостаток - не позволяет корректировать опечатки и грамматические ошибки: ошибочно введенный тег будет обрабатываться в отдельности от правильно введенного. Достоинство - простота реализации. Вся "автоматика" реализуется клиентом. Неавтоматизированная модерация предполагает наличие человека, который будет просматривать все добавленные теги, которые пока отсуствуют в базе. Человек будет либо сохранять тег в БД, либо корректировать тег так, чтоб он совпал с уже имеющимся в БД. Кроме того, желательно хранить варианты этих замен, так чтоб впоследствии замена "Василия" -> "Василий" выполнялась автоматически. Недостаток: метод по первых порах предполагает неслабую работу человека-модератора. Достоинства: с накопленной базой знаний система будет эффективнее любой полностью автоматической системы. Автоматизированная коррекция и автоматизированная модерация предполагают некоторый анализ вводимых тегов и уже имеющийся БД тегов. К примеру, с использованием расстояния Левештейна - что поможет как при модерации(модератор сразу получит список наиболее близкиз к тегу, но уже имеющихся в БД записей), так и при вводе пользователем напрямую(например, список "возможно, вы имели в виду...") Конечно, возможить на конечного пользователя задачу выбора тега - самое простое решение, но если система предполагает автоматизированную обработку по тегам(ну, я откуда знаю - вдруг у тебя на самом деле не система цитат, а система документооборота?), то лучше этот процесс контролировать(модерировать). Добавлено через 56 секунд прошу прощения, за проведенную мною "разминку ума" ![]() |
|||
|
||||
137 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 15.9.2007 Репутация: нет Всего: нет |
2skyboy:
Спасибо, грамотно разложил всё. Только я забыл указать что все истории сначала попадают на модерацию, поэтому возложить корецию тегов на модера не проблема. |
|||
|
||||
137 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 15.9.2007 Репутация: нет Всего: нет |
теперь не пойму как искать по истории помеченый какимто тэгом(
стелал так: 2 таблицы: в одной истории где есть поле с тэгами вида tag1;tag2;... а в друго тэги и количество используемости каждого... и ещё... вопросто тупой, но как через урл передавать русские буквы?) и как под это настроить mod_rewrite... |
|||
|
||||
KonstRuctor |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 31.3.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
Интересная тема.
У меня тоже есть идея приобщиться к модному "ОБЛАКУ". Есть, к примеру, таблица mysql:
Так вот, при добавлении статьи автор (модератор, админ) добавляет ключевые слова через запятую. Ну, само собой, статей много, ключевых слов еще больше. Ключевые слова обычно пишутся в единственном числе (если существительное). Сейчас работаю над реализацией идеи создания "облака" ключевых слов. Пока не преуспел, жду идей, если появятся -- делитесь ! ![]() |
|||
|
||||
Fulminator |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 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_поста. бр.. вроде понятно? ну вообщем это все я сделал так. очень просто можно изменить в будущем табличку с тегами, добавить какой-нибудь параметр который будет определять их размер. посчитать насколько велик этот параметр достаточно просто. но я нефига не уверен если это правильно. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
вполне подойдет. с точки зрения гибкости - самое оно. это называется нормализацией - когда независимые друг от друга данные(теги и посты) хранятся отдельно друг от друга и от связей между собой(теги + посты). скорость и простота реализации сортировки или фильтрации высока. единственное но: нормализация - это не панацея. в некоторых случаях от дополнительных таблиц в объединениях в запросе тормозов больше, чем от парсинга поля, где через запятую перечислены некоторые поля. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |