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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值