从零开始用做一个女朋友 ? 第一弹因为一只蝙蝠所引起的一系列连锁反应,导致一直宅在家中的自己突然有了重拾的勇气,一直以来想要做个智能对话机器人,于是说干就干,从最简单的关键词匹配做起,在目前进度中,通过调用公共接口实现了天气查询和实时新闻查询两个功能,后续功能将逐渐完善 。由于本人学识不深,很多细节的处理上可能不尽完善,欢迎各位大佬指点~
由于目标是比较智能的机器人,所以借用了动漫刀剑的梗虚拟人物形象叫Alice 【宅属性暴露无遗】
总体思路还是模块化的思想,通过循环接收用户输入,然后通过自定义的()函数进行关键词匹配,将匹配结果通过数组返回,并在主过程内遍历数组内的事件标签,如果天气查询标签或新闻查询标签在内,则将用户输入传递给相应的自定义模块函数进行处理 。话不多说,先呈上main.py模块代码:
# -*- coding:utf-8 -*-import weather#自定义天气查询处理模块import news#自定义新闻查询处理模块def __analyse(raw_str):analyse_result = []weather_wors = ['天气', 'weather']news_words = ['新闻', 'news', "头条"]if any(word in raw_str for word in weather_wors):analyse_result.append('weather')#为返回的结果数组添加'weather'标签if any(word in raw_str for word in news_words):analyse_result.append('news')#为返回的结果数组添加'news'标签return analyse_resultif __name__ == '__main__':while (True):raw_str = input()analyse_result = __analyse(raw_str)if 'weather' in analyse_result:weather.handle(raw_str)#调用自定义天气查询处理模块的处理函数if 'news' in analyse_result:news.handle(raw_str)#调用自定义新闻查询处理模块的处理函数else:print('Alice没能听懂主人说的是什么哇……')
下面以.py为例解释天气查询内部的处理过程(news.py模块同理):
自定义模块的()函数在接收到用户输入后,也是首先调用本模块内的()函数进行关键词匹配,与main模块内不同的是,由于返回的结果除去标签还需要一部分属性值,譬如说天气查询的地点、时间等,所以定义了Tag便签对象,用来作为返回的标签数组的元素 。
class Tag:name = ''#标签名props = {}#属性值def __init__(self, name, props):self.name = nameself.props = props
为了更加方便地修改定制,我增加了读取目录下配置文件.ini获取默认值及查询接口API的功能,相关代码如下:
import configparser#可以通过 pip install 进行安装import os__config = configparser.ConfigParser()__config.read(os.getcwd() + "/config.ini", encoding='utf-8')__weather_api_url = __config.get("weather", "api")#天气查询API链接__weather_api_key = __config.get("weather", "key")#天气查询API的个人密钥__weather_default_city = __config.get("weather", "default_city")#在未指定查询城市时默认的查询城市__temp_threshold = __config.get("weather", "temp_threshold")#温差提醒阈值__wind_threshold = __config.get("weather", "wind_threshold")#风力提醒阈值
.ini文件的内容如下:
[weather]; 天气查询APIapi=http://apis.juhe.cn/simpleWeather/query; 天气查询默认城市default_city=长沙; 天气查询API密钥key=***************; 温差提醒阈值temp_threshold=15; 风力提醒阈值wind_threshold=6
天气查询及新闻查询API使用来源于 [聚合数据],个人作为开发者注册认证之后每天可以免费调用100次,个人使用完全足够了,在右上角“个人中心” -> “数据中心” -> “我的接口”内可以搜索和申请接口,接口申请成功后会自动分配一个Key,之后每次调用时需要携带这个Key进行访问 。
- 室外零上22度室内开多少度制热
- 第十九篇 fetch请求
- 因果不对称性:从热力学之箭到因果之箭
- 淘宝在hbase中的应用和优化
- 分享从零开始学习网络设备配置--2.2 实现不同部门之间网络隔离
- 阿里测试6年,如何从功能测试到自动化测试【希望大家少走弯路】
- 关于从svn上新下载的项目往往报类找不到,而类又存在的错误问题
- 三 从零开始做聊天机器人 ---- 整句搜索型机器人(二)
- 2017,再接再厉,继续努力,加油!!!
- 【Android 】零基础到飞升 | 界面原型设计