PHP使用文字检索,关键词查询,分词查询

PHP使用文字检索,关键词查询,分词查询

有一个项目大概功能是通过报价图片上传到后台将图片数据匹配到数据库修改对应相同数据的值,讲到这可能大家就迫不及得的想说,用like直接模糊查询不就行了嘛,但是如果真可以我就不浪费时间来写这篇文章了!

首页这个图片是一个表格类型的报价单,我们这边通过百度的识图api对图片数据进行获取,获取后得到数据。但是每个城市区域对这一种产品的名称各不相似,比如:A华为mate305g版 , B华为mate30(5g) ,C5g版华为mate30 这三个版本名称各不相同,而数据库里面存储的叫华为mate305g网络版,所有我这边就想到了一个方法-分词!
开发步骤:


  	$result=$this->ch2arr('华为mate305g版');//将文字拆分成数组
	
        $ids=[];
        for($i=0;$i<count($result);$i++) //循环每一个字然后根据每个搜索关键词构建SQL语句
        {
            $id=db('test_copy')->where('title','like',"%$result[$i]%")->column('id');
            $ids = array_merge($ids, $id);
        }

        $arr = array_count_values($ids);   // 统计数组中所有值出现的次数,键是搜索出的对应id,值是出现次数,然后按数量进行正序

        arsort($arr);
        $n=[];
        foreach ($arr as$k2=> $v2) //循环所有获取到的值
        {
            $m1=$num*0.7;//匹配阈值,$num是文字的长度,意思是匹配度
            //dump($m1);die;
            if($v2>$m1){ //匹配度大于70%的添加到数组
              array_push($n,$k2);
            }
        }

		return  $n;	结束,获得相似度大于70%集合
    public function ch2arr($str)//文字拆分数组
            {
                $length = mb_strlen($str, 'utf-8');
                $array = [];
                for ($i=0; $i<$length; $i++)
                $array[] = mb_substr($str, $i, 1, 'utf-8');
               return $array;
            }

最后说明下,单一条件搜索不出准确数据,还需自己按需求增加条件将最后获取的集合再进行筛选!
主页还有一篇另一种方式的分词方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙奋斗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值