python AIChatBOT

import re
import datetime

class Chatbot:
    def __init__(self):
        self.context = {}
        self.history = []
        self.user_name = None
        self.current_intent = None  # 現在の意図を保持
        self.emotion_state = "neutral"  # ユーザーの感情状態
        self.long_term_memory = {}  # ユーザーの好みなどを記憶する

    # コンテキストと履歴を更新
    def update_context(self, key, value):
        self.context[key] = value

    def add_to_history(self, user_input, bot_response):
        self.history.append({"user": user_input, "bot": bot_response})

    # 感情を分析
    def analyze_emotion(self, user_input):
        if re.search(r"疲れた|悲しい", user_input):
            return "sad"
        elif re.search(r"嬉しい|楽しい", user_input):
            return "happy"
        else:
            return "neutral"

    # 意図の認識
    def intent_recognition(self, user_input):
        if re.search(r"こんにちは|おはよう", user_input):
            return "greeting"
        elif re.search(r"名前は|あなたは誰", user_input):
            return "identity"
        elif re.search(r"ありがとう", user_input):
            return "thanks"
        elif re.search(r"天気|天候", user_input):
            return "weather"
        elif re.search(r"日付|時間", user_input):
            return "time"
        elif re.search(r"さようなら|バイバイ", user_input):
            return "farewell"
        elif re.search(r"趣味", user_input):
            return "hobby"
        elif re.search(r"タスク|予定", user_input):
            return "task_management"
        else:
            return "unknown"

    # 意図に応じた応答生成
    def handle_intent(self, intent, user_input):
        if intent == "greeting":
            return self.greet_user()
        elif intent == "identity":
            return self.ask_for_name()
        elif intent == "thanks":
            return "どういたしまして!"
        elif intent == "weather":
            return self.get_weather()
        elif intent == "time":
            return self.get_time()
        elif intent == "farewell":
            return "さようなら!またお会いしましょう。"
        elif intent == "hobby":
            return self.ask_hobby()
        elif intent == "task_management":
            return self.manage_task()
        else:
            return "すみません、よくわかりません。もう一度お願いします。"

    # 挨拶応答
    def greet_user(self):
        if self.user_name:
            return f"こんにちは、{self.user_name}さん!今日はどうされましたか?"
        else:
            return "こんにちは!お名前を教えていただけますか?"

    # 名前を聞く
    def ask_for_name(self):
        if not self.user_name:
            self.current_intent = "ask_name"
            return "私はあなたの名前をまだ聞いていませんね。教えていただけますか?"
        else:
            return f"あなたのお名前は{self.user_name}ですね!"

    # 趣味について聞く
    def ask_hobby(self):
        if "hobby" not in self.long_term_memory:
            self.current_intent = "ask_hobby"
            return "趣味は何ですか?"
        else:
            hobby = self.long_term_memory['hobby']
            return f"以前おっしゃった趣味は{hobby}ですね!"

    # タスク管理(例: カレンダーに予定を追加)
    def manage_task(self):
        self.current_intent = "task_management"
        return "新しい予定を追加したいのですか?詳細を教えてください。"

    # 天気情報の取得(仮想)
    def get_weather(self):
        return "今日は晴れで、気温は22度です。"

    # 日付・時間を取得
    def get_time(self):
        now = datetime.datetime.now()
        return f"今は{now.strftime('%Y年%m月%d日 %H:%M:%S')}です。"

    # 応答を感情に基づいて調整
    def adjust_response_by_emotion(self, response):
        if self.emotion_state == "sad":
            return f"元気出してくださいね。{response}"
        elif self.emotion_state == "happy":
            return f"素晴らしいですね!{response}"
        else:
            return response

    # 名前を更新
    def update_name(self, user_input):
        self.user_name = user_input
        self.long_term_memory['name'] = user_input

    # 趣味を保存
    def update_hobby(self, user_input):
        self.long_term_memory['hobby'] = user_input

    # 応答のメインロジック
    def chatbot_response(self, user_input):
        if self.current_intent == "ask_name":
            self.update_name(user_input)
            return f"お名前は{self.user_name}さんですね!よろしくお願いします!"
        elif self.current_intent == "ask_hobby":
            self.update_hobby(user_input)
            return f"{self.user_name}さんの趣味は{user_input}ですね!"

        # 感情分析
        self.emotion_state = self.analyze_emotion(user_input)

        # 意図解析
        intent = self.intent_recognition(user_input)

        # 応答生成
        response = self.handle_intent(intent, user_input)

        # コンテキストと履歴の更新
        self.add_to_history(user_input, response)
        return self.adjust_response_by_emotion(response)

# チャットボットを実行
def run_chatbot():
    chatbot = Chatbot()
    
    # 初回挨拶
    print("ボット: こんにちは!お名前を教えてください。")
    
    while True:
        user_input = input("あなた: ")
        
        if user_input == "終了":
            print("チャットを終了します。")
            break
        
        bot_response = chatbot.chatbot_response(user_input)
        print("ボット: " + bot_response)

# チャットボットを実行
run_chatbot()

投稿者: chosuke

趣味はゲームやアニメや漫画などです

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です