短视频自媒体创业
全国咨询微信:4761160

相关文章标题分词匹配搜索相关度高的文章标题帝国CMS适合

发布时间:2020-12-27 17:49:01 人气:

我以前的文章分享的相关文章的代码有两种:1、通过关键词调取相关文章。2、通过标题相似度进行匹配相关文章。今天我分享一个标题分词的方式进行相关文章的调取匹配,应该更方便精准一些。

这个代码原作者是2010年发布的,只适用于php普通站的代码,但是我想用在帝国CMS系统模板中,还是经过一凡的折腾测试,才能移植到帝国CMS模板中,现在这个站文章内容模板相关调取就是用的此代码。

标题分词调取相关文章代码

首先在帝国CMS的e/class/functions.php 文件中最下面增加以下代码:

//下面是中文分词函数 
function ChineseWordSegment($str){ 
$words = array(); 
//utf-8 编码的正则,分别意思是: 英文符号与空格|英文及数字|汉字范围一|汉字范围二 
//汉字占三个字符 
$pa = "/[[:punct:]|\\s_]+|[a-z0-9]+|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]/mi"; 
//若网站是 gb2312 编码,则汉字占两个字符,正则应改为 
//$pa = "/[[:punct:]|\\s_]+|[a-z0-9]+|[\x80-\xff]{2}/mi"; 
//排除汉字中的符号 
$punctcn = "~!·#¥%…—*()—+{}[]|、;:‘’“”,。《》?/ "; 
//按正则把$str分割成数组 $r 
//$r元素的值可能为:一串英文符号与空格,一串英文及数字,一个汉字或汉字符号 
preg_match_all($pa,$str,$r); 
$lv = ''; 
//把相临的2个汉字组成一个"词" 
foreach($r[0] as $k=>$v) { 
//如果不是汉字 
//过滤掉英文符号或空格,单个字母或数字 
//不和前一个元素组合,而自成一个"词" 
if(ord($v[0])<128){ 
if(preg_match('/^[a-z0-9]{2,}$/i',$v)) $words[] = $v; 
$lv = ''; 
continue; 
} 
//如果是汉字符号,过滤掉,不组"词" 
if(strrchr($punctcn,$v)){ 
$lv = ''; 
continue; 
} 
//汉字,和前一个汉字组成一个"词" 
if($lv) $words[] = $lv.$v; 
$lv = $v; 
} 
return $words; 
} 

//计算一个词语在内容中出现的次数 
function showtimes($word,$content){ 
$nc = str_replace("$word","",$content); 
return (strlen($content)-strlen($nc))/strlen($word); 
}

分词代码.txt

这段代码放在模板中无法运行,所以放在这个文件中在模板中直接调取相应的函数即可,这个分词是一个简单的分词方式,但是用在这个相关文章中足够了,如果想复杂的分词方式可以使用百度分词的接口,这里没没有做百度的分词接口。

下面的代码放在内容模板相关文章的位置:

<?
$title=$navinfor['ftitle']?$navinfor['ftitle']:$navinfor['title'];
$id=$navinfor[id] ;
$conte=$navinfor[newstext];
$words = ChineseWordSegment($title); 
$sqlstr = '('; 
foreach($words as $k=>$w){ 
$im = 1 + showtimes($w,strip_tags($conte)); 
$sqlstr .= ($k?'+':'')."(`title` like '%".$w."%')*$im"; 
} 
$sqlstr .= ")"; 
$mysql = "select * ,$sqlstr as mylike from {$dbtbpre}ecms_news where id<>$id and $sqlstr order by mylike desc limit 6"; 
$sql=$empire->query($mysql);
 while($bqr=$empire->fetch($sql)){ ?>
<li><a href="<?=$bqr['titleurl']?>"  title="<?=$bqr['title']?>" target="_self"><h3><?=$bqr['title']?></h3></a></li>
<? } ?>


模板调用代码.txt

不需要其他复杂的设置了,这样就可以调取相关文章了。

在线客服
联系方式

微信号

4761160

上班时间

周一到周五

二维码
线