快了文本进行比较(功能载)与空间MySQL功能
-
12-09-2019 - |
题
我有一个功能,这需要两个阵列含有标记/话的两个案文并提出余弦的相似性价值,它显示了之间的关系两者的案文。
功能需要一系列$tokensA(0=>的房子,1=>自行车,2=>的人)以及一系列$tokensB(0=>自行车,1=>的房子,2=>车),并计算相似性,这是考虑后作为一个浮点值。
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类型)
- 可能类型列出的 在这里,
- 在这里, 是我是如何选择数据之后[如MultiPointFromText()或AsText()]
- 你值插入这样的:插入clmnName值(GeomFromText('点(1 1)'))
但是你怎么用这个对我的问题吗?
PS:我在寻找方法,以减少数量的对比的算法 在这个问题.Vinko Vrsalovic告诉我,我应该打开另一个问题对于空间特征。
解决方案
同时 R-Trees
在一般可以指数数据与任意数量的尺寸, MySQL
空间能力仅限于 Geometry
类型(2
尺寸)。
如果你的矢量 2
维 和 您可以正常化,然后做到以下几点:
- 分裂的圈入的两倍的数量的角度适合你的差异
- 找到的
MBR
矢量与给予余弦的差异,从每个中心部门 - 找到所有的载体内
MBR
- 做好过滤精确的区别。
在这种情况下,但是,它将只是为了更好地precaculate的角度价值和指数,它与一个普通的 B-Tree
索引。
其他提示
事实上你只有 75 * 74 / 2 = 2775 比较。你比较每一个字,有74人,但你不需要比较word1与word2并再次word2与word1.所以它给 一半的比较少.
不隶属于 StackOverflow