ホームページ  >  記事  >  バックエンド開発  >  PHP 単項単語分割アルゴリズムのコード例

PHP 単項単語分割アルゴリズムのコード例

怪我咯
怪我咯オリジナル
2017-07-14 11:05:321463ブラウズ

一元分词:指语句中每个字都成词,按字切分,不去组合,类似英文单词。UTF8编码下一个字符如果首字符ASCII码不大于192则只占1个字节 。如果首字符ASCII码大于192小于224则占用2个字节,否则占用3个字节 ,一元分词需要在mysql的my.ini文件中增加 ft_min_word_len=1 

 代码如下:

/** 
* 一元分词算法 
* 可以使用mysql查询语句 show variables like '%ft%' 查看mysql全文搜索相关设置 
* 
* @access global 
* @param string $str 
* @param boolean $unique 是否去除重复值 
* @param boolean $merge 是否合并附加值 
* @return array 
*/ 
function seg_word($str,$unique=false,$merge=true) 
{ 
$str = trim(strip_tags($str)); 
$strlen = strlen($str); 
if($strlen == 0) return array(); 
$spc = ' '; 
//按需增加需要过滤的字符 
$search = array(&#39;,&#39;, &#39;/&#39;, &#39;\\&#39;, &#39;.&#39;, &#39;;&#39;, &#39;:&#39;, &#39;\&#39;&#39;, &#39;!&#39;, &#39;~&#39;,&#39;"&#39;, &#39;`&#39;, &#39;^&#39;, &#39;(&#39;, &#39;)&#39;, &#39;?&#39;, &#39;-&#39;, "\t", "\n", &#39;\&#39;&#39;, &#39;<&#39;, &#39;>&#39;, "\r", "\r\n", &#39;\$&#39;, &#39;&&#39;, &#39;%&#39;, &#39;#&#39;, &#39;@&#39;, &#39;+&#39;, &#39;=&#39;, &#39;{&#39;, &#39;}&#39;, &#39;[&#39;, &#39;]&#39;, &#39;)&#39;, &#39;(&#39;, &#39;.&#39;, &#39;。&#39;, &#39;,&#39;, &#39;!&#39;, &#39;;&#39;, &#39;“&#39;, &#39;”&#39;, &#39;‘&#39;, &#39;&#39;&#39;, &#39;[&#39;, &#39;]&#39;, &#39;、&#39;, &#39;—&#39;, &#39; &#39;, &#39;《&#39;, &#39;》&#39;, &#39;-&#39;, &#39;…&#39;, &#39;【&#39;, &#39;】&#39;,&#39;:&#39;); 
$numpairs = array(&#39;1&#39;=>&#39;一&#39;,&#39;2&#39;=>&#39;二&#39;,&#39;3&#39;=>&#39;三&#39;,&#39;4&#39;=>&#39;四&#39;,&#39;5&#39;=>&#39;五&#39;,&#39;6&#39;=>&#39;六&#39;,&#39;7&#39;=>&#39;七&#39;,&#39;8&#39;=>&#39;八&#39;,&#39;9&#39;=>&#39;九&#39;,&#39;0&#39;=>&#39;零&#39;); 
$str = alab_num($str); 
$str = str_replace($search,&#39; &#39;,$str); 
$ord = $i = $k = 0; 
$prechar = 0;// 0-空白 1-英文和符号 2-中文 
$result = array(); 
$annex = array(); 

while($ord = ord($str[$i])) 
{ 
//1字节字符 
if ($ord <= 0xC0 ) 
{ 
//去除空字符串 
if($ord < 33) { 
$prechar=0; 
$i++; 
$k++; 
continue; 
} 
//附加中文大写数字转换 
if(isset($numpairs[$str[$i]])) { 
$annex[]=$numpairs[$str[$i]]; 
} 
//如果前面是中文 
if( $prechar == 2 ){ 
$result[++$k] = $str[$i]; 
} 
else { 
$result[$k] .= $str[$i]; 
} 
$prechar = 1; 
$i++; 
} 
else //2-3字节字符(中文) 
{ 
if($ord < 0xE0) 
$step = 2; 
else 
$step = 3; 
$c = substr($str,$i,$step); 
if(false !== $key = array_search($c,$numpairs)){ 
$annex[] = $key; 
} 
if ($prechar != 0) { 
$result[++$k] = $c; 
} 
else { 
$result[$k] .= $c; 
} 

$prechar = 2; 
$i+=$step; 
} 
} 
$result = $merge ? array_merge($result,$annex) : $result ; 
return $unique ? array_unique($result) : $result ; 
}

以上がPHP 単項単語分割アルゴリズムのコード例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。