Лучший подход для создания облака тегов из входного текста - PullRequest
1 голос
/ 18 июля 2011

Мне было интересно, как лучше всего создать облако тегов из входного текста (пока пользователь печатает его). Например, если пользователь вводит текст истории, содержащий ключевые слова «научная фантастика, технология, эффекты», облако тегов будет сформировано из каждого из этих ключевых слов, упорядоченных по релевантности в соответствии с их частотой в каждой истории. Облако тегов будет отображаться в порядке убывания и с использованием того же размера шрифта, это не алгоритм отображения, а алгоритм поиска, который я должен реализовать. Я использую mysql и php. Должен ли я придерживаться предложения MATCH ... ПРОТИВ? я должен реализовать таблицу тегов?

Подробнее У меня есть MySQL таблица, содержащая много историй. Когда пользователь печатает один из его / ее собственных, я хочу отобразить облако тегов, содержащее самые частые слова, взятые из входного текста, встречающихся в этом наборе историй, которые сохранены в моей БД. Облако тегов будет использоваться только для того, чтобы показать пользователю актуальность слов, которые он / она ввел в своей собственной истории, в соответствии с частотой, с которой они встречаются во всех историях, введенных всеми пользователями.

Ответы [ 2 ]

0 голосов
/ 18 июля 2011

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

  • Непосредственное обновление облака тегов из введенного текста
  • Отправка входного текста на сервер (в режиме реального времени с использованием ajax / comet), который затем сохраняет, вычисляет частоту слова и возвращает данные, из которых вы генерируете облако.

Я бы пошел с первым, используя плагин jQuery, такой как - http://plugins.jquery.com/plugin-tags/tag-cloud

0 голосов
/ 18 июля 2011

Я думаю, что первое, что вам нужно сделать, это более четко определить назначение вашей системы тегов.Вы хотите просто создать теги на основе слов, которые встречаются в тексте чаще всего?Это кажется мне чем-то разработанным с учетом ранжирования поиска.

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

Если первое относится к делу, вам, возможно, не нужно ничего делать, кроме:

  • Разбить текст разделителем, как один пробел explode(' ', $content);
  • Иметь список (возможно, в файле конфигурации или в самом скрипте) слов, которые часто встречаются, которые вы хотитечтобы исключить из себя теги (и, или, это, и т. д.) Вы можете просто отключить их от страниц, как это: http://www.esldesk.com/vocabulary/pronouns, http://www.english -grammar-revolution.com / list-of-conunctions.html

Тогда вам просто нужно решить, сколько раз слово должно встречаться (в процентах или в цифрах), и сохранить эти теги в таблице, которая показывает связь между тегамиs и content.

Чтобы реализовать часть "как пользователь печатает", вам просто нужно использовать немного функциональности jjuery ajax, чтобы постоянно вызывать ваш скрипт, который создает список тегов (то есть при нажатии клавиш).

Другой вариант (лучший пользовательский опыт) будет включать в себя множество одинаковых элементов, но вам придется подумать немного больше.Некоторые вещи, которые я хотел бы рассмотреть:

  • Хотите ли вы ограничиться определенными тегами (возможно, вы не хотите позволять кому-либо создавать новые теги)?
  • Как вы будете действоватьс синонимами
  • Если вы будете поддерживать несколько языков
  • Если вы предпочитаете предлагать существующие теги (которые могут быть близки), а не предлагать новые

Как только выВы полностью определили логику и пользовательский опыт, вы можете вернуться к алгоритму поиска.MATCH и AGAINST - хорошие варианты, но вы можете найти, что простой LIKE сделает это за вас.

Удачи =)

...