package org.miracle.robot.service;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.miracle.robot.api.MusicService;
import org.miracle.robot.api.WeatherService;
import org.miracle.robot.nlp.NLPAlgorithm;
import org.miracle.wx.adaptor.WeiXinAdaptor;
import org.miracle.wx.response.bean.Article;
import org.miracle.wx.response.bean.Music;
/**
* 对话上下文
*/
public class Context {
private static Logger m_logger = Logger. getLogger("Context.class");
private static String m_user = null;
//private static Dialogue m_dial;
private static ContextStateEnum m_state;
private static long m_last_use_time;
private static String m_question;
//private static String REQUEST_ANSWER_SENTENCE = "俺不知道如何回答,教教我吧亲 /可怜";
private enum QueryTypeEnum {
WEATHER,
MUSIC,
HELP,
UNFUNC
}
public Context(String name){
m_user = name;
// m_dial = new Dialogue();
// Answer answer = new Answer();
// m_dial.setAnswer(answer);
m_question = null;
m_state = ContextStateEnum.WAIT_QUERY;
m_last_use_time = new Date().getTime();
}
public long getLastUseTime(){
return m_last_use_time;
}
public String getUser(){
return m_user;
}
public String getState(){
return m_state.toString();
}
public String getQuestion(){
return m_question;
}
public void setLastUseTime(long time){
m_last_use_time = time;
}
public void setUser(String user){
m_user = user;
}
public void setState(String state){
m_state = ContextStateEnum.getEnumFromString(state);
}
public void setQuestion(String sentence){
m_question = sentence;
// if(m_question != null)
// {
// List<SinaJsonWord> q_list = WordSegment.segment(m_question);
// List<Word> question = NLPAlgorithm.preprocQuestion(q_list);
// m_dial.setQuestion(question);
// }
// else
// {
// m_dial.setQuestion(null);
// }
}
/**
* 处理用户请求,返回答案
*/
public CommonResult procQuery(String sentence){
m_last_use_time = new Date().getTime();
CommonResult result = new CommonResult();
if("?".equals(sentence.trim()) || "?".equals(sentence.trim()))
{
result.setResult(String.class, WeiXinAdaptor.USAGE_TEXT);
return result;
}
switch(m_state)
{
//处理问题:
case WAIT_QUERY:
result = procWaitQuery(sentence);
break;
//学习
case WAIT_LEARN:
result = procWaitLearn(sentence);
break;
//处理确认
case WAIT_CONFIRM:
result = procWaitConfirm(sentence);
break;
case WAIT_WEATHER_CITY:
result = procWaitWeatherCity(sentence);
break;
case WAIT_MUSIC_INFO:
result = procWaitMusicInfo(sentence);
break;
default:
m_logger.log(Level.SEVERE, "invalid context state:" + m_state.toString());
break;
}
return result;
}
/**
* 过滤请求,区分为功能性和非功能性请求
*/
private QueryTypeEnum filterQuery(String sentence){
if(sentence.contains("天气"))
{
return QueryTypeEnum.WEATHER;
}
else if(sentence.contains("想听歌"))
{
return QueryTypeEnum.MUSIC;
}
else if("?".equals(sentence.trim()) || "?".equals(sentence.trim()))
{
return QueryTypeEnum.HELP;
}
return QueryTypeEnum.UNFUNC;
}
/**
* 处理功能性请求
*/
private CommonResult proFuncQuery(String sentence, QueryTypeEnum type){
CommonResult result = new CommonResult();
switch(type)
{
case WEATHER:
String city = sentence.replaceAll("天气", "").trim();
List<Article> list = WeatherService.queryWeather(city);
if (null != list)
{
result.setResult(List.class, list);
}
else
{
result.setResult(String.class, "想知道哪个城市的天气呢?告诉我城市名称,我帮你查下 /酷");
m_state = ContextStateEnum.WAIT_WEATHER_CITY;
m_logger.log(Level.INFO, "current state: " + m_state.toString());
}
break;
case MUSIC:
result.setResult(String.class, "\ue03c 听歌模式已开启,来首什么歌大爷?搜歌方法:\n" +
"回复‘歌手’@‘歌名’,如:宋冬野@董小姐\n" +
//"2.回复‘歌名’, 如:张三的歌\n"+
"尽量在wifi环境下听歌,土豪请无视 \ue404");
m_state = ContextStateEnum.WAIT_MUSIC_INFO;
m_logger.log(Level.INFO, "current state: " + m_state.toString());
//Music music = MusicService.getBaiduMusic("董小姐", "宋冬野");
break;
case HELP:
default:
result.setResult(String.class, WeiXinAdaptor.USAGE_TEXT);
break;
}
return result;
}
/**
* 处理非功能性请求
*/
private CommonResult procUnFuncQuery(String sentence){
// List<SinaJsonWord> q_list = WordSegment.segment(sentence);
// List<Word> question = NLPAlgorithm.preprocQuestion(q_list);
// m_dial.setQuestion(question);
CommonResult result = new CommonResult();
if(null == sentence)
{
result.setResult(String.class, "输入的问题不能为空~");
return result;
}
m_question = sentence;
String answer = NLPAlgorithm.query(m_question);
//1.有答案,变迁为WAIT_CONFIRM状态
if(answer != null)
{
m_state = ContextStateEnum.WAIT_CONFIRM;
m_logger.log(Level.INFO, "current state: " + m_state.toString());
result.setResult(String.class, answer);
}
//2.无答案,变迁为WAIT_LEARN状态
else
{
m_state = ContextStateEnum.WAIT_LEARN;
m_logger.log(Level.INFO, "current state: " + m_state.toString());
result.setResult(String.class, "俺不知道如何回答,教教我吧亲 /可怜");
}
return result;
}
/**
* 处理问题
*/
private CommonResult procWaitQuery(String sentence){
QueryTypeEnum query_type = filterQuery(sentence);
//非功能性问题
if(QueryTypeEnum.UNFUNC == query_type)
{
return procUnFuncQuery(sentence);
}
//功能性问题
{
return proFuncQuery(sentence, query_type);
}
}
/**
* 学习
*/
private CommonResult procWaitLearn(String sentence){
//变迁为WAIT_ASK状态
m_state = ContextStateEnum.WAIT_QUERY;
m_logger.log(Level.INFO, "current state: " + m_state.toString());
CommonResult result = new CommonResult();
result.setResult(String.class, NLPAlgorithm.teach(m_question, sentence));
return result;
}
/**
* 等待确认
*/
private CommonResult procWaitConfirm(String sentence){
//反馈答案不对,变迁为WAIT_LEARN
if(isDeny(sentence))
{
m_state = ContextStateEnum.WAIT_LEARN;
m_logger.log(Level.INFO, "current state: " + m_state.toString());
CommonResult result = new CommonResult();
result.setResult(String.class, "那我应该怎么说,教教我吧亲 /快哭了");
return result;
}
//否则与WAIT_QUERY处理相同
else
{
m_state = ContextStateEnum.WAIT_QUERY;
return procWaitQuery(sentence);
}
}
/**
* 天气查询
*/
private CommonResult procWaitWeatherCity(String city){
m_state = ContextStateEnum.WAIT_QUERY;
m_logger.log(Level.INFO, "current state: " + m_state.toString());
CommonResult result = new CommonResult();
List<Article> list = WeatherService.queryWeather(city);
if (null != list)
{
result.setResult(List.class, list);
}
else
{
result.setResult(String.class, "好像没有这个城市哟,查询失败了/委屈");
}
return result;
}
/**
* 音乐查询
*/
private CommonResult procWaitMusicInfo(String input){
CommonResult result = new CommonResult();
if("不听了".equals(input) || "不想听了".equals(input))
{
m_state = ContextStateEnum.WAIT_QUERY;
m_logger.log(Level.INFO, "current state: " + m_state.toString());
result.setResult(String.class, "已退出听歌模式~");
return result;
}
String[] info = input.split("@+");
String singer = "";
String song = "";
if(0 == info.length)
{
result.setResult(String.class, "找不到这首歌呢~");
return result;
}
else if(1 == info.length)
{
song = info[0];
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
参考了别人的一些微信开发方法,自己实现了一个简单的微信机器人,部署在百度云上,能够点歌,查询天气,调教对话。可关注微信公众号:奇迹蛋。 实现说明:http://blog.csdn.net/elcarim/article/details/17892437 用于与大家互相学习交流,版权所有miracle_dan,尊重原创,转载请注明出处。
资源推荐
资源详情
资源评论
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![jar](https://img-home.csdnimg.cn/images/20210720083455.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
收起资源包目录
![package](https://csdnimg.cn/release/downloadcmsfe/public/img/package.f3fc750b.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JAR.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JAR.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JAR.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JAR.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JAR.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JAR.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JPG.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
共 113 条
- 1
- 2
![avatar](https://profile-avatar.csdnimg.cn/139ae06cea8b4e579af12d7ddf2419b6_elcarim.jpg!1)
miracle_dan
- 粉丝: 49
- 资源: 5
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- ROS导航机器人搭建教程
- 操作系统资源浅显易懂哈哈哈
- 小程序版python语言pytorch框架的图像分类墙体颜色识别-不含数据集图片-含逐行注释和说明文档.zip
- 小程序版深度学习CNN训练识别蔬菜-不含数据集图片-含逐行注释和说明文档.zip
- 小程序版通过CNN训练识别蔬菜-不含数据集图片-含逐行注释和说明文档.zip
- 小程序版基于深度学习识别花卉-不含数据集图片-含逐行注释和说明文档.zip
- 小程序版python语言pytorch框架训练识别非机动车辆-不含数据集图片-含逐行注释和说明文档.zip
- 驱动多路舵机51单片机源程序代码
- 小程序版python语言pytorch框架训练识别猴子种类-不含数据集图片-含逐行注释和说明文档.zip
- c++语言调用matlab画图源程序
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)
- 1
- 2
前往页