【Python】チャットボットを作ってみた

こんにちは。のっくん(@yamagablog)です。

特定のメッセージに応答する簡単なチャットボットを作ってみました。

「Pythonでチャットボットを作ってみたい」

そんな方向けの記事です。

[toc]

入力を受け付ける

こちらの入力した文字列を受け取るために以下のようにinput関数を使います。

while True:
    command = input('bot> ')
    
    if 'ばいばい' in command:
        break

while Trueとすることで、コマンドを永遠に受けつけるようにしています。

でもそれだとプログラムを終わらせられないので、

「ばいばい」と入力されたらプログラムを終わらせるようにしています。

辞書を使って変換表を作る

特定のキーワードが入力されたら、ボットが返答するメッセージを決めましょう。

変換表はPythonの辞書を使うと便利です。

bot_dict = {'ありがとう':'ドウイタシマシテ','おはよう':'オハヨウゴザイマス','げんき':'ワタシハトテモゲンキデス'}
Tips
Macの日本語キーボードでカタカナを入力するには、「control」+「k」

入力されたコマンドと辞書を比較する

入力されたコマンドに辞書のキーが含まれているか比較してみましょう。

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)

まとめ

今日のまとめ
・Pythonだと短いコードでチャットボットを作ることができる
・ボットのメッセージは辞書で管理すると便利
・辞書のデータが長くなる場合はテキストファイルに保存しよう

 

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog