Python模擬簡易版淘寶客服機(jī)器人的示例代碼
對于用Python制作一個簡易版的淘寶客服機(jī)器人,大概思路是:首先從數(shù)據(jù)庫中用sql語句獲取相關(guān)數(shù)據(jù)信息并將其封裝成函數(shù),然后定義機(jī)器問答的主體函數(shù),對于問題的識別可以利用正則表達(dá)式來進(jìn)行分析,結(jié)合現(xiàn)實情況選擇答案,最后在執(zhí)行時可以設(shè)置循環(huán)語句,并且在每次回答間隔1s方便進(jìn)一步做并發(fā)處理作為未來優(yōu)化方向。從以下幾個方面分別實現(xiàn):
1、貨物信息儲存到MySQL數(shù)據(jù)庫中在現(xiàn)實情景中,購物信息的數(shù)據(jù)一般會儲存到數(shù)據(jù)庫中,方便在進(jìn)行問答時才訪問數(shù)據(jù)庫獲取相關(guān)信息,可以用Python中的sqlalchemy包把表格導(dǎo)入到MySQL數(shù)據(jù)庫中:
import pymysqlimport pandas as pdimport sqlalchemy as sqlafrom sqlalchemy.orm import sessionmakerimport timeimport re#導(dǎo)入數(shù)據(jù)data = pd.read_excel(r'E:/1/Study/大三下/自然語言處理/作業(yè)表.xlsx')data = data.head(1)#datadb = sqla.create_engine(’mysql+pymysql://root:******@localhost/lsq?charset=utf8’)#連接數(shù)據(jù)庫(密碼馬賽克一下)#導(dǎo)入表格到數(shù)據(jù)庫中data.to_sql(’shopping_informations’,db,index=False,if_exists=’append’)
運行結(jié)果如下:
利用Python中的pymysql包,先對數(shù)據(jù)庫進(jìn)行連接并使用cursor()方法獲取操作游標(biāo)。然后分別對發(fā)貨時間、發(fā)貨地、商品單號和商品狀態(tài)進(jìn)行函數(shù)定義,執(zhí)行相關(guān)sql語句對數(shù)據(jù)庫信息進(jìn)行提取:
conn = pymysql.connect('localhost','root','******','lsq')#*為密碼cursor = conn.cursor()def start_time():#發(fā)貨時間 starttime_sql = 'SELECT START_RIME FROM shopping_informations' try: cursor.execute(starttime_sql) result1 = cursor.fetchall() print('親您所購買的寶貝計劃在%s進(jìn)行發(fā)貨~預(yù)計將會在%s不要著急喲' % result1[0]) except: print('哎呀!機(jī)器客服這邊暫時找不到相關(guān)數(shù)據(jù)嗚嗚嗚~親可以聯(lián)系一下人工客服') conn.close()def start_local():#發(fā)貨地 startlocal_sql = 'SELECT START_LOCAL FROM shopping_informations' try: cursor.execute(startlocal_sql) result2 = cursor.fetchone() print('親您所購買的寶貝計劃從%s發(fā)出~不要著急喲' % result2[0]) except: print('哎呀!機(jī)器客服這邊暫時找不到相關(guān)數(shù)據(jù)嗚嗚嗚~親可以聯(lián)系一下人工客服') 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('哎呀!機(jī)器客服這邊暫時找不到相關(guān)數(shù)據(jù)嗚嗚嗚~親可以聯(lián)系一下人工客服') conn.close()def state():#商品狀態(tài) state_sql = 'SELECT STATE FROM shopping_informations' try: cursor.execute(state_sql) result4 = cursor.fetchone() print('親您所購買的寶貝現(xiàn)在在%s中~不要著急喲' % result4[0]) except: print('哎呀!機(jī)器客服這邊暫時找不到相關(guān)數(shù)據(jù)嗚嗚嗚~親可以聯(lián)系一下人工客服') conn.close()
其中,在函數(shù)定義里加入了try-except異常捕捉部分,當(dāng)問句發(fā)生錯誤或者在數(shù)據(jù)庫中無法找到對應(yīng)數(shù)據(jù)時,可以讓客戶聯(lián)系人工客服。
3、利用正則表達(dá)式對問句進(jìn)行識別對于客戶所輸入的問題,用正則表達(dá)式對其進(jìn)行分析識別,選擇相應(yīng)的答案進(jìn)行回答,當(dāng)問題超過答案范圍,可以讓客戶聯(lián)系人工客服:
str1 = ''def answer_robot(str1): if re.search(r’.*快遞(.*)?’,str1):#涉及到快遞公司的問題 str2 = '親!我們店統(tǒng)一默認(rèn)發(fā)百世匯通,按倉擇優(yōu)分配快遞,不能指定喲~請諒解!' elif re.search(r’.*狀態(tài)(.*)?’,str1):#涉及到商品狀態(tài)的問題 str2 = state() elif re.search(r’(w)?[編號|單號|貨號]w’,str1):#涉及到商品單號的問題 str2 = ID() elif re.search( r’(w)?[哪里|發(fā)貨地]w’,str1):#涉及到商品發(fā)貨地的問題 str2 = start_local() elif re.search( r’(w)?[時間|時候]w’,str1):#涉及到商品發(fā)貨時間的問題 str2 = start_time() else: str2 = '嗚嗚嗚問題太復(fù)雜啦!建議親找人工姐姐喲~' return str2
最后,定義主體函數(shù),其中每次問答需要休眠1s的時間。因為在實際情景中,客服機(jī)器人需要在并發(fā)的情況下實現(xiàn),也就是說存在多人同時使用客服機(jī)器人的情況:
def main(): while True:#可以循環(huán)多次使用(ctrl+c結(jié)束程序) str1 = input('輸入對話:') str3 = answer_robot(str1) time.sleep(1) print(str3)
利用PowerShell運行改py文件,結(jié)果如下圖(ctrl+c終止程序):
1、進(jìn)一步利用1s間隔時間做并發(fā)處理,模擬現(xiàn)實生活中多人同時使用客服機(jī)器人2、進(jìn)一步優(yōu)化正則表達(dá)式的書寫,從結(jié)果截圖可以看出在一些回答上機(jī)器人在選擇答案時會出現(xiàn)一定的錯誤,精確度不高3、分別用sql語句獲取不同購物信息會有些累贅,可以直接獲取整個數(shù)據(jù)庫的購物表,再利用pd中的dataframe來接受并提取其中的信息
到此這篇關(guān)于Python模擬簡易版淘寶客服機(jī)器人的示例代碼的文章就介紹到這了,更多相關(guān)Python 淘寶客服機(jī)器人內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. ASP基礎(chǔ)知識VBScript基本元素講解2. Python requests庫參數(shù)提交的注意事項總結(jié)3. IntelliJ IDEA導(dǎo)入jar包的方法4. ajax請求添加自定義header參數(shù)代碼5. Kotlin + Flow 實現(xiàn)Android 應(yīng)用初始化任務(wù)啟動庫6. 利用CSS3新特性創(chuàng)建透明邊框三角7. python操作mysql、excel、pdf的示例8. 詳談ajax返回數(shù)據(jù)成功 卻進(jìn)入error的方法9. 使用python 計算百分位數(shù)實現(xiàn)數(shù)據(jù)分箱代碼10. 使用Python和百度語音識別生成視頻字幕的實現(xiàn)
