php 中文分词,PHP中文分词介绍

PHP中文分词

最常见的词语二分法:

$str = '这是我的网站www.7di.net!';

//$str = iconv('GB2312','UTF-8',$str);

$result = spStr($str);

print_r($result);

/**

* UTF-8版 中文二元分词

*/

function spStr($str)

{

$cstr = array();

$search = array(",", "/", "\\", ".", ";", ":", "\"", "!", "~", "`", "^", "(", ")", "?", "-", "\t", "\n", "'", "", "\r", "\r\n", "{1}quot;", "&", "%", "#", "@", "+", "=", "{", "}", "[", "]", ":", ")", "(", ".", "。", ",", "!", ";", "“", "”", "‘", "’", "[", "]", "、", "—", " ", "《", "》", "-", "…", "【", "】",);

$str = str_replace($search, " ", $str);

preg_match_all("/[a-zA-Z]+/", $str, $estr);

preg_match_all("/[0-9]+/", $str, $nstr);

$str = preg_replace("/[0-9a-zA-Z]+/", " ", $str);

$str = preg_replace("/\s{2,}/", " ", $str);

$str = explode(" ", trim($str));

foreach ($str as $s) {

$l = strlen($s);

$bf = null;

for ($i= 0; $i< $l; $i=$i+3) {

$ns1 = $s{$i}.$s{$i+1}.$s{$i+2};

if (isset($s{$i+3})) {

$ns2 = $s{$i+3}.$s{$i+4}.$s{$i+5};

if (preg_match("/[\x80-\xff]{3}/",$ns2)) $cstr[] = $ns1.$ns2;

} else if ($i == 0) {

$cstr[] = $ns1;

}

}

}

$estr = isset($estr[0])?$estr[0]:array();

$nstr = isset($nstr[0])?$nstr[0]:array();

return array_merge($nstr,$estr,$cstr);

}

執行結果是:

Array ( [0] => 7 [1] => www [2] => di [3] => net [4] => 这是 [5] => 是我 [6] => 我的 [7] => 的网 [8] => 网站 )

接下来,将以上结果转换为区位码,PHP代码是:

foreach ($result as $s) {

$s = iconv('UTF-8','GB2312',$s);

$code[] = gbCode($s);

}

$code = implode(" ", $code);

echo $code;

function gbCode($str) {

$return = null;

if (!preg_match("/^[\x80-\xff]{2,}$/",$str)) return $str;

$len = strlen($str);

for ($i= 0; $i< $len; $i=$i+2) {

$return .= sprintf("%02d%02d",ord($str{$i})-160,ord($str{$i+1})-160);

}

return $return;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值