一、介绍
用于比较两段文字内容的重复率
二、运行结果
三、代码
<?php
class GetSimilar { function __construct ( ) { } function getSimilar ( $str1 , $str2 ) { $len1 = strlen ( $str1 ) ; $len2 = strlen ( $str2 ) ; $len = strlen ( $this - > getLCS ( $str1 , $str2 , $len1 , $len2 ) ) ; return $len * 2 / ( $len1 + $len2 ) ; } function getLCS ( $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 ) ; } function initC ( $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 ; } else if ( $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 ] ; } } } } function printLCS ( $c , $i , $j ) { if ( $i == 0 || $j == 0 ) { if ( $this - > str1 [ $i ] == $this - > str2 [ $j ] ) return $this - > str2 [ $j ] ; else return "" ; } if ( $this - > str1 [ $i ] == $this - > str2 [ $j ] ) { return $this - > printLCS ( $this - > c , $i - 1 , $j - 1 ) . $this - > str2 [ $j ] ; } else if ( $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 ) ; } } function test ( ) { echo 123 ; }
}
$GetSimilar = new GetSimilar ( ) ;
$str1 = '这是一个字符串相似度计算的例子' ;
$str2 = '这个例子用来计算字符串相似度的例子' ;
$similarRate = $GetSimilar - > getSimilar ( $str1 , $str2 ) ;
echo '字符串1:' . $str1 ;
echo "<br>" ;
echo '字符串2:' . $str2 ;
echo "<br>" ;
echo '结果:' . $similarRate ;