我有一个功能,这需要两个阵列含有标记/话的两个案文并提出余弦的相似性价值,它显示了之间的关系两者的案文。

功能需要一系列$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.所以它给 一半的比较少.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top