jcydd

主要是使用similar_text函数判断两个字符串的相似度,排序后选出相似度排名前5为的数据

similar_text虽然对中文的相似度检测不是太准确,但是可以作为一个参考,挑选出相似文章

也可以直接对文章标题进行相似度检测获取推荐文章,通过文章标题的实现起来更简单一些

我这里给出的案例是根据标签相似度获取推荐文章的代码

 

//相关文章获取,使用similar_text函数
        $key=\'\';
       //将本文的标签组合成字符串,因为每个标签在数据表是一条数据
        foreach ($tagsres as $v){
            $key=$key.\',\'.$v[\'tags_name\'];
        }
        //halt($key);
//根据文章id分组获得各个文章的标签字符串
        $alltags=Db::query("select at_id,group_concat(tags_name) from blog_tags group by at_id");
        //$alltags=Db::table(\'blog_tags\')->field(\'concat(tags_name),at_id\')->select();
        //halt($alltags);
//获取所有文章标签与该文章标签的相似度
        $percent=array();
        foreach ($alltags as $v){
            $percent[$v[\'at_id\']]=similar_text($key,$v[\'group_concat(tags_name)\']);
        }
//去掉本文
        unset($percent[$at_id]);
//对相似度从大到小排序,arsort可以保留key,rsort不行
        arsort($percent);
//选取排名前五个 
        $percent=array_slice($percent,0,5,true);
        //halt($percent);
        $arr=array();
        foreach ($percent as $k=>$v){
            $arr[]=$k;
        }
        //halt($arr);
//查询排名前5的文章
        $alsoarticle=Db::table(\'blog_article\')->alias(\'a\')->join(\'blog_cate b\',\'a.cate_id=b.cate_id\')->where([\'a.at_id\'=>$arr])->select();
        //halt($alsoarticle);    
$this->assign(\'alsoarticle\',$alsoarticle);

 

分类:

技术点:

相关文章:

  • 2021-11-15
  • 2022-02-25
  • 2021-08-10
  • 2021-08-11
  • 2021-10-16
  • 2022-12-23
猜你喜欢
  • 2021-04-26
  • 2022-12-23
  • 2021-05-16
  • 2022-12-23
  • 2022-12-23
  • 2021-09-29
  • 2022-12-23
相关资源
相似解决方案