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


Posted in PHP onJuly 19, 2014

通常在做内容网站的时候,需要在每一篇文章中出现与该文章相关的文章列表。对于大多数人来说,使用的方法通常是:建立一个关键词列表,判断每篇文章包含有那些关键词,最后根据关键词找出与某篇文章最相关的文章。对于内容比较复杂的网站,确定关键列表词显然会比较麻烦。

本文介绍了与以往方法不同的similar_text(php4,php5)函数来方便的达到我们的预期要求。具体的思路是:从文章列表中取出所有的文章标题,将所有的文章标题都同当前标题对比,将对比结果生成一个数组,按照相似度的大小由大到标题,利用similar_text将这些文章标题同原文章标题做对比,按标题的相似程度重新排列标题,就得到了与原文章相似的文章列表

这个思路用到的关键函数是:

int similar_text ( string $first, string $second[, float $percent] )

它返回的是两个字根串的相同字节数。

按照这个思路,我们建立如下的函数,这个函数的功能是把$arr_title数组按照同$title相似的的顺序重新排列数组。

<?php 
$demo_title= "简明现代魔法"; 
$demo_arr_title= array("简单易懂的现代魔法","简单明了的现代魔法","简明扼要的古代魔法","不简单的现代魔法","很难懂的现代魔法"); 
$new_array= getSimilar($demo_title,$demo_arr_title); 
//print_r($new_array); 
echo"与[$demo_title]最相关的前三个文章是:<br/>"; 
for($j=0; $j<=2; $j++) 
{ 
echo($j+1).":".$new_array[$j]."<br/>"; 
} 
//$title当前标题,$arrayTitle为需要查找的数组 
functiongetSimilar($title,$arr_title) 
{ 
$arr_len= count($arr_title); 
for($i=0; $i<=($arr_len-1); $i++) 
{ 
//取得两个字符串相似的字节数 
$arr_similar[$i] = similar_text($arr_title[$i],$title); 
} 
arsort($arr_similar); //按照相似的字节数由高到低排序 
reset($arr_similar); //将指针移到数组的第一单元 
$index= 0; 
foreach($arr_similaras$old_index=>$similar) 
{ 
$new_title_array[$index] = $arr_title[$old_index]; 
$index++; 
} 
return$new_title_array; 
} 
?>

程序运行结果:

与[简明现代魔法]最相关的前三个文章是: 
1:简单明了的现代魔法 
2:简单易懂的现代魔法 
3:简明扼要的古代魔法

有些需要注意的地方

关于similar_text速度,有人做过这个一个测试,结果是:

The speed issues for similar_text seem to be only an issue for long sections of text (>20000 chars).

I found a huge performance improvement in my application by just testing if the string to be tested was less than 20000 chars before calling similar_text.

20000+ took 3-5 secs to process, anything else (10000 and below) took a fraction of a second. Fortunately for me, there was only a handful of instances with >20000 chars which I couldn't get a comparison % for.

如果要直接使用正文作对比速度可能会比较慢。

据说这个函数用于英文的效果不太好(感兴趣的读者可以自行尝试)。用于英文时可以将英文句子用空格分开成多个单词后再写一个类似于similar_text的函数。

另外,如果句子中含有比较多“的”、“了”等非关键词字符时,得到的结果可能会不太理想。

PHP 相关文章推荐
php 无限分类的树类代码
Dec 03 PHP
php smarty 二级分类代码和模版循环例子
Jun 01 PHP
实测在class的function中include的文件中非php的global全局环境
Jul 15 PHP
CodeIgniter启用缓存和清除缓存的方法
Jun 12 PHP
PHP制作图形验证码代码分享
Oct 23 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
Jan 26 PHP
php实现paypal 授权登录
May 28 PHP
thinkphp3.2.3 分页代码分享
Jul 28 PHP
ThinkPHP实现附件上传功能
Apr 27 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
PHP共享内存使用与信号控制实例分析
May 09 PHP
PHP的new static和new self的区别与使用
Nov 27 PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
Jul 18 #PHP
CodeIgniter中使用cookie的三种方式详解
Jul 18 #PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
Jul 18 #PHP
简单实用的网站PHP缓存类实例
Jul 18 #PHP
ThinkPHP表单自动提交验证实例教程
Jul 18 #PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 #PHP
ThinkPHP字符串函数及常用函数汇总
Jul 18 #PHP
You might like
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
2009/10/31 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
2017/09/30 PHP
php+ajax实现仿百度查询下拉内容功能示例
2017/10/20 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
文本框中,回车键触发事件的js代码[多浏览器兼容]
2010/06/07 Javascript
Jquery中ajax方法data参数的用法小结
2014/02/12 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
2014/07/18 Javascript
jquery常用方法及使用示例汇总
2014/11/08 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
针对BootStrap中tabs控件的美化和完善(推荐)
2016/07/06 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
2017/01/03 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
[54:33]2018DOTA2亚洲邀请赛小组赛 A组加赛 Liquid vs Optic
2018/04/03 DOTA
python 域名分析工具实现代码
2009/07/15 Python
python数据类型_元组、字典常用操作方法(介绍)
2017/05/30 Python
Python异常处理操作实例详解
2018/05/10 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
详解Django-auth-ldap 配置方法
2018/12/10 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
Python是怎样处理json模块的
2020/07/16 Python
CSS3+js实现简单的时钟特效
2015/03/18 HTML / CSS
摄影实习自我鉴定
2013/09/20 职场文书
环境工程毕业生自荐信
2013/11/17 职场文书
英文简历自荐信范文
2013/12/11 职场文书
禁毒宣传工作方案
2014/05/23 职场文书
优秀员工评优方案
2014/06/13 职场文书
旅行社计调工作总结
2015/08/12 职场文书
小学总务工作总结
2015/08/13 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript