php将字符串拆分成数组实现中文分词

时间: 2015-02-27 10:17 栏目: PHP 浏览: 11098 赞: 1 踩: 0 字体:

以下为本篇文章全部内容:

在一些项目里面我们会用到分词,虽然php有自带的分割函数,但是使用过的朋友都知道对中文的支持是很差的,在处理字符串分割成数组的时候我们有很多种方法,我下面就给大家几种方法的例子,希望能帮到各位有需要的朋友。每一种方法我都会附上结果给大家看看是否符合自己需要的需求。

第一种方法:支持中英文混合,并且支持标点符号分割

<?php
// +----------------------------------------------------------------------
// | Sphynx php将字符串分割成数组实现中文分词
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://www.sunnyos.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Sphynx <admin@sunnyos.com> QQ327388905
// +----------------------------------------------------------------------
/*
*+----------------------------------------------------------------------
*   php将字符串分割成数组实现中文分词
*   String $string  需要拆分的字符串
*   String $code    字符串的编码
*   return Array 分割之后的数组
*+----------------------------------------------------------------------
*/
function math($string,$code ='UTF-8'){
		if ($code == 'UTF-8') {
		 $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
        } else {
            $pa = "/[\x01-\x7f]|[\xa1-\xff][\xa1-\xff]/";
        }
        preg_match_all($pa, $string, $t_string);
		$math="";
		foreach($t_string[0] as $k=>$s){
			$math[]=$s;
		}
		 return $math;
}
$str = "sunny个人技术博客欢迎您,这里只提供原创博文,杜绝复制粘贴的垃圾博文。";
echo "<pre>";
print_r(math($str));

以上代码效果:

DE2B275C-9943-4360-B9CE-52F290C8B429.png

第二种方法:效果和第一种方法一样

<?php
//直接使用正则的方式,不过编码问题的话没有第一种实用
$str = "sunny个人技术博客欢迎您,这里只提供原创博文,杜绝复制粘贴的垃圾博文。";
preg_match_all("/./u", $str, $arr);
print_r($arr);

以上代码效果:

E0210D82-52F0-4B69-9467-BDF5F04CAE23.png

第三种方法:此方法过滤了英文和标点符号,也就是说仅分割中文汉字

<?php
//直接使用正则的方式,不过编码问题的话没有第一种实用
$str = "sunny个人技术博客欢迎您,这里只提供原创博文,杜绝复制粘贴的垃圾博文。";
preg_match_all('/[\x{4e00}-\x{9fa5}]/u',$str,$arr);
print_r($arr);

以上代码效果:

FAD7D4B8-7AC6-4436-BD4C-F511CE02BA11.png

如果大家有什么疑问可以加我QQ327388905进行解答,也可以加入交流群ThinkPHP交流群

当然啦,上面的只是几个少数方法,还会有更多的方法支持的,或者谁知道的可以加我qq交流一下。

扫二维码快速加群:

qun.png