如何根据标准计算每个条目的得分,并选择得分最高的得分?

时间:2018-09-21 02:17:53

标签: sql database

我想编写一个小脚本,该脚本将从一个小论坛上删除用户评论,并将一些统计数据存储在数据库中。基本上,我对用户在评论中使用不同单词的频率感兴趣。

想象一下以下模式:

单词

  • id
  • 文本

用户

  • id
  • 用户名

user_words

  • word_id
  • user_id
  • 计数(用户在论坛上的所有评论中使用该词的次数)

在此之后,我想创建一个查询,该查询将从数据库中选择5个相似的用户。具体来说:

假设我们在论坛的所有评论中平均使用以下单词:

  • word1:4%
  • word2:1%
  • word3:10%
  • ...

对于特定用户,这些单词的频率为:

  • word1:15%
  • word2:2%
  • word3:1%
  • ...

通过编程,我将找到与平均值差异最大的用户单词。就我而言,这些词是:

  • word1(15%超过平均4%)
  • word3(平均10%的1%)

现在,我想找到在word1和word3上具有相似使用频率的用户。例如:

user1:

  • word1:13%
  • word3:2%

user2:

  • word1:5%
  • word3:9%

user1与我们的原始用户非常相似。相似度可以计算为增量总和:

  • 用户1:| 15%-13%| + | 1%-2%| = 2 +1 = 3
  • user2:| 15-9%| + | 1%-9%| = 6 + 8 = 14

与user1的区别要小得多。因此user1与原始用户非常相似。

现在。想象一下,我在数据库中有成千上万的用户。我想选择5个用户(数量上限),按分数排序(分数的计算方法如上所示)。

问题在于,我不知道SQL中存在哪些机制才能实现此目的(DBMS无关紧要)。您能否给我提个建议,我应该使用哪种机制为每个用户分配一些虚拟的“得分”并选择排序方式?我只需要知道我应该朝哪个方向走,我应该读什么。

1 个答案:

答案 0 :(得分:0)

首先要做的就是能够计算字符串的出现对吗?我要做的是将您的单词表加入评论表,然后调用一个标量函数来计算每个评论的单词数,然后将其按用户ID和单词ID进行分组

请参阅示例标量函数:

CREATE FUNCTION dbo.CountNoOfString
(
    @searchString nvarchar(max),
    @valueString nvarchar(max)
)
RETURNS INT
AS
BEGIN
    return (LEN(@searchString)-LEN(REPLACE(@searchString,@valueString ,'')))/LEN(@valueString)
END

从那里可以轻松获取所需的指标