我有数千大组标签云数据;我可以使用简单的选择/组语句(例如)检索每个集合的加权标签云
SELECT tag, COUNT( * ) AS weight
FROM tags
WHERE set_id = $set_id
GROUP BY tag
ORDER BY COUNT( * ) DESC
我想知道的是——比较加权标签云并找到最相似的其他集合的最佳方法是什么,考虑到权重(集合中出现的次数),甚至可能计算比较分数,所有这些都在一个有点有效的语句中?
我发现网络上缺乏关于该主题的高质量文献,认为它具有广泛的相关性,并尝试抽象我的示例以使其普遍适用。
最佳答案
首先,您需要像对待向量一样标准化每个标签云,假设标签云是一个n维向量,其中每个维度代表一个单词,其值代表权重这个词。
您可以通过计算norm来做到这一点每个云的(或大小),即所有权重平方的平方根:
m = sqrt( w1*w1 + w2*w2 + ... + wn*wn)
然后,通过将每个权重除以云的范数来生成标准化标签云。
此后,您可以通过使用云之间的标量积轻松计算相似度,即只需将每对的每个组件以及所有组件相乘即可。例如:
v1 = { a: 0.12, b: 0.31; c: 0.17; e: 0.11 }
v2 = { a: 0.21, b: 0.11; d: 0.08; e: 0.28 }
similarity = v1.a*v2.a + v1.b*v1.b + 0 + 0 + v1.e*v2.e
如果一个向量具有另一个向量没有的标签,那么该特定乘积显然为 0。
这种相似性在[0,1]
范围内,0表示不相关,1表示相等。
关于mysql - 比较大量加权标签云?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3076196/