亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP改進計算字符串相似度的函數similar_text()、levenshtein()

2024-09-04 11:43:09
字體:
來源:轉載
供稿:網友

PHP 原生的similar_text()函數、levenshtein()函數對中文漢字支持不好,我自己寫了一個,測試使用正常,推薦給大家,如果有什么問題,請留言

similar_text()中文漢字版,代碼如下:

  1. <?php  
  2.      //拆分字符串  
  3.      function split_str($str) {  
  4.        preg_match_all("/./u"$str$arr);  
  5.        return $arr[0];  
  6.      }  
  7.        
  8.      //相似度檢測  
  9.      function similar_text_cn($str1$str2) {  
  10.        $arr_1 = array_unique(split_str($str1));  
  11.        $arr_2 = array_unique(split_str($str2));  
  12.        $similarity = count($arr_2) - count(array_diff($arr_2$arr_1));  
  13.          
  14.        return $similarity;  
  15.      }   

levenshtein()中文漢字版,代碼如下:

  1. <?php  
  2.      //拆分字符串  
  3.      function mbStringToArray($string$encoding = 'UTF-8') {  
  4.          $arrayResult = array();  
  5.          while ($iLen = mb_strlen($string$encoding)) {  
  6.              array_push($arrayResult, mb_substr($string, 0, 1, $encoding));  
  7.              $string = mb_substr($string, 1, $iLen$encoding);  
  8.          }  
  9.          return $arrayResult;  
  10.      }  
  11.      //編輯距離  
  12.      function levenshtein_cn($str1$str2$costReplace = 1, $encoding = 'UTF-8') {  
  13.          $count_same_letter = 0;  
  14.          $d = array();  
  15.          $mb_len1 = mb_strlen($str1$encoding);  
  16.          $mb_len2 = mb_strlen($str2$encoding);  
  17.          $mb_str1 = mbStringToArray($str1$encoding);  
  18.          $mb_str2 = mbStringToArray($str2$encoding);  
  19.          for ($i1 = 0; $i1 <= $mb_len1$i1++) {  
  20.              $d[$i1] = array();  
  21.              $d[$i1][0] = $i1;  
  22.          }  
  23.          for ($i2 = 0; $i2 <= $mb_len2$i2++) {  
  24.              $d[0][$i2] = $i2;  
  25.          }  
  26.          for ($i1 = 1; $i1 <= $mb_len1$i1++) {  
  27.              for ($i2 = 1; $i2 <= $mb_len2$i2++) {  
  28.                  // $cost = ($str1[$i1 - 1] == $str2[$i2 - 1]) ? 0 : 1;  
  29.                  if ($mb_str1[$i1 - 1] === $mb_str2[$i2 - 1]) {  
  30.                      $cost = 0;  
  31.                      $count_same_letter++;  
  32.                  } else {  
  33.                      $cost = $costReplace//替換  
  34.                  }  
  35.                  $d[$i1][$i2] = min($d[$i1 - 1][$i2] + 1, //插入  
  36.                  $d[$i1][$i2 - 1] + 1, //刪除  
  37.                  $d[$i1 - 1][$i2 - 1] + $cost);  
  38.              }  
  39.          } //www.49028c.com 
  40.          return $d[$mb_len1][$mb_len2];  
  41.          //return array('distance' => $d[$mb_len1][$mb_len2], 'count_same_letter' => $count_same_letter);  
  42.      }   

最長公共子序列LCS(),代碼如下:

  1. <?php  
  2.          //最長公共子序列英文版  
  3.          function LCS_en($str_1$str_2) {  
  4.            $len_1 = strlen($str_1);  
  5.            $len_2 = strlen($str_2);  
  6.            $len = $len_1 > $len_2 ? $len_1 : $len_2;  
  7.            $dp = array();  
  8.            for ($i = 0; $i <= $len$i++) {  
  9.              $dp[$i] = array();  
  10.              $dp[$i][0] = 0;  
  11.              $dp[0][$i] = 0;  
  12.            }  
  13.            for ($i = 1; $i <= $len_1$i++) {  
  14.              for ($j = 1; $j <= $len_2$j++) {  
  15.                if ($str_1[$i - 1] == $str_2[$j - 1]) {  
  16.                  $dp[$i][$j] = $dp[$i - 1][$j - 1] + 1;  
  17.                } else {  
  18.                  $dp[$i][$j] = $dp[$i - 1][$j] > $dp[$i][$j - 1] ? $dp[$i - 1][$j] : $dp[$i][$j - 1];  
  19.                }  
  20.              }  
  21.            }  
  22.            return $dp[$len_1][$len_2];  
  23.          }  
  24.          //拆分字符串  
  25.          function mbStringToArray($string$encoding = 'UTF-8') {  
  26.            $arrayResult = array();  
  27.            while ($iLen = mb_strlen($string$encoding)) {  
  28.              array_push($arrayResult, mb_substr($string, 0, 1, $encoding));  
  29.              $string = mb_substr($string, 1, $iLen$encoding);  
  30.            }  
  31.            return $arrayResult;  
  32.          }  
  33.          //最長公共子序列中文版  
  34.          function LCS_cn($str1$str2$encoding = 'UTF-8') {  
  35.            $mb_len1 = mb_strlen($str1$encoding);  
  36.            $mb_len2 = mb_strlen($str2$encoding);  
  37.            $mb_str1 = mbStringToArray($str1$encoding);  
  38.            $mb_str2 = mbStringToArray($str2$encoding);  
  39.            $len = $mb_len1 > $mb_len2 ? $mb_len1 : $mb_len2;  
  40.            $dp = array();  
  41.            for ($i = 0; $i <= $len$i++) {  
  42.              $dp[$i] = array();  
  43.              $dp[$i][0] = 0;  
  44.              $dp[0][$i] = 0;  
  45.            }  
  46.            for ($i = 1; $i <= $mb_len1$i++) {  
  47.              for ($j = 1; $j <= $mb_len2$j++) {  
  48.                if ($mb_str1[$i - 1] == $mb_str2[$j - 1]) {  
  49.                  $dp[$i][$j] = $dp[$i - 1][$j - 1] + 1;  
  50.                } else {  
  51.                  $dp[$i][$j] = $dp[$i - 1][$j] > $dp[$i][$j - 1] ? $dp[$i - 1][$j] : $dp[$i][$j - 1];  
  52.                }  
  53.              }  
  54.            }  
  55.            return $dp[$mb_len1][$mb_len2];  
  56.          } 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品第三页| 欧美激情日韩图片| 日韩在线观看av| 国产一区二区激情| 青青草原成人在线视频| 精品亚洲一区二区| 国产亚洲激情视频在线| 日韩有码视频在线| 国产精品精品一区二区三区午夜版| 日本一区二区三区在线播放| 久久伊人免费视频| 亚洲综合国产精品| 成人做爰www免费看视频网站| 色综合久综合久久综合久鬼88| 精品无人区乱码1区2区3区在线| 欧美大尺度电影在线观看| 日本一区二区三区四区视频| 亚洲人成在线一二| 亚洲丝袜av一区| 欧美精品成人在线| 欧美性高潮床叫视频| 日韩黄色在线免费观看| 久久夜色精品国产亚洲aⅴ| 国产91色在线播放| 日韩精品极品毛片系列视频| 成人羞羞国产免费| 日本在线观看天堂男亚洲| 九九精品在线观看| 亚洲第一精品福利| 亚洲国产精品久久| 激情懂色av一区av二区av| 精品成人国产在线观看男人呻吟| 欧美人与性动交| 亚洲视频axxx| 国产拍精品一二三| 久久免费少妇高潮久久精品99| 日本精品视频在线播放| 日韩av毛片网| 亚洲一区二区三区视频播放| 3344国产精品免费看| 亚洲欧美激情一区| 国产精品高潮粉嫩av| 亚洲精品美女免费| 91久久综合亚洲鲁鲁五月天| 琪琪第一精品导航| 98午夜经典影视| 久久精品99久久香蕉国产色戒| 91国内揄拍国内精品对白| 亚洲综合日韩在线| 92国产精品久久久久首页| 精品高清美女精品国产区| 91免费在线视频网站| 国产精品男人的天堂| 日韩在线观看av| 国产午夜精品视频| 欧美成人精品不卡视频在线观看| 综合欧美国产视频二区| 精品中文字幕在线2019| 亚洲午夜精品视频| 久久久久久成人精品| 亚洲欧美制服丝袜| 欧美日韩xxx| 欧美性猛交xxxx富婆| 欧美色图在线视频| 高清欧美性猛交| 亚洲女同性videos| 日韩在线不卡视频| 久久久久久久爱| 欧美猛交ⅹxxx乱大交视频| 久久精品国产96久久久香蕉| 国产欧美久久一区二区| 亚洲老头老太hd| 久久精品男人天堂| 日韩中文字幕在线视频播放| 亚洲品质视频自拍网| 亚洲男人第一av网站| 国产成人avxxxxx在线看| 色老头一区二区三区在线观看| 亚洲欧美成人网| 粉嫩av一区二区三区免费野| 97超碰国产精品女人人人爽| 69av在线视频| 日韩精品欧美国产精品忘忧草| 亚洲欧美日韩国产成人| 欧美性xxxx极品高清hd直播| 国产成人精品优优av| 另类色图亚洲色图| 在线国产精品播放| 精品国产自在精品国产浪潮| 国产成人在线视频| 欧美激情一区二区久久久| 欧美色道久久88综合亚洲精品| 中文国产成人精品久久一| 日韩美女视频免费在线观看| 国产人妖伪娘一区91| 欧美成人免费大片| 2018中文字幕一区二区三区| 92裸体在线视频网站| 岛国av在线不卡| 国产免费一区视频观看免费| 欧美大胆在线视频| 综合激情国产一区| 国产香蕉精品视频一区二区三区| 成年无码av片在线| 国产精品网站入口| 欧美日韩亚洲精品内裤| 日韩中文娱乐网| 国产精品羞羞答答| 亚洲精品久久久久久久久久久| 97高清免费视频| 国产精品视频网| 亚洲国产精彩中文乱码av在线播放| 2019av中文字幕| 日本欧美国产在线| 精品久久久久久国产| 欧美激情在线视频二区| 亚洲精品国产美女| 亚洲精品一区中文| 欧美一级淫片aaaaaaa视频| 欧美一区二区三区四区在线| 亚洲视频在线免费看| 日韩在线观看av| 国产亚洲综合久久| 亚洲色图国产精品| 亚洲2020天天堂在线观看| 亚洲自拍偷拍色片视频| 国产区亚洲区欧美区| 中文字幕亚洲天堂| 亚洲国内精品在线| 国产亚洲人成网站在线观看| 欧美人与性动交a欧美精品| 久久香蕉精品香蕉| 欧美极品在线视频| 亚洲成avwww人| 亚洲一区二区福利| 日韩视频免费在线| 国产成人涩涩涩视频在线观看| 色偷偷av一区二区三区乱| 欧美性猛交xxxx免费看漫画| 亚洲免费av片| 欧美成aaa人片免费看| 国产精品久久久久7777婷婷| 亚洲欧洲成视频免费观看| 色综合视频一区中文字幕| 久久夜色精品国产欧美乱| 亚洲精品丝袜日韩| 欧美性猛交xxxx偷拍洗澡| 久久香蕉精品香蕉| 久久精品男人天堂| 欧美大片在线看免费观看| 亚洲成人久久久| 日日摸夜夜添一区| 国产欧美精品va在线观看| 欧美成人中文字幕| 日本亚洲欧美三级| 国产91精品视频在线观看| 青青在线视频一区二区三区| 成人久久一区二区| 久99九色视频在线观看| 国产剧情日韩欧美| 精品国产乱码久久久久久天美| 亚洲色图13p| 亚洲第一福利视频| 国产精品久久久久久久久粉嫩av|