DukeAnn
做一个优雅的程序员

PHP使用分词模糊搜索数据库

首先如果网站搜索数据量巨大请使用第三方搜索引擎,比如迅搜等。

本次开发的搜索功能搜索量小使用人数小,觉得上三方搜索引擎有些浪费了。所以就想有没有能把词给我分好的接口我去 like 数据库就行了。你别说一查真有
下面推荐一下知乎上的好用地址:
https://www.zhihu.com/question/35814484

腾讯接口
http://wiki.open.qq.com/wiki/%E5%88%86%E8%AF%8D%E4%B8%8E%E5%91%BD%E5%90%8D%E5%AE%9E%E4%BD%93%E8%AF%86%E5%88%ABAPI

废话不多说,我用的哈工大的直接上代码。

 /*
     * 关键词分词调用接口
     * */
    protected function ltpCloud($text)
    {
        $api_url = 'http://api.ltp-cloud.com/analysis/?';
        $api_key = "lalalalala";
        $pattern = "ws";    // 分词
        $format = "json";   // 返回 Json
        $request_url = $api_url.'api_key='.$api_key.'&text='.$text.'&pattern='.$pattern.'&format='.$format;

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $request_url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        $output = curl_exec($ch);
        curl_close($ch);

        $output_arr = array();
        if (!empty($output)) {
            $output_arr = json_decode($output);
        }
        $ws = array();
        if (is_array($output_arr)) {
            foreach ($output_arr as $key => $value) {
                if (is_array($value)) {
                    foreach ($value as $key1 => $value1) {
                        if (is_array($value1)) {
                            foreach ($value1 as $key2 => $value2) {
                                // 过滤无用词语
                                if ($this->filterWord($value2->cont)) {
                                    continue;
                                }
                                // 模糊查询
                                $ws[] = $value2->cont;
                            }
                        }
                    }
                }
            }
        }
        return $ws;
    }

    /*
     * 过滤词语,在内不进行查库
     * */
    protected function filterWord($word)
    {
        $filter_arr = array(
            '问题',
        );
        return in_array($word, $filter_arr);
    }

再加一个bosonnlp 的接口

protected function bosonNlp($text)
    {
        $text_json = json_encode(array($text));
        $api_url = 'http://api.bosonnlp.com/tag/analysis?';
        $api_key = "lalalalalal";
        $space_mode = 0;    // 空格保留选项
        $oov_level = 3;   // 新词枚举强度选项
        $t2s = 0;
        $special_char_conv = 0;
        $header =  array(
            'Content-Type: application/json',
            'Accept: application/json',
            'X-Token: '.$api_key,
        );
        $request_url = $api_url.'space_mode='.$space_mode.'&oov_level='.$oov_level.'&t2s='.$t2s.'&special_char_conv='.$special_char_conv;
//        ddShopNc($header);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $request_url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $text_json);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT,10);   //只需要设置一个秒的数量就可以
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,8);   //只需要设置一个秒的数量就可以
        curl_setopt($ch, CURLOPT_HEADER, 0);
        $output = curl_exec($ch);
        $curl_errno = curl_errno($ch);
        $curl_error = curl_error($ch);
        curl_close($ch);
        if ($curl_errno > 0) {
            echo "cURL Error ($curl_errno): $curl_error\n";
        }

        $output_arr = array();
        if (!empty($output)) {
            $output_arr = json_decode($output, true);
        }
        $ws = array();
        if (is_array($output_arr)) {
            foreach ($output_arr as $key => $value) {
                if (is_array($value)) {
                    foreach ($value['word'] as $key1 => $value1) {

                        // 过滤无用词语
                        if ($this->filterWord($value1)) {
                            continue;
                        }
                        // 模糊查询
                        $ws[] = $value1;
                    }
                }
            }
        }
        return $ws;
    }

拿到分词数组之后,就自己去数据库 like or 吧~

DukeAnn的笔记本:DukeAnn的博客 » PHP使用分词模糊搜索数据库
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址