2010-06-19 49 views
0

我有成千上万的大型标签云数据集;我可以检索每个组的加权标签云用一个简单的选择/组语句(例如)比较大型加权标签云集?

SELECT tag, COUNT(*) AS weight 
FROM tags 
WHERE set_id = $set_id 
GROUP BY tag 
ORDER BY COUNT(*) DESC 

我想知道的是 - 什么是比较加权标签云的最佳途径找到最相似的其他集合,以重量(出现的一组中的数字)考虑在内,甚至可能是计算比较分数,都在同一个有些effiecient声明?

我发现缺乏在网络上的话题质量文献,认为它一定程度上广泛有关,并试图抽象我的例子,以保持它的普遍适用。

回答

1

首先,您需要对每个标签云进行标准化,就像您对矢量所做的那样,假设标签云是一个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意味着平等。

+0

虽然理论似乎声音,我不知道如何在飞行比较上千套的标签时,这会实现,在一个幸福的声明.. – JeremyFelix 2010-06-19 16:41:29

+0

通常不需要这些密集的任务是实时数据,因此你并不需要能够在MySQL中完成它们,只需获取云并以异步方式处理它们即可。然后将结果存储在数据库中。 – Jack 2010-06-19 16:43:07