人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

辞書からランダムに返答

ファイルから会話文を読み込んで、その中からランダムに返答する人工無脳を作ります。ここでは会話文のことを辞書(dictionary)と呼びます。

chatbot02.jar

Chatbotクラスから見ていきます。dicというArrayListオブジェクトを作ってます。ここに会話文を放り込んでいきます。 ArrayListはサイズを気にせずに使える配列と言ったところでしょうか。

    public Chatbot(String name) {
        this.name = name;

        dic = new ArrayList();
        rand = new Random(System.currentTimeMillis());

        // 辞書のロード
        loadDic();
    }

辞書(dic.txt)はこんな文章が入ってます。ずいぶん貧相な辞書ですね。いずれ何とかする方法を考えないといけません。

 おはよう
 こんにちは
 こんばんは
 ありがとう
 テスト
 楽しい
 だから?
 さようなら
 じゃあね
 ふーん
 よしよし
 はい
 いいえ
 そうなの?

loadDic()は上の辞書ファイルを読み込むメソッドです。

    /**
     * 辞書のロード
     */
    private void loadDic() {
        try {
            BufferedReader br = new BufferedReader(
                new InputStreamReader(
                  getClass().getResourceAsStream("dic/basic.txt")));
            String line;
            while ((line = br.readLine()) != null) {
                dic.add(line); // 辞書に追加
            }
            br.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

ファイルからテキストを読み込む方法はテキストファイル入出力(2007/2/4)を参照してください。ここでは、1行ずつファイルから会話文を読み込んで辞書に追加しています。

最後に返答する部分です。

    public String getResponse(String message) {
        // 辞書からランダムに会話をひっぱってくる
        String response = (String)dic.get(rand.nextInt(dic.size()));

        return response;
    }

ArrayListの要素はget()メソッドで取得できます。Randomオブジェクトを使ってランダムに取得しています。実行するとこっちの言い分は無視して適当に返答してきますねー。