始める無料で始める

ELIZA II: キーフレーズの抽出

ELIZA の巧みな点は、ユーザーが発した言葉をときどき応答の中に取り込むことで、まるでユーザーの言っていることを理解しているかのように見せる仕組みにあります。

この演習では、メッセージをいくつかの一般的なパターンと照合し、re.search() を使ってフレーズを抽出します。 rules というディクショナリがあらかじめ定義されており、次のパターンに対応しています。

  • "do you think (.*)"
  • "do you remember (.*)"
  • "I want (.*)"
  • "if (.*)"

演習を始める前に、Shell でこのディクショナリの内容を確認してみましょう。

この演習はコースの一部です

Python でチャットボットを作る

コースを見る

演習の手順

  • .items() メソッドを使って rules ディクショナリを繰り返し処理し、イテレータ変数として patternresponses を使います。
  • re.search()patternmessage を渡して、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"))
コードを編集して実行