2010-11-17 116 views
6

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

我如何在PHP/MySQl中执行此操作来为标签“X”定义最相关的标签并将所有权重保持为用户添加越来越多的帖子/问题的日期?

回答

2

你可能想看看统计数据如下:

  1. 给予标记X
  2. 检查所有其他标签Ÿ
  3. 计数X多久Y和显示,同时
  4. 除以Y显示的频率
  5. ???
  6. 利润!

至于步骤5的更多信息:这些信息只是变化很慢,所以你可以真正缓存这些东西,只有当你有时间时才能重新创建它。

你想到底是什么关系

conditional_probability(X, Y, P) 

它告诉你如何可能(P)标签Y的,给予X. p在步骤4计算

+5

我想你应该在第五步中更加明确。 ;) – Bobby 2010-11-17 07:43:12

+0

我会写这个作为一个SQL查询,但看看这个网站上的问题的数量(因此,标记引用),我怀疑每次有人想问一个问题时,它会产生如此多的计数和组。毕竟,这些信息经常被读取而不是被修改。 – AlexanderMP 2010-11-17 07:45:10

1

我用这个博客输入calculating relative tag size within a cloud。你可以在整个可能或特定的发现集上使用这种算法。

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

至于如何存放,一般希望:

  1. 一个标签表相关联与行ID唯一的标签名称,
  2. 一个tags_items表为您提供您的N对N的映射标签和项目。

一旦你的,一旦你有一个发现组项目的结果页面上,这是一个简单的加入和独特找出一套“相关”标签。

0

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

2让我们回到每个标签都有相关的帖子ID

3的foreach帖子ID得到所有标签等以同样的方式比PHP

4只显示那些具有数比prticular号码以上(比如4000)

想想这个问题已经被标记为“mysql的”,“数据库设计”,“标签”和“标记”做你会看到你如何将PHP与其他标签相关联。