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 相关文章推荐
Discuz Uchome ajaxpost小技巧
Jan 04 PHP
PHP目录函数实现创建、读取目录教程实例
Jan 13 PHP
解析php中反射的应用
Jun 18 PHP
PHP获取当前页面URL函数实例
Oct 22 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
Mar 24 PHP
PHP获取当前相对于域名目录的方法
Jun 26 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 PHP
PHP多进程编程总结(推荐)
Jul 18 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
Mar 15 PHP
PHP实现生成数据字典功能示例
May 24 PHP
PHP正则表达式笔记与实例详解
May 09 PHP
PHP INT类型在内存中占字节详解
Jul 20 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
一个ubbcode的函数,速度很快.
2006/10/09 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
javascript event 事件解析
2011/01/31 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
jQuery ajax调用WCF服务实例
2014/07/16 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
图解Sublime Text3使用技巧
2015/12/21 Javascript
JS动态改变浏览器标题的方法
2016/04/06 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
Vue作用域插槽slot-scope实例代码
2018/09/05 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
2018/11/16 Javascript
微信小程序提交form操作示例
2018/12/30 Javascript
js+html实现点名系统功能
2019/11/05 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
[08:47]DOTA2每周TOP10 精彩击杀集锦vol.6
2014/06/25 DOTA
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
[52:02]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第二场 2月26日
2021/03/11 DOTA
Python爬虫利用cookie实现模拟登陆实例详解
2017/01/12 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
python函数map()和partial()的知识点总结
2020/05/26 Python
法国珠宝店:CLEOR
2017/01/29 全球购物
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
个人找工作的自我评价
2013/10/17 职场文书
2014村务公开实施方案
2014/02/25 职场文书
大学新生军训自我鉴定
2014/09/18 职场文书
解析CSS 提取图片主题色功能(小技巧)
2021/05/12 HTML / CSS