上山打老虎 发表于 2021-7-4 12:35:11

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

  在前一篇文章中,分析出了一个实现的具体思路,主要是利用中文分词、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('高薪诚聘注册造价工程师'));
  
页: [1]
查看完整版本: mysql的中文全文搜索实践(二)