我有一个函数,它需要两个包含两个文本的标记/词的数组,并给出显示两个文本之间关系的余弦相似度值。加快具有空间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