ELIZA II: キーフレーズの抽出
ELIZA の巧みな点は、ユーザーが発した言葉をときどき応答の中に取り込むことで、まるでユーザーの言っていることを理解しているかのように見せる仕組みにあります。
この演習では、メッセージをいくつかの一般的なパターンと照合し、re.search() を使ってフレーズを抽出します。
rules というディクショナリがあらかじめ定義されており、次のパターンに対応しています。
"do you think (.*)""do you remember (.*)""I want (.*)""if (.*)"
演習を始める前に、Shell でこのディクショナリの内容を確認してみましょう。
この演習はコースの一部です
Python でチャットボットを作る
演習の手順
.items()メソッドを使ってrulesディクショナリを繰り返し処理し、イテレータ変数としてpatternとresponsesを使います。re.search()にpatternとmessageを渡して、matchオブジェクトを作成します。- マッチした場合、
random.choice()を使ってresponseをランダムに選びます。 - その
responseに'{0}'が含まれている場合、matchオブジェクトの.group()メソッドにインデックス1を渡してフレーズを取得します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Define match_rule()
def match_rule(rules, message):
response, phrase = "default", None
# Iterate over the rules dictionary
for ____, ____ in ____:
# Create a match object
match = ____
if match is not None:
# Choose a random response
response = ____
if '{0}' in response:
phrase = ____
# Return the response and phrase
return response.format(phrase)
# Test match_rule
print(match_rule(rules, "do you remember your last birthday"))