在前一篇文章中,分析出了一个实现的具体思路,主要是利用中文分词、Unicode编码来解决无法使用mysql的全文索引进行中文搜索的问题,本篇文章中将详细介绍中文分词的实现方法。
首先是解决中文分词,中文分词就是将一句中文进行拆分,得到一个个单一的词,如“高薪诚聘注册造价工程师”这句话,经过分词处理后,会得到“高薪 诚聘 注册 造价 工程师”一个个单一的词。网上对中文分词的技术有很多介绍,有很好的开源产品和服务接口。但是结合我们产品用的主流开发语言是PHP,所以还是偏向选择了一个支持PHP模块扩展的开源中文分词系统scws,便于直接整合进项目中进行调用。
至于如何安装scws和生成php模块,不是本文介绍的重点,请参考官方文档,有很详细的介绍。
安装好scws并生成php的模块后,就可以直接调用scws提供的api进行中文分词了,下面是一个用php调用scws进行中文分词的方法,可以用来测试中文分词。
- function ch_word_segment($text) {
- $so = scws_new(); //创建并返回一个SimpledCWS类操作对象
- $so->set_charset('utf8'); //设定分词词典、规则集、欲分文本字符串的字符集
- $so->set_multi(SCWS_MULTI_SHORT | SCWS_MULTI_DUALITY); //设定分词返回结果时是否复式分割,这里设定短词和二元词
- $so->send_text($text); //发送要分词的文本
- $result = $so->get_result(); //返回分词结果
- $first = true;
- foreach ($result as $key => $value) {
- if ($first) {
- $word.=$value;
- $first = false;
- } else {
- $word.=' ' . $value; //返回值为以空格分隔的分词字符串
- }
- }
- return $word;
- }
如果安装成功,运行以下代码,将得到“高薪 诚聘 注册 造价 工程师”的输出。
- print(ch_word_segment('高薪诚聘注册造价工程师'));