> 백엔드 개발 > PHP 튜토리얼 > PHP 단항 단어 분할 알고리즘 예제 코드

PHP 단항 단어 분할 알고리즘 예제 코드

怪我咯
풀어 주다: 2023-03-13 22:02:02
원래의
1489명이 탐색했습니다.

一元分词:指语句中每个字都成词,按字切分,不去组合,类似英文单词。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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿