【发布时间】:2010-11-30 10:39:20
【问题描述】:
我有一个函数,它接受两个包含两个文本的标记/单词的数组,并给出显示两个文本之间关系的余弦相似度值。
该函数接受一个数组 $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 1)'))
但是你如何用它来解决我的问题呢?
PS:我正在寻找减少与算法in this question 的比较次数的方法。 Vinko Vrsalovic 告诉我,我应该针对空间特征提出另一个问题。
【问题讨论】:
标签: mysql comparison spatial similarity