溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP如何實(shí)現(xiàn)最大正向匹配算法

發(fā)布時(shí)間:2021-06-22 15:21:25 來(lái)源:億速云 閱讀:172 作者:小新 欄目:開(kāi)發(fā)技術(shù)

小編給大家分享一下PHP如何實(shí)現(xiàn)最大正向匹配算法,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

正向最大匹配算法:從左到右將待分詞文本中的幾個(gè)連續(xù)字符與詞表匹配,如果匹配上,則切分出一個(gè)詞。但這里有一個(gè)問(wèn)題:要做到最大匹配,并不是第一次匹配到就可以切分的 。

函數(shù)中包含三個(gè)參數(shù):

$query   查詢?cè)~
$dict    詞典
$max_len 最大長(zhǎng)度(這里默認(rèn)值設(shè)置為15)

詞典示例:

$dict = array(
  '億速云'=>'億速云',
  '腳本下載'=>'腳本下載',
  'JS編程'=>'JS編程'
);

函數(shù)定義:

/*
 * $query 查詢?cè)~
 * $dict 詞典
 * $max_len 最大長(zhǎng)度
 */
function extractWords($query,$dict,$max_len=15){
    $feature = "";
    $slen=mb_strlen($query,'UTF8');
    $c_bg = 0;
    while($c_bg<$slen){
      $matched = false;
      $c_len =(($slen-$c_bg)>$max_len)?$max_len:($slen-$c_bg);
      $t_str = mb_substr($query, $c_bg,$c_len,'UTF8');
      for($i=$c_len;$i>1;$i--){
        $ttts = mb_substr($t_str, 0,$i,'UTF8');
          if(!empty($dict[$ttts])){
//          echo 'matched = '.$ttts.PHP_EOL;
            $matched = true;
            $c_bg += $i;
            if(!empty($feature)){
              $feature.=",";
            }
            $feature.=$ttts;
            break;
          }
      }
      if(!$matched){
        $c_bg++;
      }
    }
    echo $feature.PHP_EOL;
}

使用方法:

$query='歡迎訪問(wèn)億速云!億速云是國(guó)內(nèi)專業(yè)的網(wǎng)站,提供各種腳本下載及JS、Python、php等編程資料';
extractWords($query,$dict);

運(yùn)行結(jié)果:

億速云,億速云,腳本下載

看完了這篇文章,相信你對(duì)“PHP如何實(shí)現(xiàn)最大正向匹配算法”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI