您好,欢迎访问一九零五行业门户网

PHP改进计算字符串相似度的函数similar_text()、levenshtein(),levenshtein_PHP教程

php改进计算字符串相似度的函数similar_text()、levenshtein(),levenshteinsimilar_text()中文汉字版
复制代码 代码如下:
//拆分字符串 
     function split_str($str) { 
       preg_match_all(/./u, $str, $arr); 
       return $arr[0]; 
     }
//相似度检测 
     function similar_text_cn($str1, $str2) { 
       $arr_1 = array_unique(split_str($str1)); 
       $arr_2 = array_unique(split_str($str2)); 
       $similarity = count($arr_2) - count(array_diff($arr_2, $arr_1));
return $similarity; 
     }
levenshtein()中文汉字版
复制代码 代码如下:
//拆分字符串 
     function mbstringtoarray($string, $encoding = 'utf-8') { 
         $arrayresult = array(); 
         while ($ilen = mb_strlen($string, $encoding)) { 
             array_push($arrayresult, mb_substr($string, 0, 1, $encoding)); 
             $string = mb_substr($string, 1, $ilen, $encoding); 
         } 
         return $arrayresult; 
     } 
     //编辑距离 
     function levenshtein_cn($str1, $str2, $costreplace = 1, $encoding = 'utf-8') { 
         $count_same_letter = 0; 
         $d = array(); 
         $mb_len1 = mb_strlen($str1, $encoding); 
         $mb_len2 = mb_strlen($str2, $encoding); 
         $mb_str1 = mbstringtoarray($str1, $encoding); 
         $mb_str2 = mbstringtoarray($str2, $encoding); 
         for ($i1 = 0; $i1              $d[$i1] = array(); 
             $d[$i1][0] = $i1; 
         } 
         for ($i2 = 0; $i2              $d[0][$i2] = $i2; 
         } 
         for ($i1 = 1; $i1              for ($i2 = 1; $i2                  // $cost = ($str1[$i1 - 1] == $str2[$i2 - 1]) ? 0 : 1; 
                 if ($mb_str1[$i1 - 1] === $mb_str2[$i2 - 1]) { 
                     $cost = 0; 
                     $count_same_letter++; 
                 } else { 
                     $cost = $costreplace; //替换 
                 } 
                 $d[$i1][$i2] = min($d[$i1 - 1][$i2] + 1, //插入 
                 $d[$i1][$i2 - 1] + 1, //删除 
                 $d[$i1 - 1][$i2 - 1] + $cost); 
             } 
         } 
         return $d[$mb_len1][$mb_len2]; 
         //return array('distance' => $d[$mb_len1][$mb_len2], 'count_same_letter' => $count_same_letter); 
     }
最长公共子序列lcs()
复制代码 代码如下:
//最长公共子序列英文版 
         function lcs_en($str_1, $str_2) { 
           $len_1 = strlen($str_1); 
           $len_2 = strlen($str_2); 
           $len = $len_1 > $len_2 ? $len_1 : $len_2; 
           $dp = array(); 
           for ($i = 0; $i              $dp[$i] = array(); 
             $dp[$i][0] = 0; 
             $dp[0][$i] = 0; 
           } 
           for ($i = 1; $i              for ($j = 1; $j                if ($str_1[$i - 1] == $str_2[$j - 1]) { 
                 $dp[$i][$j] = $dp[$i - 1][$j - 1] + 1; 
               } else { 
                 $dp[$i][$j] = $dp[$i - 1][$j] > $dp[$i][$j - 1] ? $dp[$i - 1][$j] : $dp[$i][$j - 1]; 
               } 
             } 
           } 
           return $dp[$len_1][$len_2]; 
         } 
         //拆分字符串 
         function mbstringtoarray($string, $encoding = 'utf-8') { 
           $arrayresult = array(); 
           while ($ilen = mb_strlen($string, $encoding)) { 
             array_push($arrayresult, mb_substr($string, 0, 1, $encoding)); 
             $string = mb_substr($string, 1, $ilen, $encoding); 
           } 
           return $arrayresult; 
         } 
         //最长公共子序列中文版 
         function lcs_cn($str1, $str2, $encoding = 'utf-8') { 
           $mb_len1 = mb_strlen($str1, $encoding); 
           $mb_len2 = mb_strlen($str2, $encoding); 
           $mb_str1 = mbstringtoarray($str1, $encoding); 
           $mb_str2 = mbstringtoarray($str2, $encoding); 
           $len = $mb_len1 > $mb_len2 ? $mb_len1 : $mb_len2; 
           $dp = array(); 
           for ($i = 0; $i              $dp[$i] = array(); 
             $dp[$i][0] = 0; 
             $dp[0][$i] = 0; 
           } 
           for ($i = 1; $i              for ($j = 1; $j                if ($mb_str1[$i - 1] == $mb_str2[$j - 1]) { 
                 $dp[$i][$j] = $dp[$i - 1][$j - 1] + 1; 
               } else { 
                 $dp[$i][$j] = $dp[$i - 1][$j] > $dp[$i][$j - 1] ? $dp[$i - 1][$j] : $dp[$i][$j - 1]; 
               } 
             } 
           } 
           return $dp[$mb_len1][$mb_len2]; 
         }
(100分)[php]写几个你熟悉的字符串处理函数!
addcslashes addslashes bin2hex chop chr chunk_split convert_cyr_string cyrillic
convert_uudecode convert_uuencode count_chars crc32 crc32 crypt echo explode
fprintf get_html_translation_table hebrev
hebrevc
hex2bin — decodes a hexadecimally encoded binary string
html_entity_decode — convert all html entities to their applicable characters
htmlentities — convert all applicable characters to html entities
htmlspecialchars_decode — convert special html entities back to characters
htmlspecialchars — convert special characters to html entities
implode — join array elements with a string
join
lcfirst — make a string's first character lowercase
levenshtein — calculate levenshtein distance between two strings
localeconv — get numeric formatting information
ltrim — strip whitespace (or other characters) from the beginning of a string
md5_file
metaphone — calculate the metaphone key of a string
money_format — formats a number as a currency string
nl_langinfo — query language and locale information
nl2br
number_format — format a number with grouped thousands
ord
parse_str
print
printf
quoted_printable_decode — convert a quoted-printable string to an 8 bit string
quoted_printable_encode — convert a 8 bit string to a quoted-printable string
quotemeta — quote meta characters
rtrim
setlocale — set locale information
sha1_file
sha1
soundex — calculate the soundex key of a string
sprintf — return a formatted string
sscanf — parses input from a string according to a ......余下全文>>
对于php的levenshtein函数可以否给个通俗易懂的解释,手册看不懂
w3school的解释:
levenshtein() 函数返回两个字符串之间的 levenshtein 距离。
levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
例如把 kitten 转换为 sitting:
sitten (k→s)
sittin (e→i)
sitting (→g)
levenshtein() 函数给每个操作(替换、插入和删除)相同的权重。不过,您可以通过设置可选的 insert、replace、delete 参数,来定义每个操作的代价。
说明:“代价”就是权重。楼主的例子中,hello world→ello world,需要“删除”“h”,也就是采用了第五个参数,对应的权重是30,所以返回30.
http://www.bkjia.com/phpjc/901291.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/901291.htmltecharticlephp改进计算字符串相似度的函数similar_text()、levenshtein(),levenshtein similar_text()中文汉字版 复制代码 代码如下: php //拆分字符串 function split...
其它类似信息

推荐信息