我有一個函數,它需要兩個包含兩個文本的標記/詞的數組,並給出顯示兩個文本之間關係的餘弦相似度值。加快具有空間MySQL特徵的文本比較(特徵向量)
該函數需要一個數組$ $ tokensA(0 => house,1 => bike,2 => man)和一個數組$ tokensB(0 => bike,1 => house,2 => car)並計算作爲浮點值給出的相似度。
function cosineSimilarity($tokensA, $tokensB) {
$a = $b = $c = 0;
$uniqueTokensA = $uniqueTokensB = array();
$uniqueMergedTokens = array_unique(array_merge($tokensA, $tokensB));
foreach ($tokensA as $token) $uniqueTokensA[$token] = 0;
foreach ($tokensB as $token) $uniqueTokensB[$token] = 0;
foreach ($uniqueMergedTokens as $token) {
$x = isset($uniqueTokensA[$token]) ? 1 : 0;
$y = isset($uniqueTokensB[$token]) ? 1 : 0;
$a += $x * $y;
$b += $x;
$c += $y;
}
return $b * $c != 0 ? $a/sqrt($b * $c) : 0;
}
如果我想比較75個文本,我需要進行5,625個單一比較,讓所有文本相互比較。
是否可以使用MySQL的空間列來減少比較次數?
我不想談論我的功能或有關比較文本的方法。只是減少比較的數量。
MySQL的空間列
- 創建空間列有:CREATE TABLE ABC(clmnName TYPE)
- 可能的類型列here
- here是我以後怎麼選擇數據[例如MultiPointFromText()或AsText()
- 您插入這樣的價值觀:INSERT INTO clmnName VALUES(GeomFromText( 'POINT(1)'))
但你如何使用我的問題? PS:我正在尋找方法來減少與算法in this question比較的數量。 Vinko Vrsalovic告訴我,我應該爲空間特徵打開另一個問題。
我已經添加了一些關於我的功能和函數所需的矢量的細節。你認爲你的方法是可行的嗎? – caw 2009-09-22 15:30:54
由於您的矢量位於orthotope的表面,因此如果您有固定數量的維度(這是一組固定的令牌),並且MySQL可以在其上創建一個「R-Tree」這個維數。既然這些都不可能,這個解決方案也不可行。 – Quassnoi 2009-09-22 16:13:13
所以我可以用MySQL的空間特性來忘記這種方法並尋找另一種方式?沒有可能? – caw 2009-09-22 18:08:49