辞書からランダムに返答
ファイルから会話文を読み込んで、その中からランダムに返答する人工無脳を作ります。ここでは会話文のことを辞書(dictionary)と呼びます。
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オブジェクトを使ってランダムに取得しています。実行するとこっちの言い分は無視して適当に返答してきますねー。