目录
第一部分:正文部分 1
一、选题背景 1
二、方案论证 1
三、过程论述 2
3.1 相关知识简介 2
3.2 总体设计方案 2
3.3 软件设计 3
global TDlist 4
四、 结果分析 5
4.1 功能实现结果 5
4.2 控制台和微信助手效果图 10
五、结论 11
第三部分:参考文献 12
[1]程洁.智能聊天机器人:对话未来[J].科技经济导刊,2018. 12
[2]梁苗苗. 基于深度学习的智能聊天机器人的研究[D].浙江理工大学,2018. 12
[3]周国华.Android平台上的智能聊天机器人设计及应用[J].计算机产品与流通,2017. 12
[4]刘超,马东宇.智能问答的聊天机器人系统的设计与实现[J].信息技术,2017. 12
[5]Lina.让聊天机器人懂你心情——解密竹间智能的AI助手[J].商业文化,2017. 12
[6]肖克聪. 具有情绪识别能力的智能聊天机器人的研究与实现[D].北京邮电大学,2017. 12
二、方案论证
智慧家庭聊天机器人选用Python语言编写。难易度而言,Python远远简单于Java。开发速度方面,Python也远优于Java。Python的底层是用C语言编写的,很多标准库和第三方库也都是用C语言编写的,因此运行速度非常快。几乎在所有的环境中使用和部署Python应用程序都可以,并且产生的性能损失非常小。同时,Python可以进行Web开发、桌面应用程序、移动应用程序、硬件等等多种领域的开发,实现了跨平台、跨领域。
方案的特点是Python语言具有很强的可移植性——由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就可以在很多平台上面运行。
三、过程论述
3.1 相关知识简介
1.Python简介
Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。
2.数据库简介
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
import re
import time
import itchat
from itchat.content import *
from weather import SearchWeather
from package import getPackage
from airlineTicket import getAirline
from trainTicket import searchTrain
fpath = 'C:/Users/Admin/Desktop/littleSpiders-master/WeChat_autoReply/downloadFiles/'
TDlist = []
with open(fpath+u'好友退订列表.txt','r') as f:
for item in f.readlines():
TDlist.append(item.strip())
@itchat.msg_register([TEXT, PICTURE, MAP, CARD, NOTE, SHARING, RECORDING, ATTACHMENT, VIDEO])
def text_reply(msg):
global TDlist
friend = itchat.search_friends(userName=msg['FromUserName'])
replyContent = forselfContent = ""
fpath = 'C:/Users/Admin/Desktop/littleSpiders-master/WeChat_autoReply/downloadFiles/'
typeDict = {'Picture':'img','Video':'vid','Recording':'fil','Attachment':'fil'}
typeDict2 = {'Card':'名片','Note':'通知','Sharing':'分享','Map':'位置'}
replyModel = "收到您于%s发送的【%s】,更多玩法请回复:快递、火车、飞机、天气(回TDD/KTT可退订/开通此功能)" % (time.strftime('%m-%d %H:%M',time.localtime()), msg['Type'])
if msg['Type'] == 'Text':
forselfContent = msg['Text']
try:
if re.search(r"快乐",msg['Content']) or re.search(r"恭喜",msg['Content']):
replyContent = "【衷心感谢您的祝福,在此,Lyon祝您:新年快乐!!开开心心,身体健康[耶][耶]!狗年大吉旺旺旺[發][發][發]】"
itchat.send('@img@%s' % 'C:/Users/Admin/Desktop/littleSpiders-master/WeChat_autoReply/moneyGod.jpg',toUserName=msg['FromUserName'])
elif re.search(r"hello",msg['Content']) or re.search(r"你好",msg['Content']):
replyContent = "你好"
elif re.search(r"What your name?", msg['Content']) or re.search(r"你叫什么", msg['Content']):
replyContent = "我是天天"
elif re.search(r"How old are you?", msg['Content']) or re.search(r"你多大", msg['Content']):
replyContent = "我10岁"
elif re.search(r"What your is father?", msg['Content']) or re.search(r"你爸爸是谁", msg['Content']):
replyContent = "我爸爸是你呀,爸爸好!"
elif re.search(r"What your is father?", msg['Content']) or re.search(r"你会背唐诗吗?", msg['Content']):
replyContent = "我会呀!背给你听。人生得意须尽欢,莫使金樽空对月。"
elif re.search(r"天气",msg['Content']) or re.search(r"气温",msg['Content']):
try:
cityname = re.search(r"(天气)(\+)(.*)",msg['Content']).group(3)
replyContent = SearchWeather().main(city = cityname)
except:
replyContent ="查询天气请输入:天气+城市名,如:天气+南京"
elif re.search(r"快递",msg['Content']):
try:
packNum = re.search(r"(快递)(\+)([0-9]+)",msg['Content']).group(3)
replyContent = getPackage(package = packNum)
except:
replyContent ="查询快递请输入:快递+运单号,如:快递+12345"
elif re.search(r"航班",msg['Content']) or re.search(r"飞机",msg['Content']):
try:
info = re.search(r"(航班)(\+)(.*)",msg['Content']).group(3)
replyContent = getAirline(string = info)
except:
replyContent ="查询航班请输入:航班+出发地+目的地+时间,如:航班+南京+北京+2018-02-20"
elif re.search(r"火车",msg['Content']) or re.search(r"余票",msg['Content']):
try:
info2 = re.search(r"(余票)(\+)(.*)",msg['Content']).group(3)
replyContent = searchTrain(querystring = info2)
except:
replyContent ="查询火车余票请输入:余票+车型+出发地+目的地+时间,其中可选车型d动车、g高铁、k快速、t特快、z直达(如:余票+dgz+南京+太原+2018-02-25)"
elif re.search(r"TDD",msg['Content']):
TDlist.append(msg['FromUserName'])
with open(fpath+u'好友退订列表.txt','a+') as f:
f.write(msg['FromUserName']+'\n')
itchat.send("自动回复功能已关闭,回复KTT可重新开通!",toUserName=msg['FromUserName'])
elif re.search(r"KTT",msg['Content']):
if msg['FromUserName'] in TDlist:
TDlist.remove(msg['FromUserName'])
with open(fpath+u'好友退订列表.txt','w') as f:
f.write('\n'.join(TDlist))
replyContent = "亲,终于等到你~自动回复功能已开通!"
except Exception as e:
print(repr(e))
elif msg['Type'] in typeDict:
typeSymbol = typeDict.get(msg['Type'],'fil')
filePath = (fpath + "images/" + msg['FileName']) if typeSymbol=='img' else (fpath + msg['FileName'])
replyContent = "%s文件: "% msg['Type'] + msg['FileName']
forselfContent = "%s文件已存储于: "% msg['Type'] + filePath
try:
msg.download(filePath)
print(typeSymbol,filePath)
asd1 = itchat.send('@%s@%s' % (typeSymbol,filePath),toUserName='filehelper')
if asd1:
print('OK,success1!')
else:
print(asd1)
print('Failed!')
asd2 = itchat.send_file(filePath,toUserName='filehelper')
print(asd2)
except Exception as e:
print(repr(e))
elif msg['Type'] in typeDict2:
if msg['Type'] == 'Map':
x, y, location = re.search(r"