2012-02-21 70 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