Home > Article > Backend Development > How to implement scws Chinese word segmentation search in php
This article mainly introduces the method of implementing scws Chinese word segmentation search in PHP, details the specific steps and related usage skills of scws Chinese word segmentation search, and provides the download address of scws website. Friends who need it can refer to it
The example in this article describes the method of implementing scws Chinese word segmentation search in PHP. Share it with everyone for your reference, the details are as follows:
1, 4 files (download address of this site.
) After decompression, put it in a place eg:E:/wamp/scws
2. Configure
extension = php_scws.dll scws.default.charset = utf8 //配置默认的编码方式 scws.default.fpath = "E:/wamp/scws" //加压后文件的路径
in php.ini
3. Use
$so = scws_new(); $so->set_charset('utf8'); //编码 // 这里没有调用 set_dict 和 set_rule 系统会自动试调用 ini 中指定路径下的词典和规则文件 $so->add_dict(ini_get('scws.default.fpath') . '/dict.utf8.xdb'); //$so->add_dict('./dd.txt',SCWS_XDICT_TXT); $so->set_rule(ini_get('scws.default.fpath') . '/rules.utf8.ini'); $so->set_duality(0); //散字二元 $so->set_ignore(0); //忽略标点符号 $so->set_multi(0); $wd='要搜索的内容'; $so->send_text($wd); while($tmp = $so->get_result()) //遍历后即得到字符串分割后的内容, //根据得到的内容分别到数据库中查找(like匹配) { }
and personally tested it as follows:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>test</title> </head> <body> <?php function search($keywords,$table,$key1,$key2){ // (要查找的字符串,表名,字段一,字段二)如果就一个字段的话,$key2=''; $arr=array(); $str=array(); if( preg_match("/^[^\x80-\xff]+$/", $keywords)){//判断keywords是否全为英文,全为英文的话按照字符串切割处理 $str1=explode(' ',$keywords); //先按照空格切割 foreach($str1 as $key=>$value) { $str2=explode(',',$value); //,切割 foreach($str2 as $k=>$v) { $str3=explode('.',$v); //。切割 foreach($str3 as $kk=>$vv) { array_push($arr,$vv);//处理完后,返回一个数组 } } } }else{//对中文的分词处理 $so = scws_new(); $so->set_charset('utf8'); // 这里没有调用 set_dict 和 set_rule 系统会自动试调用 ini 中指定路径下的词典和规则文件 $so->add_dict(ini_get('scws.default.fpath') . '/dict.utf8.xdb'); $so->set_rule(ini_get('scws.default.fpath') . '/rules.utf8.ini'); $so->set_duality(0); //散字二元 $so->set_ignore(0); //忽略标点符号 $so->set_multi(0); $so->send_text($keywords); while ($tmp = $so->get_result())//得到一个数组,里面包含词组和标点符号 { foreach($tmp as $key=>$value) { $value=$value["word"]; if(preg_match("/^[一-龥]{6,21}$/", $value))//去除标点符号 { array_push($arr,$value); } } } } foreach($arr as $key=>$value)//便利得到的数组,到数据库中匹配 { if($key2!='') { $sql="select * from `$table` where `$key1` like '%$value%' or `$key2` like '%$value%'"; }else{ $sql="select * from `$table` where `$key1` like '%$value%'"; } $query=mysql_query($sql); array_push($str,$query); } return $str; } include('conn.php'); $keywords="哈哈lsd djk,hdjs dd"; $table='two_key'; $key1='address'; $key2=''; $query=search($keywords,$table,$key1,$key2); foreach($query as $key=>$value) { while($row=mysql_fetch_array($value)) { echo $row[id].'----'.$row[name].'-----'.$row[address].'<br>'; } } ?> </body> </html>