搜索关键词:php 文章相似度
1,php自带函数:
similar_text — 计算两个字符串的相似度
int similar_text ( string $first , string $second [, float &$percent ] )
$first 必需。规定要比较的第一个字符串。
$second 必需。规定要比较的第二个字符串。
$percent 可选。规定供存储百分比相似度的变量名。
2,网上摘录的比较靠谱的匹配类:
classLCS {
var$str1;
var$str2;
var$c=array();
/*返回串一和串二的最长公共子序列
*/
functiongetLCS($str1,$str2,$len1= 0,$len2= 0) {
$this->str1 =$str1;
$this->str2 =$str2;
if($len1== 0)$len1=strlen($str1);
if($len2== 0)$len2=strlen($str2);
$this->initC($len1,$len2);
return$this->printLCS($this->c,$len1- 1,$len2- 1);
}
/*返回两个串的相似度
*/
functiongetSimilar($str1,$str2) {
$len1=strlen($str1);
$len2=strlen($str2);
$len=strlen($this->getLCS($str1,$str2,$len1,$len2));
return$len* 2 / ($len1+$len2);
}
functioninitC($len1,$len2) {
for($i= 0;$i<$len1;$i++)$this->c[$i][0] = 0;
for($j= 0;$j<$len2;$j++)$this->c[0][$j] = 0;
for($i= 1;$i<$len1;$i++) {
for($j= 1;$j<$len2;$j++) {
if($this->str1[$i] ==$this->str2[$j]) {
$this->c[$i][$j] =$this->c[$i- 1][$j- 1] + 1;
}elseif($this->c[$i- 1][$j] >=$this->c[$i][$j- 1]) {
$this->c[$i][$j] =$this->c[$i- 1][$j];
}else{
$this->c[$i][$j] =$this->c[$i][$j- 1];
}
}
}
}
functionprintLCS($c,$i,$j) {
if($i== 0 ||$j== 0) {
if($this->str1[$i] ==$this->str2[$j])return$this->str2[$j];
elsereturn"";
}
if($this->str1[$i] ==$this->str2[$j]) {
return$this->printLCS($this->c,$i- 1,$j- 1).$this->str2[$j];
}elseif($this->c[$i- 1][$j] >=$this->c[$i][$j- 1]) {
return$this->printLCS($this->c,$i- 1,$j);
}else{
return$this->printLCS($this->c,$i,$j- 1);
}
}
}
$lcs=newLCS();
//返回最长公共子序列
$lcs->getLCS("hello word","hello china");
//返回相似度
echo$lcs->getSimilar("吉林禽业公司火灾已致112人遇难","吉林宝源丰禽业公司火灾已致112人遇难");
php文章相似度计算http://www.fkblog.org/blog1297