如何找出上升的单词(或从列表中越来越受欢迎的单词)



我想知道如何计算上升词(有点类似于reddit的上升线程排序选项)。我所说的上升是指什么是变得流行。上升到顶端的速度最快。示例:

PS:-^v只是单词的移动方式。此外,(a)(b)不是单词的一部分。我只是用这种方式展示他们的独特性

上午10:00我有这个列表,在这个排名

1. Cool    (a)  -
2. Best         -
3. Cool    (b)  -
4. Radical (a)  -
5. Sweet   (a)  -
6. Sweet   (b)  -
7. Radical (b)  -

然后在上午10:15(15分钟后),列表的顺序发生了变化。

1. Best         ^
2. Cool    (a)  v
3. Radical (a)  ^
4. Sweet   (a)  ^
5. Cool    (b)  v
6. Radical (b)  ^
7. Sweet   (b)  v

然后在上午10:30(15分钟后),列表的顺序再次更改。

1. Best         -
2. Radical (a)  ^
3. Sweet   (a)  ^
4. Cool    (a)  v
5. Radical (b)  ^
6. Sweet   (b)  ^
7. Cool    (b)  v

正如你所看到的,Cool这个词作为一个整体显然是受欢迎程度的下降。目前我的算法(我觉得相当愚蠢,但我想不出其他方法)。

我现在的做法是:

  1. 对于列表中的每个单词,我计算它向上移动了多少个等级(+ num)或向下移动了多少(- num),或者它是否没有移动0。从技术上讲,这给了我一个费率。Ranks moved per 15 minutes
  2. 然后,如果同一个单词存在两次(比如单词Cool),那么我对速率进行平均
  3. 然后我把它从高到低排序,我就有了上升的单词

尽管我觉得这不是很好(甚至没有任何意义)。它当然也没有考虑任何历史数据,只考虑每15分钟接收一次的新数据。

我的问题是,我该如何计算出最上面的单词、最下面的单词以及中间的所有单词。

如果您想考虑历史数据,可以使用一些函数来减少旧更改的数据权重。这个函数可能是指数,它衰减得很快:

risingRate = 0
for i = 0:n
risingRate += e^(-i) * RankChange(curr - i)
end
return risingRate

此代码使用单词的n + 1最后记录来计算其上升率。

每一步的系数为:

0: 1
1: 0.367879
2: 0.135335
3: 0.0497871
4: 0.0183156
5: 0.00673795
6: 0.00247875
7: 0.000911882
8: 0.000335463
9: 0.00012341
10: 4.53999e-05

这些系数为最近的系数分配更大的权重。这正是你可能想要的。

您可以使用e^(-alpha*i)来调整衰减率。

最新更新