php对比文本相似度几种方法记录(主要记录使用phpanalysis分词后使用余弦定理定理计算两个字符串相似度)

文章介绍了如何使用phpanalysis进行中文分词,并基于余弦定理计算两个字符串的相似度。提供了一个简单的PHP类textSimilar.class.php,用于计算文本的余弦相似度,适用于文本匹配和比较场景。
摘要由CSDN通过智能技术生成

php自带函数 similar_text 可以计算两个字符串的相似度.这里不做详细说明

这里主要记录使用phpanalysis分词后使用余弦定理定理计算两个字符串相似度

phpanalysis分词使用相对简单

1,下载phpanalysis 链接https://download.csdn.net/download/yu_yi_yu/87473855

2,新建一个计算相似度类方便调用-textSimilar.class.php

        代码如下

<?php
/*
*   求两个文本的相似度(余弦定理)
 * 使用
*   $obj = new textSimilar();
*   $p = $obj->get_similar_percent($str1, $str2);
*/
require ROOT . '/title/WordAnalysis/phpanalysis.class.php';//这里改成自己WordAnalysis所在目录

class textSimilar {

    # 计算两个字符串的余弦相似度
    function get_similar_percent($str1, $str2) {
        $str1_arr = $this->get_str_arr($str1);
        $str2_arr = $this->get_str_arr($str2);
        //dd($str1_arr, $str2_arr);
        $res_arr = [];
        foreach ($str1_arr as $word) {
            if (!isset($res_arr[$word])) {
                $res_arr[$word] = ['A' => 1, 'B' => 0];
            }
            else {
                $res_arr[$word]['A'] += 1;
            }
        }

        foreach ($str2_arr as $word2) {
            if (!isset($res_arr[$word2])) {
                $res_arr[$word2] = ['A' => 0, 'B' => 1];
            }
            else {
                $res_arr[$word2]['B'] += 1;
            }
        }

        $x = 0;
        $y1 = 0;
        $y2 = 0;
        foreach ($res_arr as $v) {
            $x += $v['A'] * $v['B'];
            $y1 += $v['A'] * $v['A'];
            $y2 += $v['B'] * $v['B'];
        }
        return ($y1 == 0 || $y2 == 0) ? -1 : ($x / (sqrt($y1) * sqrt($y2))) * 100;
    }

    /**
     * 分词
     */
    private function get_str_arr($text) {
        $text_arr = [];
        $obj = new PhpAnalysis('utf-8', 'utf-8', false);
        $obj->LoadDict();
        $obj->SetSource($text);
        $obj->StartAnalysis(false);
        $result = $obj->GetFinallyResult();
        $result = explode(' ', $result);
        foreach ($result as $value) {
            if (!empty($value)) {
                $text_arr[] = $value;
            }
        }
        return $text_arr;
    }

}

3,使用代码

require './WordAnalysis/textSimilar.class.php';
$obj = new textSimilar();
$n= $obj->get_similar_percent('中文分词及提取关键字','中文分词并提取关键字记录');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值