如何用Java实现智能对话机器人

前言 这个时代人工智能如此火爆,身为圈内人我们应该多少对他有些了解,为了靠他近一些今天我们动手用Java实现一个智能聊天机器人,当然此处我们需要依赖图灵机器人的Api

这篇博客涵盖的知识点

HTML网页源代码抓取

JSON字符串解析

以下为需要用到的Jar

Jar

备注

JSONObject

用于解析JSON

首先我们要注册一个图灵机器人的帐号 并创建我们自己的机器人

这里可以根据个人需求填写

然后拿到我们刚刚创建的机器人的APIkey

从这里我们可以拿到我们的api请求地址,和我们的机器人的APIkey

图灵机器人现在维护的请求方式为POST 但是GET请求还能使用,这里我们使用GET请求接口。

接口的请求地址为 http://www.tuling123.com/openapi/api?key= [APPkey]&info=[你需要发送的消息]

准备完毕后 我们开始代码部分

第一步,编写的工具类

import org.json.JSONException;

import org.json.JSONObject;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.UnsupportedEncodingException;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import java.net.URLEncoder;

/**

* @author 4everlynn

* @date 2017/12/17

*/

public class Util {

//存储APIkey

public static final String API_KEY = "填写你的APPKEY";

//存储接口请求地址

public static final String API_URL = "http://www.tuling123.com/openapi/api";

/**

* 拼接出我们的接口请求地址

*

* @param msg 需要发送的消息

* @return

*/

private String setParameter(String msg) {

//在接口请求中 中文要用URLEncoder encode成UTF-8

try {

return API_URL + "?key=" + API_KEY + "&info=" + URLEncoder.encode(msg, "utf-8");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

return null;

}

/**

* 拿到消息回复的内容的方法

* @param json 请求接口得到的JSON

* @return text的部分

*/

private String getString(String json){

try {

JSONObject object = new JSONObject(json);

return object.getString("text");

} catch (JSONException e) {

e.printStackTrace();

}

return null;

}

/**

* 提供对外公开的方法用于最终拿到机器人回复的消息

* @param msg 传入你需要发送的信息

* @return 机器人对你的回复

*/

public String getMessage(String msg){

return getString(getHTML(setParameter(msg)));

}

private String getHTML(String url) {

StringBuffer buffer = new StringBuffer();

BufferedReader bufferedReader = null;

try {

//创建URL对象

URL u = new URL(url);

//打开连接

HttpURLConnection connection = (HttpURLConnection) u.openConnection();

//从连接中拿到InputStream并由BufferedReader进行读取

bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

String line = "";

//循环每次加入一行HTML内容 直到最后一行

while ((line = bufferedReader.readLine()) != null) {

buffer.append(line);

}

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}finally {

try {

//结束时候关闭释放资源

bufferedReader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

return buffer.toString();

}

}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94[/code]

第二步,编写测试类

package com.disware;

import java.util.Scanner;

/**

* @author 4everlynn

* @date 2017/12/17

*/

public class Main {

public static void main(String[] args) {

//声明并实例化我们刚刚封装好的工具类

Util util = new Util();

//接收用户输入

Scanner scanner = new Scanner(System.in);

while (scanner.hasNext()){

//直接输出机器人的回复

System.err.println("Ta 对你说 -> " + util.getMessage(scanner.nextLine()));

}

}

}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22[/code]

java 对话 智能,如何用Java实现智能对话机器人相关推荐

  1. 如何用命令行写java程序_如何用java实现doc命令行

    如何用java实现doc命令行, dir显示当前所有目录下的文件 cd 文件目录 进入到该目录 cd ..退到上级目录,一面是我写的代码,调试了. 不过有点小bug就是当你进去的是文件就会提示空指针异 ...

  2. java 图片 rgb_简单的java图片处理——如何用Java读出一张图片的RGB值?

    如何用Java读出一张图片的RGB值? (牛人可以从第六步开始看,牛人看了代码就知道怎么建文件夹啦!! ) (1) 在刚刚建立项目的根目录新建一个文件夹date,例如,我的这个项目的根目录是:E:\W ...

  3. java 下雪_如何用JAVA实现下雪场景

    看到这个题目,希望大家不要慌忙,从字面上很容易就能看出,我们要用到JFrame框架,然后需要在Frame里面添加雪花,最后让雪花移动起来. 下面我们来具体分析一下: 首先,我们需要有一个JFrame类 ...

  4. java椭圆_如何用java画椭圆

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 利用java画出椭圆.也就是鼠标一边移动一边显示出椭圆,如何做到请大神指教 这是我写的(没有达到我自己的要求): import java.awt.*; i ...

  5. java类似sizeof_如何用Java编写类似C的Sizeof函数

    java类似sizeof 如果您刚开始学习Java并且是C语言背景,那么您可能已经注意到Java和C编程语言之间存在一些差异,例如String是Java中的对象,而不是NULL终止的字符数组. 同样, ...

  6. java rsa 128_如何用java实现128位密钥的RSA算法

    展开全部 import javax.crypto.Cipher; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; impor ...

  7. datatable java实现_如何用Java实现.NET中DataTable功能

    展开全部 Junit中测试:32313133353236313431303231363533e59b9ee7ad9431333361306366 @Test public void joinTable ...

  8. java解析odt,如何用java以编程方式创建odt文件?

    How can I create an odt (LibreOffice/OpenOffice Writer) file with Java programmatically? A "hel ...

  9. java 艺术字_如何用Java做word里面的艺术字

    展开全部 你可以使用Spire.Doc for Java在Java应用程序中为word文档添加32313133353236313431303231363533e59b9ee7ad94313334313 ...

  10. java数字转换器_如何用java写个整数进制转换器

    十进制转为二进制.八进制.十六进制, 用  Integer.toXXXString()方法 (1)十进制转为二进制: Integer.toBinaryString(int i); public sta ...

最新文章

  1. android-ndk-r15c libncurses.so.5
  2. jzoj4248-n染色【数学,快速幂】
  3. 我妈在深圳的这些日子
  4. svg载入html,SVG系列教程:SVG简介与嵌入HTML页面的方式
  5. mysql 触发器 运算符_mysql三元运算,上下连表,视图,触发器,存储过程,事务等不常用方法...
  6. solr 3.5 配置及应用(二)
  7. 01.轮播图之四 :imageViews(2 或者 3 个imageview) 轮播
  8. For web.config setting,reference the book of
  9. 程序员过关斩将——数据库的乐观锁和悲观锁并非真实的锁
  10. php 科学计数法 运算,php弱语言特性-计算科学计数法
  11. 小米是否真的可以干翻华为?
  12. 3D-HEVC解码器一
  13. 记一次笔记本连接酒店Wifi点击认证后总是报网络连接问题
  14. 终于有人来盘一盘安卓ASO技巧了,安卓市场aso优化技巧
  15. npm install一直报错equest to https://registry.npm.taobao.org/underscore failed, reason: Client network
  16. Springboot整合JPA多数据源(Oracle+Mysql)
  17. python开发工具之神兵利器_擅用Python,强推这 7 种 神兵利器!
  18. 【分享】在小米实习到SP+转正
  19. 如何在Ubuntu上安装OnlyOffice Docs 7.1?
  20. 转:不懂这些,你所谓的“复盘”都是无用功

热门文章

  1. Hive之窗口函数(一文搞懂)
  2. 2019-2020新闻自动挂机阅读脚本应用开发
  3. 一文掌握面向Windows平台的深度学习工控程序开发(使用Paddle Inference部署MFC、C#程序,内含完整代码链接)
  4. 数字图像处理-图像复原
  5. 学习模式上的记录之统计篇一 秩和检验
  6. 迈道科技生产安全风险调度管控系统
  7. Win7安装IIS出错,总是提示“出现错误。并非所有的功能被成功更改。”
  8. USTC2017 writeup
  9. Python双人贪吃蛇小游戏
  10. 《编译原理》陈火旺——词法分析程序c语言实现完整版