我正在尝试为我当前正在创建的应用程序实现热度评分。该应用程序有一些 github 存储库,其中包含从数据库中的 GH API 获取的所有数据。我会定期刷新这些数据(如拉取请求计数、观星者计数等)以使其保持最新。
我想知道如何实现我自己的性感分数,但问题是我的数学技能可能没有那么高,无法自己发明它。所以我被迫使用或改编其他人的解决方案。 github repos 中没有很多(有相当多的公式用于 ie.reddit 分数或 hackernews 分数),我实际上在这里找到了一个:https://github.com/sendgridlabs/sendgridlabs.github.com/blob/master/index.html并将其重写为 ruby 。这是我的代码:
def calculate_hottness
week_half_life = 1.146 * (10 ** -9)
push_delta = DateTime.now.to_i - repo_pushed_at.to_i
created_delta = DateTime.now.to_i - repo_created_at.to_i
push_weight = 1
watchers_weight = 1.314 * (10 ** 7)
hottness = push_weight * (Math::E ** (-1 * week_half_life * push_delta))
hottness += watchers_weight * repo_watchers_count / created_delta
return hottness
end
我实际上对它的工作方式有点满意,但有一个问题 - 我所说的“热 repo ”并不是指那些普遍流行的,而是在过去几天/几周/几个月内流行的。例如,当使用该方法时,Ruby on Rails 存储库将始终是 HitTest 门的,因为它是用 ruby 编写的最受欢迎的存储库之一,不是因为它最近很流行。
所以问题是 - 我如何改进该方法以帮助我找到最近流行的 repo 协议(protocol),而不是那些流行的“因为它们古老而知名”的 repo 协议(protocol)。也许这是在给定方法中更改某些内容的问题,但老实说,我不太确定它是如何工作的以及为什么有人会那样实现它。提前致谢。
最佳答案
您需要更多数据来计算您所描述的趋势类型。例如, repo 协议(protocol)在这一天/周/月获得了多少颗星,仅此一项,您就可以根据最近获得最多星标的人对 repo 协议(protocol)进行排名。观察者也是如此,您可以更加重视观察者分数,因为它更直接地反射(reflect)了它的受欢迎程度。我没有深入研究 GH API,但这个概念类似于获取明星/观看者计数的历史记录,如果 API 不提供,您需要自己保留该历史记录。定期更新计数,然后一周过去后,您可以计算自上周以来的计数增加,并能够找到在时间范围内增加他们的明星/观察者计数最多的 repo 。
关于ruby - 计算 GitHub 热度分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26096194/