评论

收藏

[MySQL] mysql的中文全文搜索实践(二)

数据库 数据库 发布于:2021-07-04 12:35 | 阅读数:198 | 评论:0

  在前一篇文章中,分析出了一个实现的具体思路,主要是利用中文分词、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('高薪诚聘注册造价工程师'));
  
关注下面的标签,发现更多相似文章