public function actionGarbage()
{
// $param = \Yii::$app->request->post('rubbish', '');
// 接收json 数据
$rubbish = file_get_contents('php://input');
$rubbish = json_decode($rubbish, true);
$param = $rubbish['inquire']['utterance']['original'];
if(empty($param)){
return [
'code' => 4001,
'msg' => 'rubbish参数不能为空',
];
}
/* status有几种状态来判断用户传进来的语句格式,根据status的值进行对应处理,返回结果。
0:初始化,默认表示xxx是什么垃圾 1:如何处理垃圾,2:xxx是不是垃圾,3:xxx是xx垃圾还是xx垃圾 */
$status = 0; /* 在字符串中寻找字符串中的子串是否存在 */
$word = ['扔','放','投放','处理'];
if($this->wordSearch($word, $param)){
$status = 1;
} /* 【属不属于垃圾】 */
$word = ['是不是','吗','属不属于','算不算', '么'];
if($this->wordSearch($word, $param)){
$status = 2;
} /* 【xxx是xx垃圾还是xx垃圾】 */
$word = '垃圾还是';
if($this->wordSearch($word, $param)){
$status = 3;
} /* 【干垃圾哪里扔】 */
$word_r = ['干垃圾', '湿垃圾', '可回收物', '其它垃圾', '厨余垃圾', '有害垃圾', '可回收', '有害', '其它', '厨余', '其他垃圾', '其他', '湿', '干',];
$action = ['投放', '扔', '放' ];
if($this->wordSearch($word_r, $param) && $this->wordSearch($action, $param)){
$status = 4;
} /* 干垃圾有哪些 */
$word_r = ['干垃圾', '湿垃圾', '可回收物', '其它垃圾', '厨余垃圾', '有害垃圾', '可回收', '有害', '其它', '厨余', '其他垃圾', '其他', '湿', '干',];
$what = ['包括哪些', '包括什么', '都有什么', '有什么', '有哪些', '什么是', '是什么', '包括', '哪些', '什么', ];
if($this->wordSearch($word_r, $param) && $this->wordSearch($what, $param)){
$status = 5;
} /* {garbage}和{garbage}是一种垃圾么? */
$word = ['是一种垃圾么', '是一种垃圾吗', '算一种垃圾么', '算一种垃圾吗', '属于一种垃圾么', '属于一种垃圾吗', ];
if($this->wordSearch('和', $param) && $this->wordSearch($word, $param)){
$status = 6;
} /* 【垃圾分类的意义】 */
if(strpos($param, '意义') !== false){
return [
'code' => 0,
'msg' => 'success',
'result' => '1.有助于改善垃圾品质,使末端焚烧(或填埋)得以更好的无害化处理 2.有助于再生资源循环利用,节约原生资源 3.有助于城市的干净整洁,减少清扫人员的负担,进而减少雇佣人力资源的浪费',
];
} //针对每一种情况进行对应的字符串处理, 截取出垃圾关键词, 查询数据库
switch ($status){
case 0:
//todo what is it rubbish?
$patt = ['哪一类', '哪一种', '哪类', '哪种', '什么', '属于', '垃圾', '是', '算', '啥', ];
$keyword = str_replace($patt, '', $param);
break;
case 1:
//todo how to deal with rubbish?
$patt = ['怎么扔','垃圾箱', '应该','投放','哪里','哪儿','哪个','怎么样','怎么','咋样','处理','咋','往','该','扔','放','哪',];
$keyword = str_replace($patt, '', $param);
break;
case 2:
//todo Is it rubbish? 【XXX是不是xx垃圾】这类词语过滤
$patt = ['是不是', '垃圾吗', '属不属于', '算不算', '哪一种', '哪一类', '哪种', '哪类', '属于', '一种', '垃圾', '什么', '算', '啥', '是', '么', '吗']; //字数多的放在前面优先匹配
$new_param = str_replace($patt, '*', $param);
$pos = mb_strpos(trim($new_param, '*'), '*'); //截取垃圾关键词
$keyword = mb_substr($new_param, 0, $pos);
$cate = trim(mb_substr($new_param, $pos), '*'); //获取垃圾类别关键词, 用来判断结果返回【是】或者【不是】
break;
case 3:
//todo xxx 是xx垃圾还是 xx垃圾
$patt = ['垃圾','还是','属于','是',];
$new_param = str_replace($patt, '*', $param); //用*替换掉无用的词语
$pos = mb_strpos(trim($new_param, '*'), '*'); //截取垃圾关键词
$keyword = mb_substr($new_param, 0, $pos); //得到垃圾关键词
$rest = trim(mb_substr($new_param, $pos), '*'); //去掉垃圾关键词剩余的部分
$rest_pos = mb_strpos($rest, '*');
$cate_one = mb_substr($rest, 0, $rest_pos); //截取第一个垃圾类别关键词
$cate_two = trim(mb_substr($rest, $rest_pos), '*'); //截取第二个垃圾类别关键词
break;
case 4:
//todo 干垃圾怎么扔
$patt = ['怎么扔','垃圾箱', '应该','投放','哪里','哪儿','哪个','怎么样','怎么','咋样','处理','咋','往','该','扔','放','哪',];
$keyword = str_replace($patt, '', $param);
break;
case 5:
//todo 干垃圾包括什么
$patt = ['包括哪些', '包括什么', '都有什么', '有什么', '有哪些', '什么是', '是什么', '包括', '哪些', '什么', ];
$keyword = str_replace($patt, '', $param);
break;
case 6:
//todo {garbage}和{garbage}是一种垃圾么
$patt = ['一种垃圾', '垃圾', '一种', '属不属于', '属于', '不', '是', '算', '吗', '么', '嘛'];
$new_param = str_replace($patt, '', $param); // 去掉上面的字词,剩下{garbage}和{garbage}
$pos = mb_strpos($new_param, '和');
$keywordOne = mb_substr($new_param, 0, $pos); //以“和”来分隔第一个垃圾关键词和第二个垃圾关键词
$keywordTwo = mb_substr($new_param, $pos+1); //不从“和”开始截取
break;
}
//不同的情况查询不同的数据库
switch($status){
case 0:
case 1:
case 2:
case 3:
//TODO 查询数据库
$where['r.name'] = $keyword;
$result = RecycleModel::find()
->alias('r')
->leftJoin(['c'=>RecycleCateModel::tableName()], 'r.category_id = c.id')
->select('c.name as cat_name, c.code, c.des as desc, c.req as handle')
->where($where)
->asArray()
->one();
break;
case 4:
case 5:
//TODO 针对查询干垃圾往哪扔查询数据库
$result = RecycleCateModel::find()->select(' inc, des, req')->where(['like', 'name', $keyword])->asArray()->one();
break;
case 6:
//TODO 同一个字段按两个条件查询使用 where in
$where = ['in', 'r.name', [$keywordOne, $keywordTwo]];
$result = RecycleModel::find()
->alias('r')
->leftJoin(['c'=>RecycleCateModel::tableName()], 'r.category_id = c.id')
->select('c.name as cat_name, c.code')
->where($where)
->asArray()
->all();
break;
} if(!$result){
return [
'code' => 4002,
'msg' => '对不起,暂未查询到有关【'.$keyword.'】的信息',
];
}
//不同的输入,返回不同的结果
switch($status){
case 0:
//todo 结果返回是什么垃圾
return [
'code' => 0,
'msg' => 'success',
'result' => $keyword.'是'.$result['cat_name'],
];
case 1:
//todo 结果返回处理的方法
return [
'code' => 0,
'msg' => 'success',
'result' => $keyword.'的处理方法是:'.$result['handle'],
];
case 2:
//todo 结果返回 “是”或 “否”
if(strpos($result['cat_name'], $cate) !== false){
return [
'code' => 0,
'msg' => 'success',
'result' => '是',
];
}
return [
'code' => 0,
'msg' => 'success',
'result' => '否',
];
case 3:
//todo 结果返回 “是xx垃圾” 或 “都不是”
if(strpos($result['cat_name'], $cate_one) !== false || strpos($result['cat_name'], $cate_two) !== false){
return [
'code' => 0,
'msg' => 'success',
'result' => $keyword.'是'.$result['cat_name'],
];
}else{
return [
'code' => 0,
'msg' => 'success',
'result' => '都不是',
];
}
case 4:
//todo
return [
'code' => 0,
'msg' => 'success',
'result' => $keyword.'的处理方法是:'.$result['req'],
];
case 5:
//todo
return [
'code' => 0,
'msg' => 'success',
'result' => $keyword.'包括:'.$result['inc'],
];
case 6:
//todo
if(count($result) < 2){
//说明至少有一个关键词没有查询到结果, 肯定就不能算一种垃圾
return [
'code' => 0,
'msg' => 'success',
'result' => $keywordOne.'和'.$keywordTwo.'不是一种垃圾',
];
}
if($result[0]['code'] != $result[1]['code']){
return [
'code' => 0,
'msg' => 'success',
'result' => $keywordOne.'和'.$keywordTwo.'不是一种垃圾',
];
}
return [
'code' => 0,
'msg' => 'success',
'result' => $keywordOne.'和'.$keywordTwo.'是一种垃圾',
];
}
}

yii写的垃圾分类接口

yii 查询垃圾分类接口的更多相关文章

  1. 快递查询API接口(trackingmore)

    快递查询接口 目前提供快递查询的接口平台有: Trackingmore 快递100 快递网 不同接口的区别: (1)Trackingmore支持380家快递公司,其中有55家为国内的快递,其余325家 ...

  2. 免费的手机号码归属地查询API接口文档

    聚合数据手机号码归属四查询API接口,根据手机号码或手机号码的前7位,查询手机号码归属地信息,包括省份 .城市.区号.邮编.运营商和卡类型. 通过链接https://www.juhe.cn/docs/ ...

  3. SSH动态查询封装接口介绍

    SSH动态查询封装接口介绍 1.查询记录总条数 public int count(Class c,Object[][] eq,Object[][] like,String[] group,String ...

  4. 分享几个免费IP地址查询API接口

    几个免费IP地址查询API接口 1.IP地址查询接口:http://apis.juhe.cn/ip/ip2addr要先去https://www.juhe.cn/docs/api/...申请APPKEY ...

  5. PHP最近做了物流快递查询的接口用得是快递100

    最近做了物流快递查询的接口用得是快递100的,分享下心得体会 主要使用了2种接口,一个是api的 返回json xml 各种数据的 一个是返回的URL的  就是一个带结果的网址  . 1  申请 找一 ...

  6. 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_03-用户认证-认证服务查询数据库-查询用户接口-接口定义

    1.2.4 查询用户接口 完成用户中心根据账号查询用户信息接口功能. 在ucenter这个服务里面定义查询用户信息的接口 这个接口在auth的服务的loadUserByUserName这个方法里面被调 ...

  7. yii Query Builder (yii 查询构造器) 官方指南翻译

    /**** Query Builder translated by php攻城师 http://blog.csdn.net/phpgcs Preparing Query Builder 准备 Quer ...

  8. 手机号码归属地查询api接口

    淘宝网 API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443 参数: tel:手机号码 返回:JSON ...

  9. 快递查询API接口对接方法

    各类接口 快递查询API有即时查询和订阅查询两种,即时是请求即返回数据,订阅则是订阅快递单号到接口,有物流轨迹更新则全量返回数据.目前常用的有快递鸟.快递100.快递网等. 快递鸟即时API可以查询3 ...

随机推荐

  1. Win10 彻底关闭 Windows Defender

    1.使用快捷键 WIN+R 调出运行工具,然后再输入组策略命令 gpedit.msc 再点击确定. 2.进入组策略在计算机配置下面的管理模板,Windows 组件就可以看到 Windows Defen ...

  2. mosquitto安装遇到问题和解决办法

    问题1 make编译报错,提示xsltproc命令未找到 解决办法: yum  install libxslt 问题2 make编译报错,提示: failed to load external ent ...

  3. jquery 广告轮播图

    轮播图 /*轮播图基本功能: * 1图片切换 * 1.1图片在中间显示 * 1.2图片淡入淡出 * 2左右各有一个按钮 * 2.1点击左按钮,图片切换上一张 * 2.2点击右按钮,图片切换下一张 * ...

  4. oddo

    看了这张图,或许你对odoo有了一些兴趣. https://www.cnblogs.com/wterp/p/9093616.html 这次就是和大家一起交流开源ERP/CRM系统:odoo 对以下读者 ...

  5. scratch少儿编程第一季——06、人在江湖混,没有背景怎么行。

    各位小伙伴大家好: 到上期我们学习了动作模块的全部指令.接下我们用动作模块做一个小小项目,来总结我们前面学的内容. 在做项目之前我们先来换一个背景. 在左下角舞台区,点击打开背景库,选择自己所需要的背 ...

  6. (二十八)jsp之EL表达式

    一.EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数 ...

  7. 体验三大JavaScript文件上传库(Uppy.js/Filepond/Dropzone)

    最近发现了一个高颜值的前端上传组件Uppy.js,立即上手体验了一波,感觉还不错.然后又看到同类型的Filepond以及Dropzone.js,对比体验了一下,感觉都很优秀,但是在体验过程中,都遇到了 ...

  8. 【Salesforce】入门篇

    Salesforce.com 一开始是一个云端的销售自动化(Sales Force Automation, SFA)以及客户关系管理工具(Customer Relationship Managemen ...

  9. zabbix监控MySQL,Tomcat及配置邮件报警

    目录 一.思路 二.部署.配置 环境 安装zabbix 对zabbix进行初步优化 添加监控主机 部署监控Tomcat 配置邮件报警 三.总结 一.思路 首先搭建zabbixserver,本机需要安装 ...

  10. Image Processing and Analysis_15_Image Registration:Multi-modal volume registration by maximization of mutual information——1996

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...