频道栏目
首页 > 资讯 > 算法 > 正文

通过余弦值计算相似性的PHP实现

16-01-07        来源:[db:作者]  
收藏   我要投稿

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

 * 两篇文章提取出来的词频数组
 * 比如篇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();
相关TAG标签
上一篇:格雷码转十进制码的PHP的一种实现写法
下一篇:基于遗传算法的组卷系统的PHP的一种实现
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站