从零开始用Python做一个女朋友
因为一只蝙蝠所引起的一系列连锁反应,导致一直宅在家中的自己突然有了重拾Python的勇气,一直以来想要做个智能对话机器人,于是说干就干,从最简单的关键词匹配做起,在目前进度中,通过调用公共接口实现了天气查询和实时新闻查询两个功能,后续功能将逐渐完善。由于本人Python学识不深,很多细节的处理上可能不尽完善,欢迎各位大佬指点~
由于目标是比较智能的机器人,所以借用了动漫刀剑的梗虚拟人物形象叫Alice 【宅属性暴露无遗】
总体思路还是模块化的思想,通过循环接收用户输入,然后通过自定义的__analyse()函数进行关键词匹配,将匹配结果通过数组返回,并在主过程内遍历数组内的事件标签,如果天气查询标签或新闻查询标签在内,则将用户输入传递给相应的自定义模块函数进行处理。话不多说,先呈上main.py模块代码:
1 | # -*- coding:utf-8 -*- |
下面以weather.py为例解释天气查询内部的处理过程(news.py模块同理):
自定义模块的handle()函数在接收到用户输入后,也是首先调用本模块内的__analyse()函数进行关键词匹配,与main模块内不同的是,由于返回的结果除去标签还需要一部分属性值,譬如说天气查询的地点、时间等,所以定义了Tag便签对象,用来作为返回的标签数组的元素。
1 | class Tag: |
为了更加方便地修改定制,我增加了读取目录下配置文件config.ini获取默认值及查询接口API的功能,相关代码如下:
1 | import configparser #可以通过 pip install 进行安装 |
config.ini文件的内容如下:
1 | [weather] |
天气查询及新闻查询API使用来源于 [聚合数据] ,个人作为开发者注册认证之后每天可以免费调用100次,个人使用完全足够了,在右上角“个人中心” -> “数据中心” -> “我的接口”内可以搜索和申请接口,接口申请成功后会自动分配一个Key,之后每次调用时需要携带这个Key进行访问。
点击图二右侧“测试”按钮可以进入测试页面,网页将模拟真实调用的情形对请求参数以及返回数据进行展示,为了辅助接下来的代码展示,先展示一下某次查询链接以及返回的json数据:
1 | http://apis.juhe.cn/simpleWeather/query?city=%E9%95%BF%E6%B2%99&key=************ |
1 | { |
然后接下来就是weather.py模块中文本分析函数__analyse()的实现了,为了方便阅读,此处将支持从城市关键词数组city_words只展示一部分,所有支持查询的城市大家也可以在 [聚合数据] 上进行查询,该网站也提供了查询支持的城市的API:
1 | def __analyse(raw_str): |
在__analyse()调用分析之后,接下来就是handle()函数进行处理的部分了:
1 | def handle(raw_str): |
由于使用了文字转码以及JSON处理等操作,weather.py需要导入的全部包如下:
1 | from urllib.parse import quote |
最后看一下实战效果吧:
目前实现的功能模块细节就如上所述啦,后序会添加更多的非功能性的模块,譬如情感处理以及好感度等模块,欢迎有新意的脑洞,[GitHub源码]
从零开始用Python做一个女朋友