在前一篇文章中,分析出了一个实现的具体思路,主要是利用中文分词、Unicode编码来解决无法使用mysql的全文索引进行中文搜索的问题,本篇文章中将详细介绍中文分词的实现方法。

    首先是解决中文分词,中文分词就是将一句中文进行拆分,得到一个个单一的词,如“高薪诚聘注册造价工程师”这句话,经过分词处理后,会得到“高薪 诚聘 注册 造价 工程师”一个个单一的词。网上对中文分词的技术有很多介绍,有很好的开源产品和服务接口。但是结合我们产品用的主流开发语言是PHP,所以还是偏向选择了一个支持PHP模块扩展的开源中文分词系统scws,便于直接整合进项目中进行调用。

    至于如何安装scws和生成php模块,不是本文介绍的重点,请参考官方文档,有很详细的介绍。

    安装好scws并生成php的模块后,就可以直接调用scws提供的api进行中文分词了,下面是一个用php调用scws进行中文分词的方法,可以用来测试中文分词。

  1. function ch_word_segment($text) {  
  2.     $so = scws_new();        //创建并返回一个SimpledCWS类操作对象  
  3.     $so->set_charset('utf8');       //设定分词词典、规则集、欲分文本字符串的字符集  
  4.     $so->set_multi(SCWS_MULTI_SHORT | SCWS_MULTI_DUALITY);    //设定分词返回结果时是否复式分割,这里设定短词和二元词  
  5.     $so->send_text($text);    //发送要分词的文本  
  6.     $result = $so->get_result();  //返回分词结果  
  7.     $first = true;  
  8.     foreach ($result as $key => $value) {  
  9.         if ($first) {  
  10.             $word.=$value;  
  11.             $first = false;  
  12.         } else {  
  13.             $word.=' ' . $value;  //返回值为以空格分隔的分词字符串  
  14.         }  
  15.     }  
  16.     return $word;  

    如果安装成功,运行以下代码,将得到“高薪 诚聘 注册 造价 工程师”的输出。

  1. print(ch_word_segment('高薪诚聘注册造价工程师'));