2010-06-19 37 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