如何构建像stackoverflow这样的标记系统

时间:2010-11-17 07:37:13

标签: php mysql database-design tags tagging

我正在实现类似于StackOverflow标记系统的标记系统,但我只是想知道如何获取相关标记并定义标记之间的关系权重,如任何标记页面中的“相关标记”列表,如{{3}它们通过2个或更多标签之间的共现来定义关系权重

我如何在PHP / MySQl中为标记“X”定义最相关的标记,并在用户添加越来越多的帖子/问题时保持所有权重最新?

3 个答案:

答案 0 :(得分:2)

您可能希望查看统计信息:

  1. 给出标签X
  2. 检查所有其他标签Y
  3. 计算Y和X同时出现的频率
  4. 除以Y显示的频率
  5. ???
  6. 利润!!!
  7. 关于第5步的更多信息:此信息的变化非常缓慢,因此您可以真正缓存这些内容,只有在有时间时才重新创建。

    你最终想要的是一种关系

    conditional_probability(X, Y, P)
    

    在给出X的情况下,它告诉您可能的(P)标签Y是多少.P在步骤4中计算。

答案 1 :(得分:1)

我在calculating relative tag size within a cloud使用了此博客条目。您可以在整个can或特定找到的集合上使用此算法。

我没有为数据库中的所有标记存储非规范化权重,而是将它们缓存在我的(Ruby)进程中,并在添加/删除标记或重新启动进程时重建它们。

至于如何存储它们,通常需要:

  1. 将唯一标记名称与行ID相关联的标记表,以及
  2. 一个tags_items表,为您提供标签和项目之间的n对n映射。
  3. 一旦你拥有了它,并且一旦在结果页面上找到了一组项目,它就是一个简单的连接,并且可以找到一组“相关”标签。

答案 2 :(得分:0)

1每个帖子ID都可以用一个或多个标签(PHP +其他标签)标记

2以相同的方式返回每个标记的关联帖子ID

3 Foreach post id获取PHP以外的所有标签

4仅显示数量超过特定数量(比如4000)的那些

考虑一下这个问题已被标记为“Mysql”“数据库设计”“标签”和“标记”您是否了解如何将PHP与其他标签相关联。