我有一个函数,它接受两个包含两个文本的标记/单词的数组,并给出显示两个文本之间关系的余弦相似度值。
该函数接受一个数组 $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)
- 此处列出了可能的类型
- 这是我稍后选择数据的方式[例如 MultiPointFromText() 或 AsText()]
- 您插入这样的值: INSERT INTO clmnName VALUES (GeomFromText('POINT(1 1)'))
但是你如何用它来解决我的问题?
PS:我正在寻找减少与此问题中算法的比较次数的方法。Vinko Vrsalovic 告诉我,我应该针对空间特征提出另一个问题。