Heim >Java >javaLernprogramm >So implementieren Sie einen einfachen Chatbot in Java

So implementieren Sie einen einfachen Chatbot in Java

WBOY
WBOYnach vorne
2023-05-29 20:34:041833Durchsuche

Datenbank und Tabelle erstellen, Tabellendaten vorbereiten (MySQL)

Zuerst eine Android-Datenbank erstellen
Dann ein Tabellenwörterbuch erstellen, Felder:

id int
receive varchar(100)
response varchar(100)

receive stellt die empfangenen Informationen dar.
response stellt die Antwortinformationen dar.

create database android;

use android;

create table dictionary(
   id int AUTO_INCREMENT,
   receive varchar(100),
   response varchar(100),
   PRIMARY KEY (id)
)  DEFAULT CHARSET=utf8;

insert into dictionary values(null,'你好','好你妹!');
insert into dictionary values(null,'你叫什么','你想泡我啊?');
insert into dictionary values(null,'你叫什么','同志,不约');
insert into dictionary values(null,'打你哦','来啊,来打我啊');

Objekteinstellung (ORM)

Objektrelationale Zuordnung: Legen Sie das Objekt fest, das jedem Feld in der Datenbank entspricht.

package socket;

public class Dictionary {
    public int id;
    public String receive;  // 接收
    public String response; // 回应
}

Data Access Object (DAO)

package socket;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class DictionaryDAO {

    public DictionaryDAO() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public Connection getConnection() throws SQLException {
        return DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/android?characterEncoding=UTF-8", "root",
                "admin");
    }

    public List<Dictionary> query(String recieve) {
        List<Dictionary> ds = new ArrayList<Dictionary>();

        String sql = "select * from dictionary where receive = ? ";

        try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {
            ps.setString(1, recieve);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                Dictionary d = new Dictionary();
                int id = rs.getInt(1);
                String receive = rs.getString("receive");
                String response = rs.getString("response");
                d.id = id;
                d.receive = receive;
                d.response = response;
                ds.add(d);
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }
        return ds;
    }
}

Wenn es sich hierbei nicht um ein Code-Schreibproblem handelt und ein JDBC-Fehler auftritt, achten Sie bitte darauf, ob die MySQL-Datenbank geöffnet ist.

Serverseitig

ist hauptsächlich die normale Socket-Einführungsprogrammierung.
Empfangen Sie die Daten (drucken) vom Client über den Eingabestream und fragen Sie dann die Korpusdialogdatenbank ab. Wenn sie gefunden werden, wird ein normaler Dialog zurückgegeben. Wenn sie nicht gefunden werden, bedeutet dies, dass sie nicht verstanden werden.

package socket;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Server {

    private static List<String> cannotUnderstand= new ArrayList<>();
    static{
        cannotUnderstand.add("听求不懂啊");
        cannotUnderstand.add("说人话");
        cannotUnderstand.add("再说一遍?");
        cannotUnderstand.add("大声点");
        cannotUnderstand.add("老子在忙,一边玩儿去");
    }
    public static void main(String[] args) {
        try {

            ServerSocket ss = new ServerSocket(8888);

            System.out.println("监听在端口号:8888");
            Socket s = ss.accept();

            InputStream is = s.getInputStream();
            DataInputStream dis = new DataInputStream(is);
            OutputStream os = s.getOutputStream();
            DataOutputStream dos = new DataOutputStream(os);

            while (true) {
                String msg = dis.readUTF();
                System.out.println(msg);

                List<Dictionary> ds= new DictionaryDAO().query(msg);
                String response = null;
                if(ds.isEmpty()){
                    Collections.shuffle(cannotUnderstand);
                    response = cannotUnderstand.get(0);
                }
                else{
                    Collections.shuffle(ds);
                    response = ds.get(0).response;
                }
                dos.writeUTF(response);
            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

Client

Normales Senden und Empfangen von Nachrichten

package socket;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) {
        try {
            // 连接到本机的8888端口
            Socket s = new Socket("127.0.0.1", 8888);
            //
            OutputStream os = s.getOutputStream();
            DataOutputStream dos = new DataOutputStream(os);
            InputStream is = s.getInputStream();
            DataInputStream dis = new DataInputStream(is);

            while (true) {
                Scanner sc = new Scanner(System.in);
                String str = sc.next();
                dos.writeUTF(str);
                String msg = dis.readUTF();
                System.out.println(msg);
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Das obige ist der detaillierte Inhalt vonSo implementieren Sie einen einfachen Chatbot in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen