Ruby on rails 实施趋势主题
我目前正在我的Rails应用程序中实现趋势主题 我目前拥有的是: 每篇文章都有2到3个单词的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
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, ...}