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与ASP
Oct 09 PHP
从C/C++迁移到PHP——判断字符类型的函数
Oct 09 PHP
php 分页函数multi() discuz
Jun 21 PHP
php Smarty date_format [格式化时间日期]
Mar 15 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
Jun 03 PHP
解决File size limit exceeded 错误的方法
Jun 14 PHP
ThinkPHP3.2.2的插件控制器功能简述
Jul 09 PHP
PHP微信红包API接口
Dec 05 PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 26 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
实例分析PHP将字符串转换成数字的方法
Jan 27 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 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
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
禁止js文件缓存的代码
2010/04/09 Javascript
jQuery的控件及事件(输入控件及回车事件)使用示例
2013/07/25 Javascript
javascript获取URL参数与参数值的示例代码
2013/12/20 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
2016/07/22 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
详解Vue中添加过渡效果
2017/03/20 Javascript
JS实现按钮控制计时开始和停止功能
2017/07/27 Javascript
JavaScript中正则表达式判断匹配规则及常用方法
2017/08/03 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
微信小程序实现循环动画效果
2018/07/16 Javascript
angular 数据绑定之[]和{{}}的区别
2018/09/25 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
[20:21]《一刀刀一天》第十六期:TI国际邀请赛正式打响,总奖金超过550万
2014/05/23 DOTA
python的正则表达式re模块的常用方法
2013/03/09 Python
python访问抓取网页常用命令总结
2017/04/11 Python
django站点管理详解
2017/12/12 Python
python实现百度语音识别api
2018/04/10 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
python读出当前时间精度到秒的代码
2019/07/05 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
python re模块匹配贪婪和非贪婪模式详解
2020/02/11 Python
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
应届生污水处理求职信
2013/11/06 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
2014教师研修学习体会
2014/07/08 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
公司股份合作协议书
2014/12/07 职场文书
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL