Как создать систему тегов, такую ​​как stackoverflow - PullRequest
6 голосов
/ 17 ноября 2010

Я внедряю систему тегов, аналогичную системе тегов StackOverflow, но мне просто интересно, как получить связанные теги и определить вес связей между тегами, такими как список «Связанных тегов» на любой странице тегов, как эта https://stackoverflow.com/questions/tagged/php они определяют вес отношения по совпадению между 2 или более тегами

Как я могу сделать это в PHP / MySQl, чтобы определить наиболее связанные теги для тега "X" и поддерживать все веса в актуальном состоянии по мере того, как пользователи добавляют все больше и больше сообщений / вопросов?

Ответы [ 3 ]

2 голосов
/ 17 ноября 2010

Вы, вероятно, хотите посмотреть статистику для этого:

  1. с тегом X
  2. отметьте все остальные теги Y
  3. посчитайте, как часто Y и X появляются одновременно
  4. разделите на то, как часто Y появляется
  5. ???
  6. Profit !!!

Что касается дополнительной информации на шаге 5: эта информация изменяется очень медленно, поэтому вы действительно можете кэшировать этот материал и воссоздавать его только тогда, когда у вас есть время.

В конце концов вы хотите отношения

conditional_probability(X, Y, P)

Что говорит о том, насколько вероятен (P) тег Y, учитывая X. P был вычислен на шаге 4.

1 голос
/ 17 ноября 2010

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

Вместо сохранения денормализованных весов для всех тегов в базе данных, я кеширую их в своем (Ruby) процессе и перестраиваю их, когда тегидобавлено / удалено или после перезапуска процесса.

Что касается того, как их хранить, вы обычно хотите:

  1. Таблица тегов, связывающая уникальные имена тегов с идентификаторами строк, и
  2. Таблица tags_items, предоставляющая вам n-to-n-отображение между тегами и элементами.

Как только у вас есть это, и когда у вас есть найденный набор элементов на странице результатов, этопростое соединение, уникальное для определения набора «связанных» тегов.

0 голосов
/ 11 апреля 2013

1 Каждый идентификатор сообщения может быть помечен одним или несколькими тегами (PHP + другие теги)

2 Возвращаясь к тому же самому способу, с которым каждый тег связан с идентификатором сообщения

3 Получить идентификатор сообщения Foreachвсе теги, кроме PHP

4 Показывать только те теги, у которых число больше, чем число (скажем, 4000)

Подумайте об этом, этот вопрос был помечен как "Mysql" "Разработка базы данных" "Теги "и" Теги "Видите ли вы, как вы связали PHP с другими тегами.

...