Ruby on rails 实施趋势主题

Ruby on rails 实施趋势主题,ruby-on-rails,database,activerecord,ruby-on-rails-4,trending,Ruby On Rails,Database,Activerecord,Ruby On Rails 4,Trending,我目前正在我的Rails应用程序中实现趋势主题 我目前拥有的是: 每篇文章都有2到3个单词的topic属性来描述其主题 然后,我根据他们的浏览量获得排名靠前的帖子(我也有喜欢和喜爱的帖子,但目前仅使用浏览量): 然后,我只需选择一些独特的主题,并显示其中的一些: <% trending_topics.select(:topic).map(&:topic).uniq.take(10).each do |topic| %> <li><%= top

我目前正在我的Rails应用程序中实现趋势主题

我目前拥有的是:

每篇文章都有2到3个单词的
topic
属性来描述其主题

然后,我根据他们的浏览量获得排名靠前的帖子(我也有喜欢和喜爱的帖子,但目前仅使用浏览量):

然后,我只需选择一些独特的主题,并显示其中的一些:

  <% trending_topics.select(:topic).map(&:topic).uniq.take(10).each do |topic| %>
      <li><%= topic %></li>
  <% end %>

  • 我的问题是:

  • 是否有办法获取最常出现的
    :主题
    ,对它们进行排序, 从中挑选精华
  • 这是跟踪热门话题的可持续方式吗?如果没有,, 有没有办法提高效率
  • 有没有更好的方法来实现搜索 最流行和最频繁的
    :帖子中的主题
    属性

  • 回答您的问题:

    (1)是的,您可以获得每个
    :主题的频率的哈希值,如下所示:

    array = trending_topics.select(:topic).map(&:topic)
    freq = array.inject(Hash.new(0)) { |h,v| h[v] += 1; h }
    # => {'topic1'=>3, 'topic2'=>3, 'topic3'=>1, ...}
    
    (2)这是“可持续的”,因为它不会随着你介绍的帖子/主题数量的增加而增加复杂性(因为你仍然在前200篇帖子中取样,尽管随着帖子数量的增加,获得“前200篇”会花费稍多的计算时间)

    (3)我认为
    impressions\u count
    不是一个很好的跟踪趋势的方法,因为对我来说
    impressions\u count
    拥有总的印象数,而你需要它的一些时间方面(例如本周
    impressions\u

    因此,一种方法是在本周推出一个定期更新的
    专栏。然后你可以根据这个来选择


    另一种方法是编写一种方法,该方法使用总体
    印象数
    以及
    处创建的时间戳或
    处更新的时间戳来计算帖子的“热门程度”。你可以用一个简单的衰减函数来实现这一点,然后调整该函数的常数,直到得到你想要的衰减。这里显示了与此概念类似的内容:。一旦编写了该方法,您就可以根据其输出进行排序。

    如果您需要比当前排名算法更复杂的方法,您可能需要查看并处理此问题。这相当复杂,但是如果你用谷歌搜索,你应该能够在Ruby中找到每个算法的实现

    array = trending_topics.select(:topic).map(&:topic)
    freq = array.inject(Hash.new(0)) { |h,v| h[v] += 1; h }
    # => {'topic1'=>3, 'topic2'=>3, 'topic3'=>1, ...}