您好,登錄后才能下訂單哦!
使用Python編寫一個簡易客服機器人?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
在現實情景中,購物信息的數據一般會儲存到數據庫中,方便在進行問答時才訪問數據庫獲取相關信息,可以用Python中的sqlalchemy包把表格導入到MySQL數據庫中:
import pymysql import pandas as pd import sqlalchemy as sqla from sqlalchemy.orm import sessionmaker import time import re #導入數據 data = pd.read_excel(r"E:/1/Study/大三下/自然語言處理/作業表.xlsx") data = data.head(1) #data db = sqla.create_engine('mysql+pymysql://root:******@localhost/lsq?charset=utf8')#連接數據庫(密碼馬賽克一下) #導入表格到數據庫中 data.to_sql('shopping_informations',db,index=False,if_exists='append')
運行結果如下:
利用Python中的pymysql包,先對數據庫進行連接并使用cursor()方法獲取操作游標。然后分別對發貨時間、發貨地、商品單號和商品狀態進行函數定義,執行相關sql語句對數據庫信息進行提取:
conn = pymysql.connect("localhost","root","******","lsq")#*為密碼 cursor = conn.cursor() def start_time():#發貨時間 starttime_sql = "SELECT START_RIME FROM shopping_informations" try: cursor.execute(starttime_sql) result1 = cursor.fetchall() print("親您所購買的寶貝計劃在%s進行發貨~預計將會在%s不要著急喲" % result1[0]) except: print("哎呀!機器客服這邊暫時找不到相關數據嗚嗚嗚~親可以聯系一下人工客服") conn.close() def start_local():#發貨地 startlocal_sql = "SELECT START_LOCAL FROM shopping_informations" try: cursor.execute(startlocal_sql) result2 = cursor.fetchone() print("親您所購買的寶貝計劃從%s發出~不要著急喲" % result2[0]) except: print("哎呀!機器客服這邊暫時找不到相關數據嗚嗚嗚~親可以聯系一下人工客服") conn.close() def ID():#商品單號 id_sql = "SELECT ID FROM shopping_informations" try: cursor.execute(id_sql) result3 = cursor.fetchone() print("親您所購買的寶貝單號是%s" % result3[0]) except: print("哎呀!機器客服這邊暫時找不到相關數據嗚嗚嗚~親可以聯系一下人工客服") conn.close() def state():#商品狀態 state_sql = "SELECT STATE FROM shopping_informations" try: cursor.execute(state_sql) result4 = cursor.fetchone() print("親您所購買的寶貝現在在%s中~不要著急喲" % result4[0]) except: print("哎呀!機器客服這邊暫時找不到相關數據嗚嗚嗚~親可以聯系一下人工客服") conn.close()
其中,在函數定義里加入了try-except異常捕捉部分,當問句發生錯誤或者在數據庫中無法找到對應數據時,可以讓客戶聯系人工客服。
對于客戶所輸入的問題,用正則表達式對其進行分析識別,選擇相應的答案進行回答,當問題超過答案范圍,可以讓客戶聯系人工客服:
str1 = "" def answer_robot(str1): if re.search(r'.*快遞(.*)?',str1):#涉及到快遞公司的問題 str2 = "親!我們店統一默認發百世匯通,按倉擇優分配快遞,不能指定喲~請諒解!" elif re.search(r'.*狀態(.*)?',str1):#涉及到商品狀態的問題 str2 = state() elif re.search(r'(\w)?[編號|單號|貨號]\w',str1):#涉及到商品單號的問題 str2 = ID() elif re.search( r'(\w)?[哪里|發貨地]\w',str1):#涉及到商品發貨地的問題 str2 = start_local() elif re.search( r'(\w)?[時間|時候]\w',str1):#涉及到商品發貨時間的問題 str2 = start_time() else: str2 = "嗚嗚嗚問題太復雜啦!建議親找人工姐姐喲~" return str2
最后,定義主體函數,其中每次問答需要休眠1s的時間。因為在實際情景中,客服機器人需要在并發的情況下實現,也就是說存在多人同時使用客服機器人的情況:
def main(): while True:#可以循環多次使用(ctrl+c結束程序) str1 = input("輸入對話:") str3 = answer_robot(str1) time.sleep(1) print(str3)
利用PowerShell運行改py文件,結果如下圖(ctrl+c終止程序):
1、進一步利用1s間隔時間做并發處理,模擬現實生活中多人同時使用客服機器人
2、進一步優化正則表達式的書寫,從結果截圖可以看出在一些回答上機器人在選擇答案時會出現一定的錯誤,精確度不高
3、分別用sql語句獲取不同購物信息會有些累贅,可以直接獲取整個數據庫的購物表,再利用pd中的dataframe來接受并提取其中的信息
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。