2つのテキストのトークン/単語を含む2つの配列を取り、両方のテキスト間の関係を示す余弦類似度値を出力する関数があります。
この関数は、配列$ 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()]
- 次のように値を挿入します。INSERTINTOclmnNameVALUES(GeomFromText('POINT(1 1)'))
しかし、これを私の問題にどのように使用しますか?
PS:この質問のアルゴリズムとの比較の数を減らす方法を探しています。Vinko Vrsalovicは、空間的特徴について別の質問を開く必要があると私に言いました。