Python模拟简易版淘宝客服机器人
对于用Python制作一个简易版的淘宝客服机器人,大概思路是:首先从数据库中用sql语句获取相关数据信息并将其封装成函数,然后定义机器问答的主体函数,对于问题的识别可以利用正则表达式来进行分析,结合现实情况选择答案,最后在执行时可以设置循环语句,并且在每次回答间隔1s方便进一步做并发处理作为未来优化方向。从以下几个方面分别实现:
1、货物信息储存到MySQL数据库中
在现实情景中,购物信息的数据一般会储存到数据库中,方便在进行问答时才访问数据库获取相关信息,可以用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')
运行结果如下:

2、在问答过程中可以访问数据库获取结果
利用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异常捕捉部分,当问句发生错误或者在数据库中无法找到对应数据时,可以让客户联系人工客服。
3、利用正则表达式对问句进行识别
对于客户所输入的问题,用正则表达式对其进行分析识别,选择相应的答案进行回答,当问题超过答案范围,可以让客户联系人工客服:
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来接受并提取其中的信息
Python模拟简易版淘宝客服机器人的更多相关文章
- 用php+mysql+ajax实现淘宝客服或阿里旺旺聊天功能 之 前台页面
首先来看一下我已经实现的效果图: 消费者页面:(本篇随笔) (1)会显示店主的头像 (2)当前用户发送信息显示在右侧,接受的信息,显示在左侧 店主或客服页面:(下一篇随笔) (1)在左侧有一个列表 , ...
- 用php+mysql+ajax实现淘宝客服或阿里旺旺聊天功能 之 前台页面
首先来看一下我已经实现的效果图: 消费者页面:(本篇随笔) (1)会显示店主的头像 (2)当前用户发送信息显示在右侧,接受的信息,显示在左侧 店主或客服页面:(下一篇随笔) (1)在左侧有一个列表 , ...
- 用php+mysql+ajax实现淘宝客服或阿里旺旺聊天功能 之 后台页面
在上一篇随笔中,我们已经看了如何实现前台的对话功能:前台我限定了店主只有一人,店铺只有一个,所有比较单一,但后台就不一样了,而后台更像是我们常见的聊天软件:当然,前台也应该实现这种效果,但原理懂了,可 ...
- 用php+mysql+ajax实现淘宝客服或阿里旺旺聊天功能 之 后台页面
在上一篇随笔中,我们已经看了如何实现前台的对话功能:前台我限定了店主只有一人,店铺只有一个,所有比较单一,但后台就不一样了,而后台更像是我们常见的聊天软件:当然,前台也应该实现这种效果,但原理懂了,可 ...
- 屏蔽全部统计代码(51.la cnzz 百度统计 谷歌分析师adsense、屏蔽淘宝客广告代码)的方法
支持百度统计 .51.la统计.cnzz统计.51yes统计.谷歌分析师.阿里妈妈淘宝客广告.chinaz弹窗.假设有很多其它的须要屏蔽的,欢迎联系 default7#zbphp.com 改动etc的 ...
- destoon系统商城加淘宝客按钮方法
destoon系统很多喜欢运营B2B的站长都在用,其中的商城模块常常被用来做淘宝客,其中的难点是如何把购买按钮做成淘宝客地址,这个问题的修改在论坛上被叫价50元,下面小编把这个实用的方法分享下,希望对 ...
- 关于淘宝的数据来源,针对做淘宝客网站的淘宝api调用方法
上次写了个淘宝返利模式的博客,直接被移除首页,不知道何故啊.可能是真的跟技术不太刮边. 众所周知,能够支撑一个网站运营的最基础不是程序写的多么好.也不是有多么牛X的运营人员,最主要的是数据,如果没有数 ...
- 巧用ecshop做淘宝客
一.第一步 下载文件,可以在http://www.ecshop.com/下载ecshop各个版本的安装包,安装好ECSHOP,然后通过PTF工具下载2个文件到本地进行修改.这个2个文件分别是goods ...
- 【淘宝客】根据淘客联盟精选清单(淘宝天猫内部优惠券)随机显示淘宝天猫优惠券dome
也许大家在生活中经常淘宝看到[淘宝天猫内部优惠券]的网站,或者在微博中经常有博主发券,让大家生活中购物便宜许多,作为一个站长,我们也希望自己的网站也能有这样的一个功能,现在就分享给大家,还是免后台哦. ...
随机推荐
- JxBrowser: 6.6.1 Crack
JxBrowser: 6.6.1. 1. RELEASE NOTES Download:HomePage JxBrowser is a cross-platform library that prov ...
- 高并发之Semaphore、Exchanger、LockSupport
本系列研究总结高并发下的几种同步锁的使用以及之间的区别,分别是:ReentrantLock.CountDownLatch.CyclicBarrier.Phaser.ReadWriteLock.Stam ...
- 前端 Web 异常监控系统 All In One
前端 Web 异常监控系统 All In One Sentry https://sentry.io trackjs https://trackjs.com/ rollbar https://rollb ...
- CSS pseudo element All In One
CSS pseudo element All In One CSS 伪元素 https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elemen ...
- js types & primitive & object
js types & primitive & object js 数据类型 typeof null // "object" typeof undefined // ...
- taro 禁用滚动事件
taro 禁用滚动事件 禁止 Modal 蒙层下面的页面的内容跟随滚动 https://github.com/NervJS/taro/issues/3980 https://github.com/Ne ...
- js 如何取消promise
1: 使用reject function hello() { let _res, _rej: any; const promise = new Promise((res, rej) => { _ ...
- Java中Singleton的三种实现方式解析
一.什么是Singleton? <设计模式>的作者.Eclipse和 Junit 的开发者 Erich Gamma 在它的理论体系中将 Singleton 定义为仅仅被实例化一次的类.在当 ...
- HTTP 协议中的并发限制及队首阻塞问题
本文转载自HTTP 协议中的并发限制及队首阻塞问题 串行连接 HTTP/0.9 和早期的 HTTP/1.0 协议对 HTTP 请求处理是串行化的.假如一个页面包含 3 个样式文件,同属于一个协议.域名 ...
- java基础第11期——Stream流、方法引用、junit单元测试
1.Stream流 Stream流与io流是不同的东西,用于解决集合类库已有的弊端, 1.1 获取Stream流: Collection集合的Stream方法,注意Map集合要经过转化 default ...