2026/2/21 15:28:04
网站建设
项目流程
网站快照回档,做网络平台需要什么条件,大气宏伟wordpress企业主题,谷歌收录提交前言
透過這篇文章#xff0c;我們將使用 python spacCy開發一個用於聊天機器人
本範例以 Python 為基礎#xff0c;結合 spaCy 的中文語言模型#xff0c;實作一個可進行基本中文對話的簡易 ChatBot。 安裝相關模型
spaCy是一個用於自然語言處理的開源軟件庫
參看: htt…前言透過這篇文章我們將使用 python spacCy開發一個用於聊天機器人本範例以 Python 為基礎結合 spaCy 的中文語言模型實作一個可進行基本中文對話的簡易 ChatBot。安裝相關模型spaCy是一個用於自然語言處理的開源軟件庫參看: https://pypi.org/project/spacy/% pip install spacy安裝 使用 spaCy 的 中文模型% python3 -m spacy download zh_core_web_sm中文模型簡介:zh_core_web_sm: 最小的中文語言模型用於基本的語言處理任務。zh_core_web_md: 一個中等大小的中文語言模型比 zh_core_web_sm 包含更多的詞彙、語言特徵和上下文訊息可以用於更多的語言處理任務。zh_core_web_lg: 最大的中文語言模型比 zh_core_web_md 包含更多的語言特徵和上下文信息。建立對話回覆檔(範例)將回覆內容獨立存放於外部responses.json檔案不僅能讓對話資料與程式邏輯分離也讓後續新增或調整對話內容變靈活。{ greeting: [ 你好, 你好呀有什麼需要幫忙的嗎, 哈囉, 嗨很高興見到你, 嗨今天過得如何 ], how_are_you: [ 我很好謝謝你的關心, 還不錯你呢, 一切都很順利, 心情不錯希望你也是, 還可以正在學習中 ], goodbye: [ 再見, 掰掰祝你有美好的一天, 下次再聊, 保重, 期待再和你聊天 ], thanks: [ 不客氣, 很高興能幫上忙, 沒問題, 隨時都可以找我, 這是我應該做的 ], name: [ 我是簡單的聊天機器人, 你可以叫我 ChatBot, 我是一個用 Python 寫的聊天機器人, 目前還沒有名字 , 我是你的對話小助手 ], help: [ 你可以跟我聊天或問問題, 我可以陪你練習對話, 你可以問我一些簡單的問題, 我還在學習中但我會盡力回答, 試著跟我說聲你好吧 ], default: [ 我還在學習能換個方式說嗎, 這個我暫時不太懂, 可以再說清楚一點嗎, 不好意思我沒聽懂, 這部分我還需要多學習 ], weather: [ 今天天氣如何呢, 我沒辦法即時查天氣, 你可以看看窗外, 天氣好壞都要保持好心情, 希望今天是個好天氣 ], jokes: [ 為什麼程式設計師不喜歡大自然因為有太多 bug, 程式設計師最怕三個字可以改嗎, 我不是懶我只是把效能最佳化到極致, 我不是健忘只是記憶比較挑人, 世界上最遙遠的距離是需求文件跟實際功能, 程式跑不動的時候先怪電腦準沒錯, 為什麼程式設計師不喜歡出門因為外面沒有 Wi-Fi, Debug 就像當偵探而兇手通常是昨天的自己, 程式寫得好不好不重要能不能跑比較重要, 我有一個笑話關於遞迴但你可能要聽很多次才懂, 需求說『很簡單』的時候通常最不簡單, 為什麼程式設計師愛喝咖啡因為沒有咖啡就沒有 code, 有時候程式不是錯只是不照你的想法執行, 能跑的程式就是好程式, Bug 不會消失它只是換個地方出現, 為什麼程式設計師討厭早起因為腦袋還沒 compile, 今天的我比昨天多懂一個 bug, 我不是拖延症我只是比較晚開始, 今天本來想早睡結果手機不同意, 有時候腦袋轉得太快身體卻跟不上, 我不是方向感不好只是比較有探索精神, 錢不是問題問題是我沒有錢, 我每天都很努力只是努力在想要不要努力, 有些事情想不通就先不要想了, 人生很多問題睡一覺也不一定會解決但至少比較不累, 我對未來很有規劃只是還沒開始, 明明什麼都沒做卻覺得很累, 有些人表面看起來很正常其實也是, 我不是不想動是沙發黏住我了, 今天的我依然沒有辜負昨天的期待, 有時候沉默不是沒話說是在整理思緒, 夢想還在路上只是搭的是慢車, 我不是選擇困難只是每個都想選, 生活已經很難了笑一個比較划算 ] }建立檔案simple_chatbot.pyimport os import spacy import json import random # 取得 目前所在的資料夾路徑 BASE_DIR os.path.dirname(os.path.abspath(__file__)) RESPONSES_PATH os.path.join(BASE_DIR, responses.json) # 載入中文模型 nlp spacy.load(zh_core_web_sm) # 讀取回覆資料 with open(RESPONSES_PATH, r, encodingutf-8) as f: responses json.load(f) def get_response(intent): return random.choice(responses.get(intent, responses[default])) def respond_to_user(user_input): doc nlp(user_input) text user_input.lower() if any(word in text for word in [你好, 哈囉, 嗨, hello, hi]): return get_response(greeting) if any(word in text for word in [你好吗, 你好嗎, 過得]): return get_response(how_are_you) if any(word in text for word in [你是誰, 你的名字]): return get_response(name) if any(word in text for word in [幫助, 能做什麼]): return get_response(help) if any(word in text for word in [笑話, 講個笑話, 好笑的]): return get_response(jokes) if any(word in text for word in [謝謝, 感謝]): return get_response(thanks) if any(word in text for word in [再見, 掰掰, bye]): return get_response(goodbye) # 使用 NER(人名/地點) for ent in doc.ents: if ent.label_ PERSON: return f你提到了 {ent.text}他是你的朋友嗎 if ent.label_ GPE: return f{ent.text} 聽起來是個地方 return get_response(default) if __name__ __main__: print(ChatBot 已啟動輸入「bye」結束對話) while True: user_input input(你) if user_input.strip() : continue response respond_to_user(user_input) print(ChatBot:, response) if user_input in [bye,再見, 掰掰]: break備註:NER (命名實體識別)是什麼一般指識別文本中具有特定意義的實體指的是可以用專有名詞標識的事物通常包括人名、地名、組織機構名、日期時間、專有名詞等文字。測試