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 相关文章推荐
用cookies来跟踪识别用户
Oct 09 PHP
php 结果集的分页实现代码
Mar 10 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
Nov 10 PHP
深入php中var_dump方法的使用详解
Jun 24 PHP
微信公众平台开发关注及取消关注事件的方法
Dec 23 PHP
yii2.0实现验证用户名与邮箱功能
Dec 22 PHP
PHP常见的6个错误提示及解决方法
Jul 07 PHP
Zend Framework数据库操作方法实例总结
Dec 11 PHP
php利用ob_start()清除输出和选择性输出的方法
Jan 18 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
详解php伪造Referer请求反盗链资源
Jan 24 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
Apr 02 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
投票管理程序
2006/10/09 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
CodeIgniter框架数据库基本操作示例
2018/05/24 PHP
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
jQuery通过点击行来删除HTML表格行的实现示例
2014/09/10 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
2016/06/22 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
2017/05/22 Javascript
jQuery复合事件结合toggle()方法的用法示例
2017/06/10 jQuery
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
layui type2 通过url给iframe子页面传值的例子
2019/09/06 Javascript
微信小程序实现蓝牙打印
2019/09/23 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
浅谈Python中的数据类型
2015/05/05 Python
python网络编程之数据传输UDP实例分析
2015/05/20 Python
Python 的描述符 descriptor详解
2016/02/27 Python
深入理解Django中内置的用户认证
2017/10/06 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
python线程池threadpool使用篇
2018/04/27 Python
Python实现的本地文件搜索功能示例【测试可用】
2018/05/30 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
2019/09/16 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
合作协议书范本
2014/04/17 职场文书
优秀教师感人事迹材料
2014/05/04 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书