mysql - 比较大量加权标签云?

标签 mysql

我有数千大组标签云数据;我可以使用简单的选择/组语句(例如)检索每个集合的加权标签云

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/

相关文章:

MYSQL - key '0' 的重复条目 'PRIMARY'

mysql - SQL 查询,难以使用 COUNT() 计算实例/出现次数

php - 如何使用 Ajax、PHP 和 JQuery 检查多个输入复选框?

php - 为什么发布到我的 apache/php/mysql 站点将 "virus"文件放在/tmp 目录中

mysql - MySQL 中何时使用单引号、双引号和反引号

mysql - VB 数据库从 2 个不同的服务器插入

php mysql 信息检索

更新分数时 MySQL 语法错误

mysql - SQL统计未持有学历人数

android - 如何通过servlet从android应用程序将信息保存到mysql