rss· 投稿· 设为首页· 加入收藏· 繁體版
当前位置: 火魔网 » 程序开发 » PHP

php分词搜索插件

php中中文分词和模糊搜索 - [PHP]

在java中做全文搜索的话可以使用Lucene以及中文分词插件。在php中做全文搜素引擎可以使用Sphinx,中文分词也有很多选择,使用scws是不错的选择。scws的全称是Simple Chinese Words Segmentation。使 用scws有三种方式:一种是使用C语言编写的scws并在源码基础上进行拓展,速度最快但是不易拓展;一种是安装scws针对php编写的插件,然后就 可以直接在php中调用的scws的api函数,本文介绍的就是这种方法;最后一种是使用php重写的scws函数库,优点是不需要安装额外的插件,缺点 是程序的运行效率很低。(具体信息参见http://www.ftphp.com/scws)

在php中安装完scws插件后,执行如下语句:

$str = "在数据库中储存层次数据";

$temp = array();

$cws = scws_new();

$cws->set_multi(1);

$cws->set_charset('utf8');

$cws->send_text($str);

while ($tmp = $cws->get_result())

$temp[] = $tmp;

$arrWhere = array();

$t = array();

foreach($temp as $key=>$value){

foreach($value as $item){

$t[] = $item['word'];

}

pirnt_r($t)

程序运行后输出:

Array (
  [0] => 在   [1] => 数据库   [2] => 数据   [3] => 中   [4] => 储存   [5] => 层次   [6] => 数据 )

可以看到分词结果中有重叠的地方,通过调节$cws->set_multi(1);中参数的值可以调整分词结果的颗粒度。例如设置$cws->set_multi(2);后输出结果为:

Array (
  [0] => 在   [1] => 数据库   [2] => 数据   [3] => 据库   [4] => 中   [5] => 储存   [6] => 层次   [7] => 数据 )

使用这个中文分词插件可以做一些应用,比如交友网站上允许用户输入模糊搜索信息,用户可以输入“浙江杭州22岁有图”来搜索用户,经过分词输出数组:

Array (
  [0] => 浙江   [1] => 杭州   [2] => 22   [3] => 岁   [4] => 有   [5] => 图 )

再在经过一些语义分析后(进行这种限定较多的语义分析并不复杂),就可以得到对应的数据库查询条件:

select * from members where str_provicne="浙江" and str_city="杭州" and int_age=22 and has_pic=1

顶一下
(0)
踩一下
(0)