第31卷
1.3基于统计的分词方法
从形式上看,词是稳定的字的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词.因此字与字相邻共现的频率或概率能够较好的反映成词的可信度.可以对语料中相邻共现的各个字的组合的频度进行统计,计算它们的互现信息.定义两个字的互现信息,计算两个汉字X、Y的相邻共现概率.互现信息体现了汉字之间结合关系的紧密程度.当紧密程度高于某一个阈值时,便可认为此字组可能构成了一个词.这种方法只需对语料中的字组频度进行统计,不需要切分词典,因而又叫做无词典分词法或统计取词方法.但这种方法也有一定的局限性,会经常抽出一些共现频度高、但并不是词的常用字组,例如。这一”、。之一”、。有的”、“我的”、。许多的”等,并且对常用词的识别精度差,时空
开销大.
2
利用PHP脚本实现传统的分词操作
下面,就具体分析一下传统中文的分词过程.在进行分词操作之前先利用正则函数对检索内容进行过滤,把非中文
的部分去除掉.(1)过滤所有
HTML标签.(2)过滤所有stop
word.(3)过滤所有英文和数字.判断中文和编码有关gbk是双字节,utf8是三字节,可以根据编码的范围来判断是否为中文t
(1)GBK(GB2312/GBl8030).GBK双字节编码范围:\x00一\】【ff.ASCII:\xzo-\x7f.
中文:\】【80?\xff.
(2)UTF-8(Unieode).中文:\u4e00-kuOfa5.韩文:\x3130?\x318F.中文替换的正则函数;
preg_replace(”/([\x80一\】cff])/”.…‘.¥str);
preg
replace(”/([u4e00-u9fa5])/”.””,¥str).
然后,对剩下的纯中文部分进行分词.分词采用基于字符串匹配的分词方法,下面是用PHP编写的这种分词方法对应的函数:
functionSubString(¥str,¥start,¥length=null){
if(!is_numeric(¥start)){
tetuJ口l
false;}
¥strLen=strlen(¥str),
if(¥strLen<=0){
return
false;}
if(¥start<0lI¥length<0){¥mbStrLen;¥this-->StrLength(¥str)}}else{
¥mhStrLen=¥strLen;
}
if(!is—numeric(¥length)){¥length=¥mbStrLenf)
elseif(¥length<0){¥length=¥mbStrLen+¥length一1l,if(¥start<0){¥start=¥mbStrLen+¥start;
}¥returnVal=’,¥mbStart=OI¥mbCount=0lfor(¥i=0
.
I¥i<¥strLen;¥i++){
if(¥mbCount>=¥length){break;}
¥cunOnt=ord(¥str{¥i}),
万方数据
第1期
徐殿军等:PHP+MYSQL环境下的中文分词技术研究
59
if(¥mbStart>=¥start){
¥returnVal.=¥str{¥i),if(¥currOrd>0x7f){
¥returnVal.=¥str{¥i+1}.¥str{¥i+Z);¥i+=2l}¥mbCount++;
}elseif(¥currOrd>Ox7f){¥i+=2;
'¥mbStart++l
}
return¥returnVal;
}
3