• yii 查询垃圾分类接口


      1 public function actionGarbage()
      2     {
      3 //        $param = Yii::$app->request->post('rubbish', '');
      4         // 接收json 数据
      5         $rubbish = file_get_contents('php://input');
      6         $rubbish = json_decode($rubbish, true);
      7         $param = $rubbish['inquire']['utterance']['original'];
      8         if(empty($param)){
      9             return [
     10                 'code' => 4001,
     11                 'msg' => 'rubbish参数不能为空',
     12             ];
     13         }
     14         /*  status有几种状态来判断用户传进来的语句格式,根据status的值进行对应处理,返回结果。
     15             0:初始化,默认表示xxx是什么垃圾 1:如何处理垃圾,2:xxx是不是垃圾,3:xxx是xx垃圾还是xx垃圾 */
     16         $status = 0;
     17 
     18         /* 在字符串中寻找字符串中的子串是否存在 */
     19         $word = ['扔','放','投放','处理'];
     20         if($this->wordSearch($word, $param)){
     21             $status = 1;
     22         }
     23 
     24         /* 【属不属于垃圾】 */
     25         $word = ['是不是','吗','属不属于','算不算', '么'];
     26         if($this->wordSearch($word, $param)){
     27             $status = 2;
     28         }
     29 
     30         /* 【xxx是xx垃圾还是xx垃圾】 */
     31         $word = '垃圾还是';
     32         if($this->wordSearch($word, $param)){
     33             $status = 3;
     34         }
     35 
     36         /* 【干垃圾哪里扔】 */
     37         $word_r = ['干垃圾', '湿垃圾', '可回收物', '其它垃圾', '厨余垃圾', '有害垃圾', '可回收', '有害', '其它', '厨余', '其他垃圾', '其他', '湿', '干',];
     38         $action = ['投放', '扔', '放' ];
     39         if($this->wordSearch($word_r, $param) && $this->wordSearch($action, $param)){
     40             $status = 4;
     41         }
     42 
     43         /* 干垃圾有哪些 */
     44         $word_r = ['干垃圾', '湿垃圾', '可回收物', '其它垃圾', '厨余垃圾', '有害垃圾', '可回收', '有害', '其它', '厨余', '其他垃圾', '其他', '湿', '干',];
     45         $what = ['包括哪些', '包括什么', '都有什么', '有什么', '有哪些', '什么是', '是什么', '包括', '哪些', '什么', ];
     46         if($this->wordSearch($word_r, $param) && $this->wordSearch($what, $param)){
     47             $status = 5;
     48         }
     49 
     50         /* {garbage}和{garbage}是一种垃圾么? */
     51         $word = ['是一种垃圾么', '是一种垃圾吗', '算一种垃圾么', '算一种垃圾吗', '属于一种垃圾么', '属于一种垃圾吗', ];
     52         if($this->wordSearch('和', $param) && $this->wordSearch($word, $param)){
     53             $status = 6;
     54         }
     55 
     56         /* 【垃圾分类的意义】 */
     57         if(strpos($param, '意义') !== false){
     58             return [
     59                 'code' => 0,
     60                 'msg' => 'success',
     61                 'result' => '1.有助于改善垃圾品质,使末端焚烧(或填埋)得以更好的无害化处理 2.有助于再生资源循环利用,节约原生资源 3.有助于城市的干净整洁,减少清扫人员的负担,进而减少雇佣人力资源的浪费',
     62             ];
     63         }
     64 
     65         //针对每一种情况进行对应的字符串处理, 截取出垃圾关键词, 查询数据库
     66         switch ($status){
     67             case 0:
     68                 //todo what is it rubbish?
     69                 $patt = ['哪一类', '哪一种', '哪类', '哪种', '什么', '属于', '垃圾', '是', '算', '啥', ];
     70                 $keyword = str_replace($patt, '', $param);
     71                 break;
     72             case 1:
     73                 //todo how to deal with rubbish?
     74                 $patt = ['怎么扔','垃圾箱', '应该','投放','哪里','哪儿','哪个','怎么样','怎么','咋样','处理','咋','往','该','扔','放','哪',];
     75                 $keyword = str_replace($patt, '', $param);
     76                 break;
     77             case 2:
     78                 //todo Is it rubbish? 【XXX是不是xx垃圾】这类词语过滤
     79                 $patt = ['是不是', '垃圾吗', '属不属于', '算不算', '哪一种', '哪一类', '哪种', '哪类', '属于', '一种', '垃圾', '什么', '算', '啥', '是', '么', '吗'];  //字数多的放在前面优先匹配
     80                 $new_param = str_replace($patt, '*', $param);
     81                 $pos = mb_strpos(trim($new_param, '*'), '*'); //截取垃圾关键词
     82                 $keyword = mb_substr($new_param, 0, $pos);
     83                 $cate = trim(mb_substr($new_param, $pos), '*');  //获取垃圾类别关键词, 用来判断结果返回【是】或者【不是】
     84                 break;
     85             case 3:
     86                 //todo xxx 是xx垃圾还是 xx垃圾
     87                 $patt = ['垃圾','还是','属于','是',];
     88                 $new_param = str_replace($patt, '*', $param);  //用*替换掉无用的词语
     89                 $pos = mb_strpos(trim($new_param, '*'), '*');   //截取垃圾关键词
     90                 $keyword = mb_substr($new_param, 0, $pos);  //得到垃圾关键词
     91                 $rest = trim(mb_substr($new_param, $pos), '*');  //去掉垃圾关键词剩余的部分
     92                 $rest_pos = mb_strpos($rest, '*');
     93                 $cate_one = mb_substr($rest, 0, $rest_pos);  //截取第一个垃圾类别关键词
     94                 $cate_two = trim(mb_substr($rest, $rest_pos), '*');  //截取第二个垃圾类别关键词
     95                 break;
     96             case 4:
     97                 //todo 干垃圾怎么扔
     98                 $patt = ['怎么扔','垃圾箱', '应该','投放','哪里','哪儿','哪个','怎么样','怎么','咋样','处理','咋','往','该','扔','放','哪',];
     99                 $keyword = str_replace($patt, '', $param);
    100                 break;
    101             case 5:
    102                 //todo 干垃圾包括什么
    103                 $patt = ['包括哪些', '包括什么', '都有什么', '有什么', '有哪些', '什么是', '是什么', '包括', '哪些', '什么', ];
    104                 $keyword = str_replace($patt, '', $param);
    105                 break;
    106             case 6:
    107                 //todo {garbage}和{garbage}是一种垃圾么
    108                 $patt = ['一种垃圾', '垃圾', '一种', '属不属于', '属于', '不', '是', '算', '吗', '么', '嘛'];
    109                 $new_param = str_replace($patt, '', $param);  // 去掉上面的字词,剩下{garbage}和{garbage}
    110                 $pos = mb_strpos($new_param, '和');
    111                 $keywordOne = mb_substr($new_param, 0, $pos);  //以“和”来分隔第一个垃圾关键词和第二个垃圾关键词
    112                 $keywordTwo = mb_substr($new_param, $pos+1);  //不从“和”开始截取
    113                 break;
    114         }
    115         //不同的情况查询不同的数据库
    116         switch($status){
    117             case 0:
    118             case 1:
    119             case 2:
    120             case 3:
    121                 //TODO 查询数据库
    122                 $where['r.name'] = $keyword;
    123                 $result = RecycleModel::find()
    124                     ->alias('r')
    125                     ->leftJoin(['c'=>RecycleCateModel::tableName()], 'r.category_id = c.id')
    126                     ->select('c.name as cat_name, c.code, c.des as desc, c.req as handle')
    127                     ->where($where)
    128                     ->asArray()
    129                     ->one();
    130                 break;
    131             case 4:
    132             case 5:
    133                 //TODO 针对查询干垃圾往哪扔查询数据库
    134                 $result = RecycleCateModel::find()->select(' inc, des, req')->where(['like', 'name', $keyword])->asArray()->one();
    135                 break;
    136             case 6:
    137                 //TODO 同一个字段按两个条件查询使用 where in
    138                 $where = ['in', 'r.name', [$keywordOne, $keywordTwo]];
    139                 $result = RecycleModel::find()
    140                     ->alias('r')
    141                     ->leftJoin(['c'=>RecycleCateModel::tableName()], 'r.category_id = c.id')
    142                     ->select('c.name as cat_name, c.code')
    143                     ->where($where)
    144                     ->asArray()
    145                     ->all();
    146                 break;
    147         }
    148 
    149         if(!$result){
    150             return [
    151                 'code' => 4002,
    152                 'msg' => '对不起,暂未查询到有关【'.$keyword.'】的信息',
    153             ];
    154         }
    155         //不同的输入,返回不同的结果
    156         switch($status){
    157             case 0:
    158                 //todo 结果返回是什么垃圾
    159                 return [
    160                     'code' => 0,
    161                     'msg' => 'success',
    162                     'result' => $keyword.'是'.$result['cat_name'],
    163                 ];
    164             case 1:
    165                 //todo 结果返回处理的方法
    166                 return [
    167                     'code' => 0,
    168                     'msg' => 'success',
    169                     'result' => $keyword.'的处理方法是:'.$result['handle'],
    170                 ];
    171             case 2:
    172                 //todo 结果返回 “是”或 “否”
    173                 if(strpos($result['cat_name'], $cate) !== false){
    174                     return [
    175                         'code' => 0,
    176                         'msg' => 'success',
    177                         'result' => '是',
    178                     ];
    179                 }
    180                 return [
    181                     'code' => 0,
    182                     'msg' => 'success',
    183                     'result' => '否',
    184                 ];
    185             case 3:
    186                 //todo 结果返回 “是xx垃圾” 或 “都不是”
    187                 if(strpos($result['cat_name'], $cate_one) !== false || strpos($result['cat_name'], $cate_two) !== false){
    188                     return [
    189                         'code' => 0,
    190                         'msg' => 'success',
    191                         'result' => $keyword.'是'.$result['cat_name'],
    192                     ];
    193                 }else{
    194                     return [
    195                         'code' => 0,
    196                         'msg' => 'success',
    197                         'result' => '都不是',
    198                     ];
    199                 }
    200             case 4:
    201                 //todo
    202                 return [
    203                     'code' => 0,
    204                     'msg' => 'success',
    205                     'result' => $keyword.'的处理方法是:'.$result['req'],
    206                 ];
    207             case 5:
    208                 //todo
    209                 return [
    210                     'code' => 0,
    211                     'msg' => 'success',
    212                     'result' => $keyword.'包括:'.$result['inc'],
    213                 ];
    214             case 6:
    215                 //todo
    216                 if(count($result) < 2){
    217                     //说明至少有一个关键词没有查询到结果, 肯定就不能算一种垃圾
    218                     return [
    219                         'code' => 0,
    220                         'msg' => 'success',
    221                         'result' => $keywordOne.'和'.$keywordTwo.'不是一种垃圾',
    222                     ];
    223                 }
    224                 if($result[0]['code'] != $result[1]['code']){
    225                     return [
    226                         'code' => 0,
    227                         'msg' => 'success',
    228                         'result' => $keywordOne.'和'.$keywordTwo.'不是一种垃圾',
    229                     ];
    230                 }
    231                 return [
    232                     'code' => 0,
    233                     'msg' => 'success',
    234                     'result' => $keywordOne.'和'.$keywordTwo.'是一种垃圾',
    235                 ];
    236         }
    237     }
    View Code

    yii写的垃圾分类接口

  • 相关阅读:
    IDEA在编辑时提示could not autowire
    python基础——使用__slots__
    python基础——实例属性和类属性
    python基础——继承和多态
    python基础——访问限制
    python基础——面向对象编程
    python基础——第三方模块
    python基础——使用模块
    python基础——模块
    Python tkinter调整元件在窗口中的位置与几何布局管理
  • 原文地址:https://www.cnblogs.com/bneglect/p/11928295.html
Copyright © 2020-2023  润新知