如何实现Stackoverflow.com中使用的相关标签功能?

时间:2009-01-14 07:40:22

标签: algorithm

如何实现许多网站(如stackoverflow.com和http://tagexplorer.sandbox.yahoo.com/)中使用的“相关标签”功能。

5 个答案:

答案 0 :(得分:10)

我的猜测是,它是最常用的标签之间的相互关系。

例如:

  • 问题A标记为tag1,tag2
  • 问题B用tag1,tag3
  • 标记
  • 问题C用tag1,tag2
  • 标记

然后很自然地假设tag2“与”tag1。

相关

我想说最好的学习地点是O'Reilly's Programming Collective Intelligence book

答案 1 :(得分:1)

有几种方式可以想到。您可以快速查询以选择相关的标记名称:

SELECT * FROM tags WHERE tag_name LIKE '%$current_tag%'

另一种方法是将标签表设置为具有关系字段,可能是用逗号分隔的相关ID,但这似乎很难维护。

我相信有人会想出更好的答案,所以我也很好奇。

答案 2 :(得分:0)

嗯,我不擅长数学:-),但听起来你正在寻找两个标签之间的correlation。我的第一直觉是将预期值设置为50%(期望每个标签出现在50%的文章中 - 这可能会有所偏离),成对计算标签的相关系数,并确定相关性是否高于a某些价值(您必须通过试验确定),它们是相关的。

或者,您可以使用一个简单的措施,例如(共同出现的文章数量)/(至少出现一个标签的文章总数)。

答案 3 :(得分:0)

也许s.o.跟踪多少时间标记汇集在一起​​

  1. 我插入带有标签A + B的Q1 relationWeight(A,B)= 1

  2. 我插入带有标签A + B的Q2 relationWeight(A,B)= 2

  3. 现在我删除Q1和Q2。我必须 知道“relationWeight” 在relationWeight = 0

  4. 时取消关联标签

答案 4 :(得分:-1)

使用:

(DataAccessDataContext db = new DataAccessDataContext())
        {
            Repeater1.DataSource = from rt in db.RelatedTags where st.ITEMID == itemid select new TagView() { ID = rt.Tag.ID, NAME = rt.Tag.NAME };
            Repeater1.DataBind();            
        }

///:)