在上一篇文章中,详细介绍了如何实现中文分词。但这只是第一步,要想能够使用mysql的全文索引,还需要对分词后的中文词组进行编码。因为mysql的全文索引只将由字母,数字,下划线,单引号构成的字符串判定为单词。
编码的方式很多,只要能将汉字映射成唯一的字母或数字组成的字符串即可。因为产品中的主流开发语言使用的是PHP,同时unicode编码较为简单,容纳汉字较多,所以本篇文章将介绍在PHP中如何进行unicode编码。如“高薪诚聘注册造价工程师”经过中文分词得到“高薪 诚聘 注册 造价 工程师”,再经过unicode编码,将得到“9ad885aa 8bda8058 6ce8518c 90204ef7 5de57ab5e8”。
- function unicode_encode($word){
- $word=iconv('UTF-8','UCS-2LE',$word); //编码转换,假设PHP默认编码为UTF-8,将UTF-8转换为UCS-2LE
- $len=strlen($word);
- for($i=0;$i<$len-1;$i=$i+2){ //UCS-2LE编码是一个汉字占用两个字节
- $ch1=$word[$i]; //获取第一个字节的ASCII字符
- $ch2=$word[$i+1]; //获取第二个字节的ASCII字符
- $code=base_convert(ord($ch1),10,16); //获取字符的ASCII码,再转换为十六进制
- $code.=base_convert(ord($ch2),10,16);
- }
- return $code;
- }