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中ADODB类详解
Mar 25 PHP
深入PHP中的HashTable结构详解
Jun 13 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
Jun 21 PHP
PHP 使用pcntl和libevent 实现Timer功能
Oct 27 PHP
PHP IE中下载附件问题解决方法
Jan 07 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
php格式化日期实例分析
Nov 12 PHP
php利用scws实现mysql全文搜索功能的方法
Dec 25 PHP
twig模板获取全局变量的方法
Feb 05 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 PHP
阿里云服务器搭建Php+Apache运行环境的详细过程
May 15 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模板引擎SMARTY
2006/10/09 PHP
jQuery 源码分析笔记
2011/05/25 PHP
关于crontab的使用详解
2013/06/24 PHP
CodeIgniter针对数据库的连接、配置及使用方法
2016/03/03 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
php实现将数据做成json的格式给前端使用
2018/08/21 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
EasyUI中的tree用法介绍
2011/11/01 Javascript
JavaScript常用对象的方法和属性小结
2012/01/24 Javascript
原生JS实现拖拽图片效果
2020/08/27 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
深入理解jquery的$.extend()、$.fn和$.fn.extend()
2017/07/08 jQuery
ExtJs整合Echarts的示例代码
2018/02/27 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
Vue 实现对quill-editor组件中的工具栏添加title
2020/08/03 Javascript
如何利用 JS 脚本实现网页全自动秒杀抢购功能
2020/10/12 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
Python中的ConfigParser模块使用详解
2015/05/04 Python
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
Python函数装饰器原理与用法详解
2019/08/16 Python
浅析使用Python搭建http服务器
2019/10/27 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
TripAdvisor台湾:全球最大旅游网站
2018/08/26 全球购物
Ajxa常见问题都有哪些
2014/03/26 面试题
大学生求职信范文应怎么写
2014/01/01 职场文书
公司司机岗位职责
2014/02/07 职场文书
事务机电主管工作职责
2014/02/25 职场文书
法院授权委托书格式
2014/09/28 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
委托书格式范文
2015/01/28 职场文书
实例讲解Python中sys.argv[]的用法
2021/06/03 Python