こんにちは。のっくん(@yamagablog)です。
特定のメッセージに応答する簡単なチャットボットを作ってみました。
「Pythonでチャットボットを作ってみたい」
そんな方向けの記事です。

入力を受け付ける
こちらの入力した文字列を受け取るために以下のようにinput関数を使います。
while True: command = input('bot> ') if 'ばいばい' in command: break
while Trueとすることで、コマンドを永遠に受けつけるようにしています。
でもそれだとプログラムを終わらせられないので、
「ばいばい」と入力されたらプログラムを終わらせるようにしています。
辞書を使って変換表を作る
特定のキーワードが入力されたら、ボットが返答するメッセージを決めましょう。
変換表はPythonの辞書を使うと便利です。
bot_dict = {'ありがとう':'ドウイタシマシテ','おはよう':'オハヨウゴザイマス','げんき':'ワタシハトテモゲンキデス'}
入力されたコマンドと辞書を比較する
入力されたコマンドに辞書のキーが含まれているか比較してみましょう。
responce = "" #辞書のキーが含まれているかチェック for key in bot_dict: if key in command: responce = bot_dict[key] break
もし、含まれていた場合にはボットが返すメッセージを保存します。
含まれていない場合もあるので、そういう時のためのメッセージも用意しておきましょう。
responce = "" #辞書のキーが含まれているかチェック for key in bot_dict: if key in command: responce = bot_dict[key] break # 空文字の判定 if not responce: responce = 'ナニヲイッテイルノデスカ...' print(responce)
辞書に登録されている文字がなければ、responceは空文字列のままです。空文字列の判定は、if not でしています。
全体のプログラム
以上の機能をまとめると以下のようなプログラムができます。
bot_dict = {'ありがとう':'ドウイタシマシテ','おはよう':'オハヨウゴザイマス','げんき':'ワタシハトテモゲンキデス'} while True: command = input('bot> ') responce = "" #辞書のキーが含まれているかチェック for key in bot_dict: if key in command: responce = bot_dict[key] break # 空文字の判定 if not responce: responce = 'ナニヲイッテイルノデスカ...' print(responce) if 'ばいばい' in command: break
変換表をファイルから読む
コードの中に変換表を書いてますが、数が多くなるとコードが長くなってしまいますので、
ファイルに保存して読み込むようにします。
trans.txt
ありがとう:ドウイタシマシテ おはよう:オハヨウゴザイマス げんき:ワタシハトテモゲンキデス くりすます:ジングルベール!ジングルベール! さんた:ボクモサンタクロースガダイスキダヨ
このファイルを読んで辞書に変換してみます。具体的なコードの解説については、前回の記事にまとめてあるのでどうぞ。
https://ymgsapo.com/file-read-write/
with open('trans.txt') as open_file: all_data = open_file.read() # 各行のリストを作る line_list = all_data.splitlines() #読み込んだデータを辞書に追加する bot_dict = {} for line in line_list: orig,trans = line.split(':') bot_dict[orig] = trans print(bot_dict)
まとめ
・ボットのメッセージは辞書で管理すると便利
・辞書のデータが長くなる場合はテキストファイルに保存しよう
