php 匹配2个用户标签或用户多个标签的余弦相似度 写个完整列子
时间: 2024-09-26 21:09:22 浏览: 33
在PHP中计算两个用户标签或多个标签之间的余弦相似度,我们可以首先将用户的标签表示为向量,然后利用余弦相似度公式来比较它们的相似程度。以下是一个简单的例子:
```php
// 定义用户A和B的标签数组
$userA = ['技术', '编程', 'Web'];
$userB = ['前端', '开发者', 'HTML'];
// 将标签转换为词频向量 (假设每个词都是唯一的)
function vectorizeTags($tags) {
$vector = array_count_values(explode(' ', $tags));
// 归一化向量
$total = array_sum($vector);
return array_map(function ($val) use ($total) { return $val / $total; }, $vector);
}
$userAVector = vectorizeTags(implode(' ', $userA)); // 向量形式的 userA
$userBVector = vectorizeTags(implode(' ', $userB)); // 向量形式的 userB
// 计算余弦相似度
function cosineSimilarity($a, $b) {
$dotProduct = array_dot($a, $b);
$magnitudeA = sqrt(array_sum(array pow($a, 2)));
$magnitudeB = sqrt(array_sum(array pow($b, 2)));
return $dotProduct / ($magnitudeA * $magnitudeB);
}
$similarity = cosineSimilarity($userAVector, $userBVector);
echo "用户A和B的标签相似度为: {$similarity}";
//
阅读全文