Pyke 逻辑编程入门(16):知识库之“问题库”
问题库
“问题库”是为程序客户准备的。这些“问题”可以类型不同,如 “是/否?”、“选择第几个?”等等。问题可能带有变量参数,在向客户询问时,以参数值替代问题中的文字内容。不同的参数值构成不同的问题。
对问题的回答,全部自动记录下来。如果有几个规则询问同样的问题,客户只需回答一次。推理引擎重启时,这些回答全部清除。
“问题”可以附带些评审意见等信息。这是事先预备的,并有变量参数配合。根据客户的回答,自动显示这些附带信息。
KQB 文件
这些问题,在 .kqb 文件中定义。问题库的名称,是扩展名为 .kqb 的文件名称。问题库名称必须是合法的 Python 标识符。
在你创建 knowledge_engine.engine 对象时,.kqb 文件自动编译并装入内存。
.kqb 文件中的信息,全部是需要向客户询问的问题,以及对回答的检验,和要显示的评审信息。
.kqb 文件指定哪个参数包含问题的答案。在提出询问之前,除了答案,其他参数必须约束成具体值。
示例
你写了个汽车故障诊断程序,可以用到名叫 user_question 的问题库,其中的问题像是这样:
engine_starts($ans) Can you start the engine? --- $ans = yn mileage($ans) How many miles are on the car? --- $ans = integer(1-999999) 200000- ! Wow, that's a lot of miles! noise_from($location, $ans) Do you hear a noise from $location? --- $ans = yn
这些问题,貌似下列规则中的事实:
user_question.engine_starts(True) user_question.mileage($mileage) user_question.noise_from('under the hood', False)
向客户询问
Pyke 有两个模块,负责向你程序的用户提问:
- ask_tty
它通过标准输出 stdout,提出询问;通过标准输入 stdin 接收回答。
- ask_wx
它用 wxPython 的对话框,提出询问。
你可以自己写个模块,向客户询问。参看 Pyke 用户指南中的示例。
Pyke 回答问题时,要查找 ask_module (“答复模块”)属性:
- question_base (“问题库”)对象
- knowledge_engine.engine(“知识库推理机”)对象
下面是设置 ask_module 属性的示例:
>>> from pyke import knowledge_engine >>> from pyke import ask_wx >>> engine = knowledge_engine.engine(__file__) >>> engine.ask_module = ask_wx
Pyke 逻辑编程入门(16):知识库之“问题库”相关推荐
- GTK+编程入门(1)—简介与glib库
GTK+编程入门(1)-简介与glib库(2015-7-23) 分类:GTK+ 一:GTK+简介 GTK+是一个软件开发工具包,其设计目的是支持在 X Window系统下开发图形界面的应用程序.G ...
- python时钟编程教程_编程入门16:Python时间操作
Python标准库包含有一个time模块用于基本的时间处理,其中的time()函数会读取系统时钟并返回float类型的Unix纪元"时间戳"(Timestamp),即当前时间距离国 ...
- python编程入门经典百度云-python电子书学习资料打包分享百度云资源下载
[300dpi高清版] Python基砒教程(第2版)LHD,pdf Head. First. Python中文版pdf [ Python3程序开发指南第二版pdf [ thon编程第4版)]( Pr ...
- 脑残式网络编程入门(三):HTTP协议必知必会的一些知识
为什么80%的码农都做不了架构师?>>> 本文原作者:"竹千代",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说&q ...
- Oracle编程入门经典 第12章 事务处理和并发控制
目录 12.1 什么是事务处理... 1 12.2 事务处理控制语句... 1 12.2.1 COMMIT处理... 2 12.2.2 RO ...
- Oracle编程入门经典 第11章 过程、函数和程序包
目录 11.1 优势和利益... 1 11.2 过程... 1 11.2.1 语法... 2 11.2.2 建立或者替换... 2 11.2 ...
- Oracle编程入门经典 第10章 PLSQL
目录 10.1 总览... 1 10.2 基于程序块的开发... 1 试验:PL/SQL程序块... 2 工作原理... 2 块嵌套... 2 10.3 ...
- Oracle编程入门经典 第8章 索引
目录 8.1 索引工作方式... 1 8.2 Oracle中的索引... 1 8.3 索引什么时候有用... 4 8.4 索引开销... 7 8 ...
- 内存编程 c语言 c,C语言编程入门之内存管理
本篇教程探讨了C语言编程入门之内存管理,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. < 自动变量与静态变量 auto自动变量 auto是默认的关键字,如实际中int a ...
- python脚本式编程_Python编程入门(一)
Python编程入门(一) ====================================================================================== ...
最新文章
- python2.7和3.7共存_centos7 python2 和python3 共存[转]
- .netcore部署到IIS上出现HTTP Error 502.5 - Process Failure问题解决
- netbeans html 格式化,在NetBeans IDE8.0中怎么把html的文件转换成jsp格式
- activity 防止多次打开_Android开发Activity任务和返回栈
- storm基础系列之二----zookeeper的作用
- 实现自动带密码登陆远程机执行shell命令(linux)
- 迟到的 cocoapod 版本适配 之网利宝
- 程序员跳槽面试刷题必备,微软工程师放大招!| 程序员硬核评测
- 详解依存树的来龙去脉及用法
- removeAttribute与removeAttributeNode的区别
- 4. Linux 高性能服务器编程 --- TCP/IP 通信
- [Cocoa]深入浅出 Cocoa 之消息
- 兔子的烦恼(一)【NYOJ】
- 计算机桌面运维ppt,桌面运维自动化.ppt
- Barsetto百胜图TripressoES意式便携咖啡机测评,咖啡随行玩味无穷
- 站内信系统数据库设计
- Roblox剑九之剑二
- 栅格地图中自由区域之Bresenham算法及个人搜索算法对比
- 抖音官方开始禁止这3种带货玩法,以后不要碰了
- 【多线程篇】sleep和wait的区别?notify和notify的作用?如何实现生产者-消费者模式
热门文章
- hack the box(5985 WinRM)
- C# 删除注册表信息
- failed to locate @import file common/stylus/variable.styl
- IP摄像头实现远程目标检测(rtsp)
- 315|大数据杀熟,如何才不被坑?
- 服务器是否支持虚拟化,如何检查服务器CPU是否支持虚拟化技术(VT)
- 论文阅读17 | Cross-modality Person re-identification with Shared-Specific Feature Transfer
- python docx文档内容提取与写入(汇总)
- windows 7远程桌面和被远程连接电脑启动远程桌面服务
- uniapp 实现高德地图导航