php 匹配2个用户标签或用户多个标签的余弦相似度 写个完整列子 且无错误
时间: 2024-09-26 20:04:19 浏览: 36
在PHP中计算两个用户的标签集合的余弦相似度通常需要借助外部库,因为PHP本身并不直接支持这种数学计算。这里我们可以使用`cosine_similarity`函数来实现,先假设我们有一个`Tag`类,它包含了一个标签列表。首先,你需要安装 `php-cosine-similarity` 库(如果尚未安装):
```sh
composer require duncan3dc/php-cosine-similarity
```
然后创建一个`Tag`类,并定义一个计算余弦相似度的方法:
```php
class Tag {
private $tags;
public function __construct(array $tags) {
$this->tags = $tags;
}
public function getTags() {
return $this->tags;
}
}
function cosineSimilarity(Tag $tag1, Tag $tag2) {
$vector1 = array_count_values($tag1->getTags());
$vector2 = array_count_values($tag2->getTags());
if (empty($vector1) || empty($vector2)) {
throw new \InvalidArgumentException('At least one tag vector is empty');
}
$dotProduct = array_sum(array_map(function ($v1, $v2) {
return $v1 * $v2;
}, $vector1, $vector2));
$magnitude1 = sqrt(array_sum(array_map(function ($value) {
return pow($value, 2);
}, $vector1)));
$magnitude2 = sqrt(array_sum(array_map(function ($value) {
return pow($value, 2);
}, $vector2)));
if ($magnitude1 == 0 || $magnitude2 == 0) {
return 0; // Prevent division by zero
}
return $dotProduct / ($magnitude1 * $magnitude2);
}
```
现在你可以使用这个函数来比较两个用户标签的相似度:
```php
$user1 = new Tag(['tag1', 'tag2', 'tag3']);
$user2 = new Tag(['tag2', 'tag4', 'tag5']);
try {
$similarity = cosineSimilarity($user1, $user2);
echo "The similarity between user1 and user2 is: " . $similarity;
} catch (\InvalidArgumentException $e) {
echo "Error: " . $e->getMessage();
}
```
阅读全文
相关推荐


















