PHP简单实现中文分词——二分法
May 07
二分法是一种简单的中文分词方法,其原理就是把中文字符串按两个字进行切分,如“imdonkey的主人要发奋了”,拆分完就是“imdonkey/的主/主人/人要/要发/发奋/奋了”。当然,为了更好的被搜索引擎利用,现实项目中还会对结果进一步处理,这里就不多说了,因为作者本人目前也不懂呢。
好,闲话不多说,直接上代码:
<?php
/*
*功能:对于输入的内容按照二分法规则进行分词,遵循以下规则
*实例:imdonkey的主人要发奋了
*结果:imdonkey 的主 主人 人要 要发 发奋 奋了
*/
function binary_split($str) {
$ret = array();
$preword = '';
$preischinese = false;
for($i = 0; $i < strlen($str); $i++) {
$cur = $str[$i];
if(ord($cur) > 0x80) {
// current is chinese
if(!empty($preword)) {
if($preischinese){
// preword is chinese
if(strlen($preword) == 4) {
$ret[] = $preword.$cur;
$preword = substr($preword, 2);
}
} else {
// preword is non-chinese
$ret[] = $preword;
$preword = '';
}
}
$preword .= $cur;
$preischinese = true;
} else {
// current is non-chinese
if(!empty($preword)) {
if($preischinese){
// preword is chinese
$ret[] = $preword;
$preword = '';
} else {
// preword is non-chinese
}
}
$preword .= $cur;
$preischinese = false;
}
}//end for
if(!empty($preword)) $ret[] = $preword;
return $ret;
}
$test = 'imdonkey的主人要发奋了';
print_r(binary_split($test));
?>
这段代码算不上优美,可读性还凑合,bug肯定会有(那还展示出来干嘛呀- -!)。但我还是幻想万一对人能有所帮助呢,或者引来某个迷路的高手指点一二,都算是件好事。
Recent Comments