一种很好的宝石排名算法

时间:2011-02-12 03:53:56

标签: ruby-on-rails ruby algorithm rubygems gem

我建立了一个网站,让您可以自由添加与Rails相关的宝石,并标记这些宝石。我要添加的下一个功能是宝石排名。我已经考虑了一些常见的系统,比如星星和投票,但已经确定一个简单的系统不能很好地工作。

以下是一些情节,我希望排名算法适用于:

  • 有一个名为GEM1的流行宝石可以做XYZ。 GEM1已经发布一年,在XYZ的宝石中排名最高。一个新的宝石,GEM2,也做XYZ,已发布,明显优于GEM1。 GEM2应该能够快速超越GEM1。
  • 有一个名为GEM1的高级宝石。发布了新版本的Rails,GEM1不适用于此版本。随着合理的时间流逝(可能与大多数人开始使用新的Rails版本所需的数量相同)并且GEM1仍然不支持此版本,它应该失去其高排名。

我们可以获得宝石的一些信息:

  • 下载次数
  • 当前版本的下载次数
  • 如果gem托管在github上,我们有多个分叉和观察者(虽然宝石不应该超过另一个宝石b / c它托管在github上)

此信息可能是算法的一部分(连同投票或星标或我们需要从用户收集的任何内容)。

所以我的问题是,你能想到一个能够处理这些场景的好算法(当然不完全是描述它),或者至少能够提供一些好的建议,或者指出我正确的方向。

2 个答案:

答案 0 :(得分:3)

在我看来,下载次数不是一个非常有用的仪表。可能的代码片段多年来一直没有工作,但每个月仍有数千人尝试(即下载)。

  1. 要求提交者确定代码的Rails版本。虽然它可能无法解决您的所有问题,因为他们无法预测Rails的后续版本会破坏它,但需要两秒钟来指定该信息,它可以节省大量的时间。在下载页面上显示。
  2. 让下载程序对代码进行评级...执行速度,执行可靠性,代码可读性,易于安装,文档等。

答案 1 :(得分:2)

http://ruby-toolbox.com/categories.html是一个很棒的网站,可以做类似的事情。他们只是对下载量进行排名,但下载次数最多的IMO并不总是如此。应该显示github等上的活动,因为我不太可能尝试一些没有积极开发的新东西。

我认为下载应该计入某些东西,并且可能在对数范围内衰减。发展活动也应该算在内。此外,您还可以添加用户评论并将其合并。我认为这些指标可以通过一定的权重进行调整,以查看最合适的排名。也许你也可以邀请作者写出他们的宝石提供的东西,而其他人不在同一个班级。

我认为处理突然无法处理新框架等的宝石就是有一个downvote按钮,用户可以通过downvote按钮从您提供的预设清单中提供理由。如果宝石突然开始投票,没有最近的活动,并且下载量正在减少,那么它将会下降。然后,您可以使用向下箭头指示它正在向下趋势。可以列出最受欢迎的原因。