字符串最大正向匹配算法說明可以參考其他文章,這裏只做實現。
三個參數:查詢詞 $query,詞典$dict,最大長度,這裏設置爲15
詞典示例:
$dict = array(
'測試字符'=>'測試字符',
'測試'=>'測試',
)
public 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;
}