搜索引擎 聊一下"相关帖子"算法?

camel · 2012年03月01日 · 最后由 Louis 回复于 2013年01月28日 · 9502 次阅读

Ruby-china 的“相关帖子”中经常会有些“风牛马”类的东西,看了下代码,大致在这里

# 相关类似话题, 取相关词出现最少3次,相关度最高的3篇
cache :sidebar_for_more_like_this, :expires_in => 1.day do |cell, args|
  args[:topic].id
end
def sidebar_for_more_like_this(args = {})
  @topics = args[:topic].more_like_this do
    minimum_term_frequency 5
    paginate :page => 1, :per_page => 10
  end.results
  render
end

但其中的ore_like_thisminimum_term_frequency没找到源码,不知道具体实现,求指点。 另外如果仅仅是“相关词”出现次数来筛选是不够智能的,因为不同词的权重是不一样的。如ruby这些词在每篇文章里都很多,如果仅按词的出现次数来算,很容易把字数最多但毫不相关的帖子推荐出来。哪位有经验,分享一下吧?

我也是发现这个相关有的时候不太准确

一种比较山寨不过还算不错的做法是,可以用 tf-idf 抽取下关键词,然后用 sphinx 搜索匹配相关性,加上分类或标签的过滤效果会更好。Ruby China 帖子一年也估计不过万来篇吧,最多半小时就能把相关性帖子重新索引预计算一遍。

只要是跟中文索引相关的,基本上最后的问题都在中文分词那块,solr 和 lucene 内置的分词器对中文支持的都不好,因此大家一般都是用国内几个著名的中文分词器去配置,效果还不错。不知道 ruby-china 使用 solr 时自定义配置了没有

可以加权下协同过滤,按照用户的喜欢和收藏算贴子的近似度

还有回复

http://blog.csdn.net/tvetve/article/details/2292111 楼主可以看下这个,虽然只是些理论的,但是可能会有帮助。 里面的 VSM(向量空间模型)就能根据文章的特征向量来计算相似度。当然特征向量的提取也有很多算法来实现。 但是 ruby-china 用的是哪种我没看过也不知道。 楼主说的“的”这些中文中的无意义词,一般都会有个停用词表来过滤的。 我只是个小菜鸟,说的有错还请大大指出来。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号