盘绰网教程:是一个免费提供流行视频软件教程、在线学习分享的学习平台!

基于Tags完成内容推荐的办法(代码)

时间:2024/1/9作者:未知来源:盘绰网教程人气:


[摘要]+-----------+--------------------------+通过以上SQL,可以一次性查询所用文章,极其对应的所有tag在PHP,我们可以把tags变成数组。有了这个的返回结果,...
+-----------+--------------------------+

通过以上SQL,可以一次性查询所用文章,极其对应的所有tag
在PHP,我们可以把tags变成数组。

有了这个的返回结果,就比较好办了,接下去的工作就是去应用jaccard相似度这个算法了,具体就看代码吧。

/** * [更据指定文章返回相似的文章推荐] * @param $articleid 指定的文章ID * @param $top 要返回的推荐条数 * @return Array 推荐条目数组 */ function getArticleRecommend($articleid, $top = 5){ if($cache = CacheHelper::getCache()){ return $cache; } try{ $articleid = intval($articleid); $m = new TagMapModel(); $all_tags = $m->getAllGroupByArticleId();//调用上面的函数返回所有文章的tags $finded = $all_tags[$articleid];//因为上面是包含所有文章了,所以肯定包含了当前文章。 unset($all_tags[$articleid]);//把当前文章从数组中删除,不然自己和自己肯定是相似度最高了。 $jaccard_arr = []; //用于存相似度 foreach ($all_tags as $key => $value) { $intersect =array_intersect($finded, $value); //计算交集 $union = array_unique(array_merge($finded, $value)); //计算并集 $jaccard_arr[$key] = (float)(count($intersect) / count($union)); } arsort($jaccard_arr); //按相似度排序,最相似的排最前面 $jaccard_keys = array_keys($jaccard_arr);//由于数组的key就是文章id,所以这里把key取出来就可以了 array_splice($jaccard_keys, $top);//获取前N条推荐 //到这里我们就已经得到了,最相似N篇文章的ID了,接下去的工作就是通过这几个ID,从数据库里把相关信息,查询出来就可以了 $articleModels = new \Api\Model\ArticleModel(); $recommendArticles = $articleModels->getRecommendByTag($jaccard_keys); CacheHelper::setCache($recommendArticles, 604800); //缓存7天 return $recommendArticles; } catch (\Exception $e) { throw new \Exception("获取推荐文章错误"); } }

相关推荐:

PHP简单实现“相关文章推荐”功能的方法

以上就是基于Tags实现内容推荐的方法(代码)的详细内容,更多请关注php中文网其它相关文章!


学习教程快速掌握从入门到精通的SQL知识。

关键词:  基于Tags完成内容推荐的办法(代码)





Copyright © 2012-2018 盘绰网教程(http://www.panchuo.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版