亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP改進(jìn)計(jì)算字符串相似度的函數(shù)similar_text()、levenshtein()

 更新時(shí)間:2014年10月27日 09:30:33   投稿:hebedich  
PHP 原生的similar_text()函數(shù)、levenshtein()函數(shù)對(duì)中文漢字支持不好,我自己寫(xiě)了一個(gè),測(cè)試使用正常,推薦給大家,如果有什么問(wèn)題,請(qǐng)留言

similar_text()中文漢字版

復(fù)制代碼 代碼如下:

     <?php 
     //拆分字符串 
     function split_str($str) { 
       preg_match_all("/./u", $str, $arr); 
       return $arr[0]; 
     } 
      
     //相似度檢測(cè) 
     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()中文漢字版
 

復(fù)制代碼 代碼如下:

     <?php 
     //拆分字符串 
     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 <= $mb_len1; $i1++) { 
             $d[$i1] = array(); 
             $d[$i1][0] = $i1; 
         } 
         for ($i2 = 0; $i2 <= $mb_len2; $i2++) { 
             $d[0][$i2] = $i2; 
         } 
         for ($i1 = 1; $i1 <= $mb_len1; $i1++) { 
             for ($i2 = 1; $i2 <= $mb_len2; $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); 
     }  

 
最長(zhǎng)公共子序列LCS()

 
復(fù)制代碼 代碼如下:

         <?php 
         //最長(zhǎng)公共子序列英文版 
         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 <= $len; $i++) { 
             $dp[$i] = array(); 
             $dp[$i][0] = 0; 
             $dp[0][$i] = 0; 
           } 
           for ($i = 1; $i <= $len_1; $i++) { 
             for ($j = 1; $j <= $len_2; $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; 
         } 
         //最長(zhǎng)公共子序列中文版 
         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 <= $len; $i++) { 
             $dp[$i] = array(); 
             $dp[$i][0] = 0; 
             $dp[0][$i] = 0; 
           } 
           for ($i = 1; $i <= $mb_len1; $i++) { 
             for ($j = 1; $j <= $mb_len2; $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]; 
         }

相關(guān)文章

  • 解析isset與is_null的區(qū)別

    解析isset與is_null的區(qū)別

    isset是語(yǔ)句, 和echo, print一樣, 是PHP本身的一種語(yǔ)言結(jié)構(gòu). 而is_null是函數(shù), 和我們一般的函數(shù)一樣, 可以做為可變函數(shù)調(diào)用
    2013-08-08
  • php simplexmlElement操作xml的命名空間實(shí)現(xiàn)代碼

    php simplexmlElement操作xml的命名空間實(shí)現(xiàn)代碼

    這是今天中午發(fā)生的事情,有人在群里求助,比如xml中如果標(biāo)記是<xx:xxxx>content</xx:xxxx>這樣的情況下,取不到 xx:xxxx 為下標(biāo)的值。
    2011-01-01
  • require(),include(),require_once()和include_once()區(qū)別

    require(),include(),require_once()和include_once()區(qū)別

    面試中最容易提到的一個(gè)PHP的問(wèn)題,我想和大家共勉一下: require()和include()有許多相似之處,也有些不同。理解它們的不同點(diǎn)非常重要,否則很容易犯錯(cuò)誤。
    2008-03-03
  • php輸出xml屬性的方法

    php輸出xml屬性的方法

    這篇文章主要介紹了php輸出xml屬性的方法,實(shí)例分析了php操作XML文件attributes方法的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • PHP如何限制定時(shí)任務(wù)的進(jìn)程數(shù)量

    PHP如何限制定時(shí)任務(wù)的進(jìn)程數(shù)量

    這篇文章主要給大家介紹了關(guān)于PHP如何限制定時(shí)任務(wù)進(jìn)程數(shù)量的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • CURL狀態(tài)碼列表(詳細(xì))

    CURL狀態(tài)碼列表(詳細(xì))

    本篇文章是對(duì)CURL狀態(tài)碼列表進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • php輸出全球各個(gè)時(shí)區(qū)列表的方法

    php輸出全球各個(gè)時(shí)區(qū)列表的方法

    這篇文章主要介紹了php輸出全球各個(gè)時(shí)區(qū)列表的方法,自定義了一個(gè)數(shù)組變量用于存放全球各個(gè)時(shí)區(qū)信息,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • PHP封裝函數(shù)實(shí)現(xiàn)生成隨機(jī)的字符串驗(yàn)證碼

    PHP封裝函數(shù)實(shí)現(xiàn)生成隨機(jī)的字符串驗(yàn)證碼

    這篇文章主要介紹了利用PHP封裝函數(shù)實(shí)現(xiàn)生成隨機(jī)的字符串驗(yàn)證碼的相關(guān)資料,文中給出了詳細(xì)的介紹的示例代碼,對(duì)大家具有一定的參考價(jià)值,有需要的朋友們可以一起來(lái)學(xué)習(xí)學(xué)習(xí)。
    2017-01-01
  • PHP5全版本繞過(guò)open_basedir讀文件腳本漏洞詳細(xì)介紹

    PHP5全版本繞過(guò)open_basedir讀文件腳本漏洞詳細(xì)介紹

    這篇文章主要介紹了PHP5全版本繞過(guò)open_basedir讀文件腳本漏洞詳細(xì)介紹,這個(gè)漏洞很久之前(大概5年前)被提出來(lái)了,到現(xiàn)在的最新版本中依然存在,需要的朋友可以參考下
    2015-01-01
  • 一個(gè)不易被發(fā)現(xiàn)的PHP后門(mén)代碼解析

    一個(gè)不易被發(fā)現(xiàn)的PHP后門(mén)代碼解析

    這篇文章主要介紹了一個(gè)不易被發(fā)現(xiàn)的PHP后門(mén)代碼解析,對(duì)于網(wǎng)絡(luò)安全來(lái)說(shuō)非常重要,需要的朋友可以參考下
    2014-07-07

最新評(píng)論