问题库

“问题库”是为程序客户准备的。这些“问题”可以类型不同,如 “是/否?”、“选择第几个?”等等。问题可能带有变量参数,在向客户询问时,以参数值替代问题中的文字内容。不同的参数值构成不同的问题。

对问题的回答,全部自动记录下来。如果有几个规则询问同样的问题,客户只需回答一次。推理引擎重启时,这些回答全部清除。

“问题”可以附带些评审意见等信息。这是事先预备的,并有变量参数配合。根据客户的回答,自动显示这些附带信息。

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):知识库之“问题库”相关推荐

  1. GTK+编程入门(1)—简介与glib库

    GTK+编程入门(1)-简介与glib库(2015-7-23) 分类:GTK+ 一:GTK+简介   GTK+是一个软件开发工具包,其设计目的是支持在 X Window系统下开发图形界面的应用程序.G ...

  2. python时钟编程教程_编程入门16:Python时间操作

    Python标准库包含有一个time模块用于基本的时间处理,其中的time()函数会读取系统时钟并返回float类型的Unix纪元"时间戳"(Timestamp),即当前时间距离国 ...

  3. python编程入门经典百度云-python电子书学习资料打包分享百度云资源下载

    [300dpi高清版] Python基砒教程(第2版)LHD,pdf Head. First. Python中文版pdf [ Python3程序开发指南第二版pdf [ thon编程第4版)]( Pr ...

  4. 脑残式网络编程入门(三):HTTP协议必知必会的一些知识

    为什么80%的码农都做不了架构师?>>>    本文原作者:"竹千代",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说&q ...

  5. Oracle编程入门经典 第12章 事务处理和并发控制

    目录 12.1          什么是事务处理... 1 12.2          事务处理控制语句... 1 12.2.1       COMMIT处理... 2 12.2.2       RO ...

  6. Oracle编程入门经典 第11章 过程、函数和程序包

    目录 11.1          优势和利益... 1 11.2          过程... 1 11.2.1       语法... 2 11.2.2       建立或者替换... 2 11.2 ...

  7. Oracle编程入门经典 第10章 PLSQL

    目录 10.1          总览... 1 10.2          基于程序块的开发... 1 试验:PL/SQL程序块... 2 工作原理... 2 块嵌套... 2 10.3       ...

  8. Oracle编程入门经典 第8章 索引

    目录 8.1        索引工作方式... 1 8.2        Oracle中的索引... 1 8.3        索引什么时候有用... 4 8.4        索引开销... 7 8 ...

  9. 内存编程 c语言 c,C语言编程入门之内存管理

    本篇教程探讨了C语言编程入门之内存管理,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. < 自动变量与静态变量 auto自动变量 auto是默认的关键字,如实际中int a ...

  10. python脚本式编程_Python编程入门(一)

    Python编程入门(一) ====================================================================================== ...

最新文章

  1. python2.7和3.7共存_centos7 python2 和python3 共存[转]
  2. .netcore部署到IIS上出现HTTP Error 502.5 - Process Failure问题解决
  3. netbeans html 格式化,在NetBeans IDE8.0中怎么把html的文件转换成jsp格式
  4. activity 防止多次打开_Android开发Activity任务和返回栈
  5. storm基础系列之二----zookeeper的作用
  6. 实现自动带密码登陆远程机执行shell命令(linux)
  7. 迟到的 cocoapod 版本适配 之网利宝
  8. 程序员跳槽面试刷题必备,微软工程师放大招!| 程序员硬核评测
  9. 详解依存树的来龙去脉及用法
  10. removeAttribute与removeAttributeNode的区别
  11. 4. Linux 高性能服务器编程 --- TCP/IP 通信
  12. [Cocoa]深入浅出 Cocoa 之消息
  13. 兔子的烦恼(一)【NYOJ】
  14. 计算机桌面运维ppt,桌面运维自动化.ppt
  15. Barsetto百胜图TripressoES意式便携咖啡机测评,咖啡随行玩味无穷
  16. 站内信系统数据库设计
  17. Roblox剑九之剑二
  18. 栅格地图中自由区域之Bresenham算法及个人搜索算法对比
  19. 抖音官方开始禁止这3种带货玩法,以后不要碰了
  20. 【多线程篇】sleep和wait的区别?notify和notify的作用?如何实现生产者-消费者模式

热门文章

  1. hack the box(5985 WinRM)
  2. C# 删除注册表信息
  3. failed to locate @import file common/stylus/variable.styl
  4. IP摄像头实现远程目标检测(rtsp)
  5. 315|大数据杀熟,如何才不被坑?
  6. 服务器是否支持虚拟化,如何检查服务器CPU是否支持虚拟化技术(VT)
  7. 论文阅读17 | Cross-modality Person re-identification with Shared-Specific Feature Transfer
  8. python docx文档内容提取与写入(汇总)
  9. windows 7远程桌面和被远程连接电脑启动远程桌面服务
  10. uniapp 实现高德地图导航