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 相关文章推荐
使用PHPMyAdmin修复论坛数据库的图文方法
Jan 09 PHP
MySQL 日期时间函数常用总结
Jun 12 PHP
非常精妙的PHP递归调用与静态变量使用
Dec 16 PHP
php网页标题中文乱码的有效解决方法
Mar 05 PHP
php中strtotime函数用法详解
Nov 15 PHP
PHP清除字符串中所有无用标签的方法
Dec 01 PHP
在PHP语言中使用JSON和将json还原成数组的方法
Jul 19 PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 PHP
php版银联支付接口开发简明教程
Oct 14 PHP
php通过会话控制实现身份验证实例
Oct 18 PHP
php简单读取.vcf格式文件的方法示例
Sep 02 PHP
Smarty模板类内部原理实例分析
Jul 03 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
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
var与Javascript变量隐式声明
2009/09/17 Javascript
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
javascript中简单的进制转换代码实例
2013/10/26 Javascript
jQuery把表单元素变为json对象
2013/11/06 Javascript
javascript圆盘抽奖程序实现原理和完整代码例子
2014/06/03 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
JavaScript 学习笔记之数据类型
2015/01/14 Javascript
jQuery中unbind()方法用法实例
2015/01/19 Javascript
js控制页面的全屏展示和退出全屏显示的方法
2015/03/10 Javascript
JQuery实现鼠标移动图片显示描述层的方法
2015/06/25 Javascript
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
js实现密码强度检验
2017/01/15 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
配置eslint规范项目代码风格
2019/03/11 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
python入门教程 python入门神图一张
2018/03/05 Python
浅谈pytorch和Numpy的区别以及相互转换方法
2018/07/26 Python
Django实现学员管理系统
2019/02/26 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
Python流程控制 while循环实现解析
2019/09/02 Python
pycharm sciview的图片另存为操作
2020/06/01 Python
如何向scrapy中的spider传递参数的几种方法
2020/11/18 Python
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
设计模式的基本要素是什么
2014/04/21 面试题
幼儿园英语教学反思
2014/01/30 职场文书
信息与计算科学专业推荐信
2014/02/23 职场文书
2014年就业工作总结
2014/11/26 职场文书