从零开始用Python做一个女朋友 ? 第一弹

从零开始用做一个女朋友 ? 第一弹因为一只蝙蝠所引起的一系列连锁反应,导致一直宅在家中的自己突然有了重拾的勇气,一直以来想要做个智能对话机器人,于是说干就干,从最简单的关键词匹配做起,在目前进度中,通过调用公共接口实现了天气查询和实时新闻查询两个功能,后续功能将逐渐完善 。由于本人学识不深,很多细节的处理上可能不尽完善,欢迎各位大佬指点~
由于目标是比较智能的机器人,所以借用了动漫刀剑的梗虚拟人物形象叫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进行访问 。