中文比较查找的问题!绝对给分! php中有个字符相似性比较函数,不过是字型层面的,不能完成字意比较的任务。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 问题很麻烦,我给你一个相似的程序。希望对你有帮助class Find{ var $array_str; var $arra; function Find(){ $fpsql="select keyword from mykeyword"; $query=mysql_query($fpsql); $ii=0; $jj=0; $i=0; $j=0; while($array=mysql_fetch_array($query)) { $this->arra[$ii]=$array[0]; $stra=join($stra,$this->arra); $strc=$stra; $stra=substr($stra,strlen($strb),strlen($stra)-strlen($strb)); while($i<strlen($stra)) { if(ord(substr($stra,$i,1))>0xa0) { $this->array_str[$jj][$j]=substr($stra,$i,2); $i=$i+2; } else { $this->array_str[$jj][$j]=substr($stra,$i,1); $i++; } $j++; } $strb=$strc; $stra=""; $ii++; $jj++; $i=0; $j=0; } } function F_Result($str){ for($i=0;$i<sizeof($this->arra);$i++) { $j=0; $k=0; $stra=""; $strb=""; while($this->array_str[$i][$j]!="") { $position[$k]=strchr($str,$this->array_str[$i][$j]); if(!empty($position[$k])) $k++; $j++; } if($k==$j) { for($jj=0;$jj<$k;$jj++) { if(strlen($position[$jj])>=strlen($position[$jj+1])) { $stra=$stra."1"; $strb=$strb."1"; } else $stra=$stra."0"; } if(substr($stra,strlen($stra)-1,1)==0) $stra=substr($stra,0,strlen($stra)-1); if(strcmp($stra,$strb)==0) return true; } } return false; }}先把汉字一个分开,然后再去字符串查找。然后组合。 <?$a="我是个中国人";$b="我真的是一个中国人";$c="我确确实实是一个中国人";$d="我从来都是确确实实的中国人";$array=array($a,$b,$c,$d);$fz="我永远都是一个中国人";function cstrcmp($basestr,$cmpstr){ for($i=0;$i*2<strlen($basestr);$i++){ ${"basearray".$i}=substr($basestr,$i*2,2); for($j=0;$j*2<strlen($cmpstr);$j++){ ${"cmparray".$j}=substr($cmpstr,$j*2,2); if(${"basearray".$i}==${"cmparray".$j}) $count=$count+2; } } $len=strlen($cmpstr); $percent=sprintf("%2.2f",$count/($len)*100); return $percent;}foreach($array as $cmpstr){ $cmparray[$cmpstr]=cstrcmp($fz,$cmpstr);}$maxval=max($cmparray);while(list($key,$val)=each($cmparray)){ if($val==$maxval) echo $key." 吻合度 %".$val."<br>";}?> PHP正则分割字符串的一个问题 coreseek/sphinx 多个查询条件 ajax与php二级菜单联动无法post到值求大神指点 javascript高手帮帮忙 <?= xxx ?>是什么 请教一个简单的SQL 求助在linux下配置php Moregroupware,哪位高手接触过? 问个关于取得客户端信息的问题。 API接口通常是怎么加密的? 请教:急:急:我的MYSQL为什么只能输入127条记录?? 哪位能详细谈谈PHP在MySQL中rollback的使用方法。
var $array_str;
var $arra;
function Find(){
$fpsql="select keyword from mykeyword";
$query=mysql_query($fpsql);
$ii=0;
$jj=0;
$i=0;
$j=0;
while($array=mysql_fetch_array($query))
{
$this->arra[$ii]=$array[0];
$stra=join($stra,$this->arra);
$strc=$stra;
$stra=substr($stra,strlen($strb),strlen($stra)-strlen($strb));
while($i<strlen($stra))
{
if(ord(substr($stra,$i,1))>0xa0)
{
$this->array_str[$jj][$j]=substr($stra,$i,2);
$i=$i+2;
}
else
{
$this->array_str[$jj][$j]=substr($stra,$i,1);
$i++;
}
$j++;
}
$strb=$strc;
$stra="";
$ii++;
$jj++;
$i=0;
$j=0;
}
} function F_Result($str){
for($i=0;$i<sizeof($this->arra);$i++)
{
$j=0;
$k=0;
$stra="";
$strb="";
while($this->array_str[$i][$j]!="")
{
$position[$k]=strchr($str,$this->array_str[$i][$j]);
if(!empty($position[$k]))
$k++;
$j++;
}
if($k==$j)
{
for($jj=0;$jj<$k;$jj++)
{
if(strlen($position[$jj])>=strlen($position[$jj+1]))
{
$stra=$stra."1";
$strb=$strb."1";
}
else
$stra=$stra."0";
}
if(substr($stra,strlen($stra)-1,1)==0)
$stra=substr($stra,0,strlen($stra)-1);
if(strcmp($stra,$strb)==0)
return true;
}
}
return false;
}
}
先把汉字一个分开,然后再去字符串查找。然后组合。
$a="我是个中国人";
$b="我真的是一个中国人";
$c="我确确实实是一个中国人";
$d="我从来都是确确实实的中国人";
$array=array($a,$b,$c,$d);
$fz="我永远都是一个中国人";
function cstrcmp($basestr,$cmpstr){
for($i=0;$i*2<strlen($basestr);$i++){
${"basearray".$i}=substr($basestr,$i*2,2);
for($j=0;$j*2<strlen($cmpstr);$j++){
${"cmparray".$j}=substr($cmpstr,$j*2,2);
if(${"basearray".$i}==${"cmparray".$j})
$count=$count+2;
}
}
$len=strlen($cmpstr);
$percent=sprintf("%2.2f",$count/($len)*100);
return $percent;
}
foreach($array as $cmpstr){
$cmparray[$cmpstr]=cstrcmp($fz,$cmpstr);
}
$maxval=max($cmparray);
while(list($key,$val)=each($cmparray)){
if($val==$maxval)
echo $key." 吻合度 %".$val."<br>";
}
?>