• 技术文章 >后端开发 >php教程

    php实现scws中文分词搜索的方法

    PHP中文网PHP中文网2016-07-12 09:02:43原创295
    这篇文章主要介绍了php实现scws中文分词搜索的方法,详细介绍了scws中文分词搜索的具体步骤与相关使用技巧,并提供了scws的本站下载地址,需要的朋友可以参考下

    本文实例讲述了php实现scws中文分词搜索的方法。分享给大家供大家参考,具体如下:

    1、4个文件(本站下载地址。

    php.cn.rar

    )解压后,放到一个地方 eg:E:/wamp/scws

    2、php.ini 中配置

    extension = php_scws.dll 
    scws.default.charset = utf8 //配置默认的编码方式
    scws.default.fpath = "E:/wamp/scws" //加压后文件的路径

    3、使用

    $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匹配)
    {
    }

    亲自试验了一下如下:

    <!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>
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:在Mac OS上自行编译安装Apache服务器和PHP解释器,_PHP教程 下一篇:盘点PHP和ASP.NET的10大对比!,_PHP教程
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• ubuntu12.04使用c编写php扩展模块教程_PHP教程• 成为优秀PHP开发人员做到的5件事_PHP教程• 浅谈PHP第一弹---php位运算符”|”和逻辑运算符”||”遇到的问题_PHP教程• 使用PHP和AJAX的XML编程_PHP教程• 你是优秀的PHP程序员吗?_PHP教程
    1/1

    PHP中文网