文章相似度

搜索关键词: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

你可能感兴趣的:(文章相似度)