我想编写一个小脚本,该脚本将从一个小论坛上删除用户评论,并将一些统计数据存储在数据库中。基本上,我对用户在评论中使用不同单词的频率感兴趣。
想象一下以下模式:
单词
用户
user_words
在此之后,我想创建一个查询,该查询将从数据库中选择5个相似的用户。具体来说:
假设我们在论坛的所有评论中平均使用以下单词:
对于特定用户,这些单词的频率为:
通过编程,我将找到与平均值差异最大的用户单词。就我而言,这些词是:
现在,我想找到在word1和word3上具有相似使用频率的用户。例如:
user1:
user2:
user1与我们的原始用户非常相似。相似度可以计算为增量总和:
与user1的区别要小得多。因此user1与原始用户非常相似。
现在。想象一下,我在数据库中有成千上万的用户。我想选择5个用户(数量上限),按分数排序(分数的计算方法如上所示)。
问题在于,我不知道SQL中存在哪些机制才能实现此目的(DBMS无关紧要)。您能否给我提个建议,我应该使用哪种机制为每个用户分配一些虚拟的“得分”并选择排序方式?我只需要知道我应该朝哪个方向走,我应该读什么。
答案 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
从那里可以轻松获取所需的指标