【问题标题】:How-to build tagging system like stackoverflow如何构建像 stackoverflow 这样的标记系统
【发布时间】:2011-05-11 06:48:40
【问题描述】:

我正在实现一个类似于 StackOverflow 标签系统的标签系统,但我只是想知道如何获取相关标签并定义标签之间的关系权重,如任何标签页面中的“相关标签”列表,如 https://stackoverflow.com/questions/tagged/php 他们通过2个或多个标签之间的共现来定义关系权重

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

【问题讨论】:

    标签: php mysql database-design tags tagging


    【解决方案1】:

    您可能想为此查看统计数据:

    1. 给定一个标签 X
    2. 检查所有其他标签 Y
    3. 计算 Y 和 X 同时出现的频率
    4. 除以 Y 出现的频率
    5. ???
    6. 利润!!!

    至于第 5 步的更多信息:这些信息变化非常缓慢,因此您可以真正缓存这些东西,只有在有时间时才重新创建它。

    你到底想要的是一种关系

    conditional_probability(X, Y, P)
    

    在给定 X 的情况下,这告诉您 (P) 标记 Y 的可能性有多大。P 是在步骤 4 中计算出来的。

    【讨论】:

    • 我认为您应该在第五步中更加明确。 ;)
    • 我打算把它写成一个 SQL 查询,但是看看这个网站上的问题数量(因此,标签引用),我怀疑每次有人想问一个问题时,它都会产生这么多的计数和组。毕竟,这些信息的阅读次数多于修改次数。
    【解决方案2】:

    我将此博客条目用于calculating relative tag size within a cloud。您可以在整个罐头或特定搜索结果上使用此算法。

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

    至于如何存储,你一般想:

    1. 标签表将唯一标签名称与行 ID 相关联,并且
    2. tags_items 表为您提供标签和项目之间的 n 对 n 映射。

    一旦你有了它,并且一旦你在结果页面上找到了一组项目,它就是一个简单的连接并且是找出“相关”标签集的唯一方法。

    【讨论】:

      【解决方案3】:

      1 每个post id都可以用一个或多个标签(PHP +其他标签)进行标记

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

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

      4 仅显示计数超过特定数字(例如 4000)的那些

      想一想这个问题已经被标记为“Mysql”“Database-design”“Tags”和“Tagging”你看看你是如何将PHP与其他标签相关联的。

      【讨论】:

        猜你喜欢
        • 2012-01-13
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 2012-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多