PHP简单实现中文分词——二分法

No Comments

二分法是一种简单的中文分词方法,其原理就是把中文字符串按两个字进行切分,如“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肯定会有(那还展示出来干嘛呀- -!)。但我还是幻想万一对人能有所帮助呢,或者引来某个迷路的高手指点一二,都算是件好事。

Leave a Reply