Pyke 邏輯編程入門(16):知識庫之“問題庫”

來源:互聯網
上載者:User
問題庫

“問題庫”是為程式客戶準備的。這些“問題”可以類型不同,如 “是/否?”、“選擇第幾個?”等等。問題可能帶有變數參數,在向客戶詢問時,以參數值替代問題中的文字內容。不同的參數值構成不同的問題。

對問題的回答,全部自動記錄下來。如果有幾個規則詢問同樣的問題,客戶只需回答一次。推理引擎重啟時,這些回答全部清除。

“問題”可以附帶些評審意見等資訊。這是事先預備的,並有變數參數配合。根據客戶的回答,自動顯示這些附帶資訊。

KQB 檔案

這些問題,在 .kqb 檔案中定義。問題庫的名稱,是副檔名為 .kqb 的檔案名稱。問題庫名稱必須是合法的 Python 標識符。

在你建立 knowledge_engine.engine 對象時,.kqb 檔案自動編譯並裝入記憶體。

.kqb 檔案中的資訊,全部是需要向客戶詢問的問題,以及對回答的檢驗,和要顯示的評審資訊。

.kqb 檔案指定哪個參數包含問題的答案。在提出詢問之前,除了答案,其他參數必須約束成具體值。

樣本

你寫了個汽車故障診斷程式,可以用到名叫 user_question 的問題庫,其中的問題像是這樣:

engine_starts($ans)    Can you start the engine?    ---    $ans = ynmileage($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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.