Ruby中的“相关项”

时间:2012-02-21 18:07:43

标签: ruby-on-rails ruby ruby-on-rails-3 search gem

如何为博客中的帖子实施“相关项目”功能?我想根据对帖子标题的分析返回一份类似帖子的列表。

我自己的想法似乎非常低效,我想知道是否有工具已经支持这个功能。我没有通过谷歌,红宝石工具箱找到任何帮助,我看着太阳黑子api。您将如何在博客应用/内容网站中实现这一目标?

更新

对于那些对此功能感兴趣的人,我决定使用太阳黑子,这允许我在show动作中使用它:

@find_related = Post.search do 
  fulltext params[:title]
end 

这将返回一系列相关帖子:

@related = @find_related.results

感谢所有反馈,railscast给了我很大的帮助

4 个答案:

答案 0 :(得分:2)

当然有一些好的和有效的工具!从技术上讲,您想要的是在邮件标题/其他数据的索引数据库上进行全文搜索。我们有运行外部数据库的工具,可以处理所有搜索和索引。这些后端是通用的而不是ruby,你只在你的应用程序中使用客户端逻辑。这非常有效,因为您可能无法实现除现有算法之外的任何其他算法。我建议如下:

这些库提供客户端逻辑,用于与上述搜索引擎进行数据交换(所有这些都来自Apache基金会)

答案 1 :(得分:1)

我不确定您的要求是否允许这样做,但博客帖子通常都有标签。

您可以使用博客帖子中的标记来过滤其他相关帖子,因为具有相似标签的帖子应该以某种方式相关。然后,您可以按匹配的标签数量和发布的最新日期进行排序。

答案 2 :(得分:1)

有几种方法可以做到这一点,两者都有不同的优点和缺点。

简单的方法是使用关键词标记您的帖子,然后使用这些文章来提取具有匹配标签的其他文章,然后按相同标签的数量对这些结果进行排序。只要您在内容上放置的标签表示良好,那么这会产生良好的结果,而不会产生很多误报。据我所知,这是有多少博客平台实现该功能。

更复杂的方法是使用NLP解析每个帖子的标题并计算其他帖子的适应度。这将涉及编写更多代码并可能产生误报。但是,您不必手动标记帖子,如果您想对某些单词或短语进行加权,则可以调整用于查找帖子的方法。看看Treat, the Text Retrieval, Extraction and Annotation Toolkit它似乎是Ruby NLP的一个很好的起点。

答案 3 :(得分:1)

如果您按照标题中的文字进行操作,这种简单易懂的解决方案可能会为您提供生产准备的垫脚石:

#assume titles is an array of arrays of the words of titles and title is the one we are trying to mach with
HOW_MANY_RELATED_WORDS=3
titleWords=title.split(' ').sort
related=[]
trues=0
titles.each do |t|
  t.each do |word|
    true+=1 if titleWords.include?(word)
  end
  related<<t.join(' ') if(trues>=HOW_MANY_RELATED_WORDS)
end