PHP简单实现“相关文章推荐”功能的方法

yipeiwu_com5年前PHP代码库

通常在做内容网站的时候,需要在每一篇文章中出现与该文章相关的文章列表。对于大多数人来说,使用的方法通常是:建立一个关键词列表,判断每篇文章包含有那些关键词,最后根据关键词找出与某篇文章最相关的文章。对于内容比较复杂的网站,确定关键列表词显然会比较麻烦。

本文介绍了与以往方法不同的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图像处理函数imagecopyresampled用法详解

本文实例讲述了php图像处理函数imagecopyresampled用法。分享给大家供大家参考,具体如下: 语法 复制代码 代码如下:bool imagecopyresampled (...

php面向对象中static静态属性和静态方法的调用

本文实例讲述了php中static静态属性和静态方法的调用。分享给大家供大家参考。具体如下: 这里分析了php面向对象中static静态属性和静态方法的调用。关于它们的调用(能不能调用,...

PHP XML操作的各种方法解析(比较详细)

PHP XML操作的各种方法解析(比较详细)

XML是一种流行的半结构化文件格式,以一种类似数据库的格式存储数据。在实际应用中,一些简单的、安全性较低的数据往往使用 XML文件的格式进行存储。这样做的好处一方面可以通过减少与数据库的...

PHP获取当前url的具体方法全面解析

我们今天向大家介绍的是有关PHP获取当前url的函数的具体方法,通过对这个函数方法的了解,进一步加深我们对PHP语言的认识,提高我们的学习水平。 PHP 5.0构造函数的实例讲解 PH...

PHP提示Notice: Undefined variable的解决办法

PHP默认配置会报这个错误,我的PHP版本是5.2.13,存在这个问题: Notice: Undefined variable 这就是将警告在页面上打印出来,虽然这是有利于暴露问题,但实...