欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于图灵机器人的聊天机器人实现(一)

程序员文章站 2022-03-12 15:01:07
...

最近要做一个智能音箱的项目,可是声卡一直配置不好。。。所以,还做个啥啊。没办法,智能退而求其次,做一个文本交互的聊天机器人管家,并给它写个界面。
用java写,然后在linux装个jdk就行了。
下面说一下怎么实现
一.图灵api接口

 public String chart(String message){
        StringBuffer sb=new StringBuffer();
        Random rand = new Random();
        ArrayList<String> KEYLIST=new ArrayList<String>();
        KEYLIST.add("8d64b5ff5a57435fa63fd0e111f821fc");//注册图灵机器人的账号,每创建一个机器人会给一个key,通过这个key来调用api
       KEYLIST.add("d085ed36e2604506968a3c18c5733116");//因为由每个key都有调用次数限制,这里存了多个key
       KEYLIST.add("4cdce663b3a44b5bb94cf62ca52de590");

        try{
            String APIKEY =KEYLIST.get(rand.nextInt(3));//随机选择用哪个key
            String INFO = URLEncoder.encode(message, "utf-8");//转换格式
            String getURL = "http://www.tuling123.com/openapi/api?key=" + APIKEY + "&info=" + INFO;//拼接请求url
            URL getUrl = new URL(getURL);
            HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection();
            connection.connect();//连接
            // 取得输入流,并使用Reader读取
            BufferedReader reader = new BufferedReader(new InputStreamReader( connection.getInputStream(), "utf-8"));
            sb.setLength(0);//每次把Stingbuffer清空
            String line = "";
            while ((line = reader.readLine()) != null) {//读取结果
                sb.append(line);
            }
            reader.close();
            // 断开连接
            connection.disconnect();
        }
        catch ( Exception e){
            e.printStackTrace();
        }
        String split[]=sb.toString().split(":");
        String answer=split[split.length-1];
        answer=answer.substring(1,answer.length()-2);//获取到回应
        return  answer;
    }

二.界面

package com.test;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class myframe extends JFrame {
    private JTextArea jTextAreaofShow;
    private JTextArea jTextAreaofSend;
    private JScrollPane scrollPaneofShow;//滚动框
    private JScrollPane scrollPaneofSend;
    private JPanel panel;
    private JButton jButton;
    private robot robot;
    public  myframe(String title,int x,int y,int w,int h) {
        super(title);
        robot=new robot();//初始化机器人
        //为send部分设置面板
        panel=new JPanel();
        panel.setLayout(new FlowLayout());
        jButton=new JButton("发送");
        jButton.addActionListener(new buttonlistener());//为button设置监听器
        jTextAreaofSend=new JTextArea();
        //设置send文本框的大小  2行20列
        jTextAreaofSend.setRows(2);
        jTextAreaofSend.setColumns(50);
        jTextAreaofShow=new JTextArea();
        jTextAreaofShow.setRows(10);
        jTextAreaofShow.setColumns(50);
        jTextAreaofShow.setEditable(false);//设置show文本框不可编辑
        //为两个文本框设置滚轮
        scrollPaneofSend=new JScrollPane(jTextAreaofSend);
        scrollPaneofShow=new JScrollPane(jTextAreaofShow);
        //send文本框和按钮添加到面板
        panel.add(scrollPaneofSend);
        panel.add(jButton);
        add(scrollPaneofShow,BorderLayout.CENTER);
        add(panel,BorderLayout.SOUTH);
        setBounds(x,y,w,h);//设置边界大小
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置关闭事件
    }
    public class buttonlistener implements ActionListener{//监听器
        @Override
        public void actionPerformed(ActionEvent e) {
            String message=jTextAreaofSend.getText();
            if(message!=null){
                String result=robot.chart(message);
                String show=jTextAreaofShow.getText();
                StringBuilder showbuider=new StringBuilder(show);
                showbuider.append("我说:"+message+"\n");
                showbuider.append("小管家:"+result+"\n");
                jTextAreaofShow.setText(showbuider.toString());
                jTextAreaofSend.setText("");
            }
        }
    }
}

三.主函数

package com.test;

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
       myframe myframe=new myframe("机器人管家",100,100,800,500);
       myframe.setVisible(true);
        robot robot=new robot();
        Scanner sc = new Scanner(System.in);
        ArrayList<String> ability=new ArrayList<>();
        while(true){
            System.out.println("你说:");
            String message=sc.nextLine();
            if(message.equals("提醒")){

            }
            String result=robot.chart(message);
            System.out.println("机器人:"+result);
        }


    }
}

四.结果展示
基于图灵机器人的聊天机器人实现(一)