来做一个聊天机器人吧[1]
前言
课程设计自己选了这个课题,因为之前就对NLP()有一些兴趣,英语文献综述也是以这个为主题来写的 。虽然只学了一点点皮毛,哈哈其实还是挺有趣的
准备
本项目用到的开发环境
使用软件
GUI开发
的GUI开发,最简洁的当然是了,但是我觉得应该牛批高级一些,就选用了PyQt5库来开发机器人的图形化界面 。
首先,感谢大佬的文章 GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
文章插图
我的程序也是基于这个框架来改的
文章插图
看看效果先
文章插图
聊天模块1.0版本
聊天模块想到最简单的方法就是调用API接口了,
首先可以去图灵机器人注册一个账号登录后点击 创建机器人在机器人设置界面找到你的
创建req.json文件
{"perception":{"inputText":{"text": ""},"selfInfo":{"location":{"city": "北京","province": "北京","street": "天安门"}}},"userInfo":{"apiKey": "你的","userId": "你的"}}
建立文件
#coding=utf-8import jsonimport urllib.requestapi_url = "http://openapi.tuling123.com/openapi/api/v2"json_path = 'req.json'class TuringDome(object):def __init__(self,json_path="",api_url=""):self.json_path = json_pathself.api_url = api_urlself.text_input = input('请输入我的问话\n我:')def readJson(self):'''获取json文件'''with open(self.json_path,'r',encoding='utf-8') as f_json:json_data = http://www.kingceram.com/post/json.load(f_json)return json_datadef textInput(self):'''用变量text_input替换text的value值'''req = self.readJson()req['perception']['inputText']['text'] = self.text_inputreturn reqdef dumpsJson(self):'''将json字符串转化成dict格式'''req = self.textInput()req = json.dumps(req,sort_keys=True,indent=4,).encode('utf8')return reqdef urllibRequestResponse(self):req = self.dumpsJson()http_post = urllib.request.Request(self.api_url, data=req, headers={'content-type': 'application/json'})response = urllib.request.urlopen(http_post)# 在urlopen()方法中传入字符串格式的url地址,则此方法会访问目标网址,然后返回访问的结果 。response_str = response.read().decode('utf8')response_dict = json.loads(response_str) # 将字符串response_str转成字典return response_dictdef getTuringResponse(self):'''取得机器人返回的语句并输出'''response_dict = self.urllibRequestResponse()intent_code = response_dict.get('intent')['code']results_text = response_dict.get('results')[0]['values']['text']print('Turing的回答:')print('code:' + str(intent_code))print('text:' + results_text)def talkToTheTuring(self):#self.text_input = input('请输入我的问话/n我:')while True:if self.text_input !="exit:":self.getTuringResponse()self.text_input = input('请输入我的问话\n我:')else:print("*****结束对话!*****")breakif __name__ == '__main__':#passtd = TuringDome(json_path=json_path,api_url=api_url)td.talkToTheTuring()
差不多就可以合并到GUI里面了
效果还不错
文章插图
文章插图
语音合成1.0版本
语音合成模块如果不调用API,同时又不想自己训练的话,可以有两个选择
.
import win32com.clientspeaker = win32com.client.Dispatch("SAPI.SpVoice")speaker.Speak("Hello, it works!")
- 前端笔记:第二章:HTML怎么展示在网页上---- 第1集:怎么编写一个网页
- owllook在线小说搜索引擎使用指南
- 宋朝奇闻:一个另类的才女赌神李清照!
- 武艺高超的陈真其实只是一个虚构的人物吗
- 终生只娶一个老婆的皇上他是不愿还是不敢娶?
- 揭秘:北宋科学家沈括:一个历史上文理通吃的学神
- 一个手机号可以绑定几个QQ
- 一个微信可以扫两个共享单车吗
- 使用socket通道和多线程创建多人对话聊天室
- 揭秘:生了十三个儿子却没一个当上皇帝的奇女子