主要是使用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);
原文地址:https://www.cnblogs.com/jcydd/p/10765672.html
时间: 2024-10-08 16:29:20