{"id":25490,"date":"2024-09-07T04:59:41","date_gmt":"2024-09-06T19:59:41","guid":{"rendered":"http:\/\/www.tyosuke20xx.com\/blog\/?p=25490"},"modified":"2024-09-07T04:59:43","modified_gmt":"2024-09-06T19:59:43","slug":"python-aichatbot","status":"publish","type":"post","link":"http:\/\/www.tyosuke20xx.com\/blog\/?p=25490","title":{"rendered":"python AIChatBOT"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>import re\nimport datetime\n\nclass Chatbot:\n    def __init__(self):\n        self.context = {}\n        self.history = &#91;]\n        self.user_name = None\n        self.current_intent = None  # \u73fe\u5728\u306e\u610f\u56f3\u3092\u4fdd\u6301\n        self.emotion_state = \"neutral\"  # \u30e6\u30fc\u30b6\u30fc\u306e\u611f\u60c5\u72b6\u614b\n        self.long_term_memory = {}  # \u30e6\u30fc\u30b6\u30fc\u306e\u597d\u307f\u306a\u3069\u3092\u8a18\u61b6\u3059\u308b\n\n    # \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3068\u5c65\u6b74\u3092\u66f4\u65b0\n    def update_context(self, key, value):\n        self.context&#91;key] = value\n\n    def add_to_history(self, user_input, bot_response):\n        self.history.append({\"user\": user_input, \"bot\": bot_response})\n\n    # \u611f\u60c5\u3092\u5206\u6790\n    def analyze_emotion(self, user_input):\n        if re.search(r\"\u75b2\u308c\u305f|\u60b2\u3057\u3044\", user_input):\n            return \"sad\"\n        elif re.search(r\"\u5b09\u3057\u3044|\u697d\u3057\u3044\", user_input):\n            return \"happy\"\n        else:\n            return \"neutral\"\n\n    # \u610f\u56f3\u306e\u8a8d\u8b58\n    def intent_recognition(self, user_input):\n        if re.search(r\"\u3053\u3093\u306b\u3061\u306f|\u304a\u306f\u3088\u3046\", user_input):\n            return \"greeting\"\n        elif re.search(r\"\u540d\u524d\u306f|\u3042\u306a\u305f\u306f\u8ab0\", user_input):\n            return \"identity\"\n        elif re.search(r\"\u3042\u308a\u304c\u3068\u3046\", user_input):\n            return \"thanks\"\n        elif re.search(r\"\u5929\u6c17|\u5929\u5019\", user_input):\n            return \"weather\"\n        elif re.search(r\"\u65e5\u4ed8|\u6642\u9593\", user_input):\n            return \"time\"\n        elif re.search(r\"\u3055\u3088\u3046\u306a\u3089|\u30d0\u30a4\u30d0\u30a4\", user_input):\n            return \"farewell\"\n        elif re.search(r\"\u8da3\u5473\", user_input):\n            return \"hobby\"\n        elif re.search(r\"\u30bf\u30b9\u30af|\u4e88\u5b9a\", user_input):\n            return \"task_management\"\n        else:\n            return \"unknown\"\n\n    # \u610f\u56f3\u306b\u5fdc\u3058\u305f\u5fdc\u7b54\u751f\u6210\n    def handle_intent(self, intent, user_input):\n        if intent == \"greeting\":\n            return self.greet_user()\n        elif intent == \"identity\":\n            return self.ask_for_name()\n        elif intent == \"thanks\":\n            return \"\u3069\u3046\u3044\u305f\u3057\u307e\u3057\u3066\uff01\"\n        elif intent == \"weather\":\n            return self.get_weather()\n        elif intent == \"time\":\n            return self.get_time()\n        elif intent == \"farewell\":\n            return \"\u3055\u3088\u3046\u306a\u3089\uff01\u307e\u305f\u304a\u4f1a\u3044\u3057\u307e\u3057\u3087\u3046\u3002\"\n        elif intent == \"hobby\":\n            return self.ask_hobby()\n        elif intent == \"task_management\":\n            return self.manage_task()\n        else:\n            return \"\u3059\u307f\u307e\u305b\u3093\u3001\u3088\u304f\u308f\u304b\u308a\u307e\u305b\u3093\u3002\u3082\u3046\u4e00\u5ea6\u304a\u9858\u3044\u3057\u307e\u3059\u3002\"\n\n    # \u6328\u62f6\u5fdc\u7b54\n    def greet_user(self):\n        if self.user_name:\n            return f\"\u3053\u3093\u306b\u3061\u306f\u3001{self.user_name}\u3055\u3093\uff01\u4eca\u65e5\u306f\u3069\u3046\u3055\u308c\u307e\u3057\u305f\u304b\uff1f\"\n        else:\n            return \"\u3053\u3093\u306b\u3061\u306f\uff01\u304a\u540d\u524d\u3092\u6559\u3048\u3066\u3044\u305f\u3060\u3051\u307e\u3059\u304b\uff1f\"\n\n    # \u540d\u524d\u3092\u805e\u304f\n    def ask_for_name(self):\n        if not self.user_name:\n            self.current_intent = \"ask_name\"\n            return \"\u79c1\u306f\u3042\u306a\u305f\u306e\u540d\u524d\u3092\u307e\u3060\u805e\u3044\u3066\u3044\u307e\u305b\u3093\u306d\u3002\u6559\u3048\u3066\u3044\u305f\u3060\u3051\u307e\u3059\u304b\uff1f\"\n        else:\n            return f\"\u3042\u306a\u305f\u306e\u304a\u540d\u524d\u306f{self.user_name}\u3067\u3059\u306d\uff01\"\n\n    # \u8da3\u5473\u306b\u3064\u3044\u3066\u805e\u304f\n    def ask_hobby(self):\n        if \"hobby\" not in self.long_term_memory:\n            self.current_intent = \"ask_hobby\"\n            return \"\u8da3\u5473\u306f\u4f55\u3067\u3059\u304b\uff1f\"\n        else:\n            hobby = self.long_term_memory&#91;'hobby']\n            return f\"\u4ee5\u524d\u304a\u3063\u3057\u3083\u3063\u305f\u8da3\u5473\u306f{hobby}\u3067\u3059\u306d\uff01\"\n\n    # \u30bf\u30b9\u30af\u7ba1\u7406\uff08\u4f8b: \u30ab\u30ec\u30f3\u30c0\u30fc\u306b\u4e88\u5b9a\u3092\u8ffd\u52a0\uff09\n    def manage_task(self):\n        self.current_intent = \"task_management\"\n        return \"\u65b0\u3057\u3044\u4e88\u5b9a\u3092\u8ffd\u52a0\u3057\u305f\u3044\u306e\u3067\u3059\u304b\uff1f\u8a73\u7d30\u3092\u6559\u3048\u3066\u304f\u3060\u3055\u3044\u3002\"\n\n    # \u5929\u6c17\u60c5\u5831\u306e\u53d6\u5f97\uff08\u4eee\u60f3\uff09\n    def get_weather(self):\n        return \"\u4eca\u65e5\u306f\u6674\u308c\u3067\u3001\u6c17\u6e29\u306f22\u5ea6\u3067\u3059\u3002\"\n\n    # \u65e5\u4ed8\u30fb\u6642\u9593\u3092\u53d6\u5f97\n    def get_time(self):\n        now = datetime.datetime.now()\n        return f\"\u4eca\u306f{now.strftime('%Y\u5e74%m\u6708%d\u65e5 %H:%M:%S')}\u3067\u3059\u3002\"\n\n    # \u5fdc\u7b54\u3092\u611f\u60c5\u306b\u57fa\u3065\u3044\u3066\u8abf\u6574\n    def adjust_response_by_emotion(self, response):\n        if self.emotion_state == \"sad\":\n            return f\"\u5143\u6c17\u51fa\u3057\u3066\u304f\u3060\u3055\u3044\u306d\u3002{response}\"\n        elif self.emotion_state == \"happy\":\n            return f\"\u7d20\u6674\u3089\u3057\u3044\u3067\u3059\u306d\uff01{response}\"\n        else:\n            return response\n\n    # \u540d\u524d\u3092\u66f4\u65b0\n    def update_name(self, user_input):\n        self.user_name = user_input\n        self.long_term_memory&#91;'name'] = user_input\n\n    # \u8da3\u5473\u3092\u4fdd\u5b58\n    def update_hobby(self, user_input):\n        self.long_term_memory&#91;'hobby'] = user_input\n\n    # \u5fdc\u7b54\u306e\u30e1\u30a4\u30f3\u30ed\u30b8\u30c3\u30af\n    def chatbot_response(self, user_input):\n        if self.current_intent == \"ask_name\":\n            self.update_name(user_input)\n            return f\"\u304a\u540d\u524d\u306f{self.user_name}\u3055\u3093\u3067\u3059\u306d\uff01\u3088\u308d\u3057\u304f\u304a\u9858\u3044\u3057\u307e\u3059\uff01\"\n        elif self.current_intent == \"ask_hobby\":\n            self.update_hobby(user_input)\n            return f\"{self.user_name}\u3055\u3093\u306e\u8da3\u5473\u306f{user_input}\u3067\u3059\u306d\uff01\"\n\n        # \u611f\u60c5\u5206\u6790\n        self.emotion_state = self.analyze_emotion(user_input)\n\n        # \u610f\u56f3\u89e3\u6790\n        intent = self.intent_recognition(user_input)\n\n        # \u5fdc\u7b54\u751f\u6210\n        response = self.handle_intent(intent, user_input)\n\n        # \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3068\u5c65\u6b74\u306e\u66f4\u65b0\n        self.add_to_history(user_input, response)\n        return self.adjust_response_by_emotion(response)\n\n# \u30c1\u30e3\u30c3\u30c8\u30dc\u30c3\u30c8\u3092\u5b9f\u884c\ndef run_chatbot():\n    chatbot = Chatbot()\n    \n    # \u521d\u56de\u6328\u62f6\n    print(\"\u30dc\u30c3\u30c8: \u3053\u3093\u306b\u3061\u306f\uff01\u304a\u540d\u524d\u3092\u6559\u3048\u3066\u304f\u3060\u3055\u3044\u3002\")\n    \n    while True:\n        user_input = input(\"\u3042\u306a\u305f: \")\n        \n        if user_input == \"\u7d42\u4e86\":\n            print(\"\u30c1\u30e3\u30c3\u30c8\u3092\u7d42\u4e86\u3057\u307e\u3059\u3002\")\n            break\n        \n        bot_response = chatbot.chatbot_response(user_input)\n        print(\"\u30dc\u30c3\u30c8: \" + bot_response)\n\n# \u30c1\u30e3\u30c3\u30c8\u30dc\u30c3\u30c8\u3092\u5b9f\u884c\nrun_chatbot()\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[65],"tags":[3,39],"class_list":["post-25490","post","type-post","status-publish","format-standard","hentry","category-python","tag-programming","tag-python"],"aioseo_notices":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/25490","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=25490"}],"version-history":[{"count":1,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/25490\/revisions"}],"predecessor-version":[{"id":25491,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/25490\/revisions\/25491"}],"wp:attachment":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=25490"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25490"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25490"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}