「PHP源码」文章原创度检测源码

2022-10-11 21:20:21 116 0
魁首哥

前言

本次原创度检测源代使用百度搜索为准。

首先拼凑百度搜索的url,并且百度限制了搜索词在38个汉字以内,其他的会被丢弃。

关键词

好了,现在百度搜索的url也有了,那怎么检查一篇文章的原创度了?

PHPcurl访问函数源代码

 function curl($url){
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL,$url);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
		$httpheader[] = "Accept:*/*";
		$httpheader[] = "Accept-Encoding:gzip,deflate,sdch";
		$httpheader[] = "Accept-Language:zh-CN,zh;q=0.8";
		$httpheader[] = "Connection:close";
		curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);
		curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0');
		curl_setopt($ch, CURLOPT_ENCODING, "gzip");
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
		$ret = curl_exec($ch);
		curl_close($ch);
		return $ret;
	}  

首先要把一篇文章的所有html标签去掉,那就需要使用以下代码,去除无用的html和字符了。

 function ClearHtml($str){ 
    $str = trim($str);
    $str = strip_tags($str,"");
    $str = preg_replace("/\t/","",$str);
    $str = preg_replace("/\r\n/","",$str); 
    $str = preg_replace("/\r/","",$str); 
    $str = preg_replace("/\n/","",$str); 
    $str = preg_replace("/ /","",$str);
    $str = preg_replace("/  /","",$str);
    return trim($str); 
}  

然后就要把重新整理好的文章分隔成为每38个汉字为一组的数组,所使用的代码为

 function mbStrSplit ($string, $len=38) {
  $start = 0;
  $strlen = mb_strlen($string);
  while ($strlen) {
    $array[] = mb_substr($string,$start,$len,"utf8");
    $string = mb_substr($string, $len, $strlen,"utf8");
    $strlen = mb_strlen($string);
  }
  return $array;
}  

如果你的PHP环境为PHP7.4可直接使用以下内置函数把文章分割为38个汉字为一组,不过我这里是使用的上面的,暂时没有搭建最新的PHP环境。

 mb_str_split ( string $string [, int $split_length = 1 [, string $encoding = mb_internal_encoding() ]] ) : array

注:
  

以下为文章中其中一个38个汉字的原创度获取源代码,我就不一一解释了,我感觉我这里代码写的不太好,如果您有优化好的,请回复,谢谢。

 
function bdycl($content){

$info=curl('#39;.urlencode($content));
preg_match_all("/
(.*?)<\/div>(.*?)href=\"(.*?)\"/is", $info,$baidu); $count1=count($baidu['1']); for($i=0;$i<$count1;$i++){ preg_match_all("/(.*?)<\/em>/is", $baidu['1'][$i],$baidu_em); $count=count($baidu_em[1]); if($count>1){ $baiduem=''; foreach($baidu_em[1] as $value){ $baiduem.=$value; } $bdem[]=[ 'content'=>$baiduem, 'url'=>$baidu['3'][$i] ]; }else{ $bdem[]=[ 'content'=>@$baidu_em[1][0], 'url'=>$baidu['3'][$i] ]; } } if(is_array($bdem)){ $count=count($bdem); $in=[]; for($i=0;$i<$count;$i++){ similar_text($content,$bdem[$i]['content'],$per); $ii=ceil($per); $similar[]=$ii; if($ii>90){ $in[]=[ 'similar'=>$ii, "content"=>$bdem[$i]['content'], 'url'=>$bdem[$i]['url'] ]; } } array_multisort(array_column($in,'similar'),SORT_DESC,$in); if(isset($in['0'])){ $in=$in['0']; } return ['similar'=>(100-array_sum($similar)/count($bdem)),'content'=>$in]; } }

单独一个原创度检测

单独一组38个汉字咱们已经写完了,现在需要来一个查询多组的。以下为源代码

 function ycl($content){
	$info=mbStrSplit($content);
	$count=count($info)-1;
	if($count<11){
		$rand=$count+1;
	}else{
		$rand='10';
	}
	$tmp = range(0,$count);
	$array_rand=array_rand($tmp,$rand);

	foreach($array_rand as $v){
		$ycl[]=bdycl($info[$v]);

	}
	$count=count($ycl);
	for($i=0;$i<$count;$i++){
		$similar[$i]=$ycl[$i]['similar'];
	}
	$ycd=ceil(((array_sum($similar)/count($ycl))));

	if($ycd <=30){
		$str = "原创度非常低,不建议发布。";
	}else if($ycd <=60 && $ycd > 30){
		$str = "原创度比较低,建议修改后再发布。";
	}else if($ycd <=75 && $ycd > 60){
		$str = "原创度还可以,建议修改后再发布。";
	}else if($ycd <= 85 && $ycd > 75){
		$str = "原创度较好,属于原创文章,可以发布。";
	}else if($ycd > 85){
		$str = "原创度非常棒,属于原创文章,可以发布。";
	}
	
	return ['ycl'=>$ycd,'info'=>$str]; 
	
}  

然后随便从网上找一篇文章,进行检测的结果为:

好了,到此结束,谢谢大家的观看。

收藏
分享
海报
0 条评论
116
上一篇:PHP代码审计之SQL注入-第二回 下一篇:PHP7中的异常与错误处理

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码