2012-02-21 74 views
2

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

我自己的做法似乎效率很低,我不知道是否有工具已经支持这个功能。我没有通过谷歌,红宝石工具箱找到任何帮助,我看着太阳黑子api。你如何在你的博客应用程序/内容网站上实现这一点?

更新

对于那些有兴趣在此功能,我决定去与黑子,让我在我的show操作使用:

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

这将返回相关的帖子数组:

@related = @find_related.results 

感谢您的所有反馈,并且此railscast是一个大帮忙

回答

2

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

这些库提供用于数据交换的客户端逻辑 - 包装器斯芬克斯

  • elastic search - 包装器的Lucene
  • sunspot搜索引擎(全部来自Apache基金会)

  • +0

    谢谢,我想我有如何去更好的主意这个。 – Dru 2012-02-21 19:58:08

    1

    我不确定你的要求是否允许这个,但博客文章一般都有标签。

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

    1

    有几种方法可以做到这一点,无论是w不同的优点和缺点。

    简单的方法是使用关键词标记您的帖子,然后使用这些标签拉出其他具有匹配标签的文章,然后通过相同标签的数量对这些结果进行排序。只要你放在内容上的标签代表了它的好处,那么这将产生良好的结果,没有太多的误报。据我所知,这是多少博客平台实现该功能。

    更复杂的方法将涉及使用NLP来解析每个帖子的标题并计算适合其他帖子。这将涉及编写更多代码并可能产生误报。但是,您不必手动标记帖子,并且可以调整用于查找帖子的方法,以便权衡某些词或词组。看看Treat, the Text Retrieval, Extraction and Annotation Toolkit这对于Ruby NLP来说似乎是一个很好的起点。

    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