您的当前位置:首页正文

php调整余弦相似度算法,PHP实现通过余弦值计算相似性的

2024-11-22 来源:个人技术集锦

通过分词后,计算文章的词频,进而将词频抽象成数组,把数组在抽象成空间中的向量,通过计算两个向量之间的夹角可以判断两篇文章的相似度

/**

* Created by PhpStorm.

* User: 书生

* Date: 15-4-4

* Time: 下午6:20

*/

/**

* @author 书生

* 两篇文章提取出来的词频数组

* 比如篇1中有关键词词频信息为:中国[5次],谷歌[4次],攻击[7次],退出[2次],谴责[1次],那么arr1 = array(5,4,7,2,1);

* 比如篇2中有关键词词频信息为:中国[3次],谷歌[5次],攻击[6次],退出[2次],谴责[2次],那么arr2 = array(3,5,6,2,2);

* 要求数组的长度一样长

* 该算法只是一个很简陋的实现,仅仅实现了余弦值的计算

* @param $arr1

* @param $arr2

*/

class similar

{

private $arr1;

private $arr2;

public function __construct($arr1,$arr2)

{

$this->arr1 = $arr1;

$this->arr2 = $arr2;

}

/**

* 计算分子

*/

private function numerator()

{

$numerator = 0;

foreach($this->arr1 as $k => $v){

$numerator += $v * $this->arr2[$k];

}

return $numerator;

}

/**

* 计算分母

*/

private function denominator()

{

return sqrt($this->squareSum($this->arr1)) * sqrt($this->squareSum($this->arr2));

}

/**

* 求平方的和

* @param $arr

* @return int

*/

private function squareSum($arr)

{

$sum = 0;

foreach($arr as $v){

$sum += $v * $v;

}

return $sum;

}

/**

* 计算出相似值

*/

public function CosineValues()

{

return $this->numerator() / $this->denominator();

}

}

//调用方法

$m = new similar(array(5,4,7,2,1),array(3,5,6,2,2));

echo $m->CosineValues();

显示全文