- 簽證留學 |
- 筆譯 |
- 口譯
- 求職 |
- 日/韓語 |
- 德語
首先,分析轉(zhuǎn)換步驟。對于任何邏輯形式表達式E,在數(shù)據(jù)庫查詢語言中E的轉(zhuǎn)換將表示成T(E)。表達式的轉(zhuǎn)換隨結(jié)構的不同而有所變化。例如,像(NAME c1 "Chicago")這樣的表達式可以轉(zhuǎn)換成合適的數(shù)據(jù)庫常量,在這種情況下就是CHI。但除此之外,符號c1必須和稱為符號表的結(jié)構中的常量CHI一起保存。這樣,如果在邏輯形式中的其他部分再發(fā)現(xiàn)c1,就可以用值CHI來替換它。
某些邏輯形式關系可以直接轉(zhuǎn)換成數(shù)據(jù)庫關系,而其他關系會轉(zhuǎn)換成更復雜的表達式。例如,數(shù)據(jù)庫中沒有用到邏輯形式關系DEST;相反,是將航班的目的地表示成ATIME關系,其中既包含航班目的地,也包含到達時間。因此,邏輯形式關系(DEST f1(NAMEc1“Chicago”))(其中f1已經(jīng)和變量?f關聯(lián)在一起)被轉(zhuǎn)換成數(shù)據(jù)庫關系:
(ATIME ?f CHI ?t)
因為在DEST關系中沒有包括時間信息,所以在轉(zhuǎn)換過程中將其解釋為一個不受約束的變量。一般來說,邏輯表達式中的每一個關系的轉(zhuǎn)換都必須進行指定。
程序語義學方法在解釋邏輯連詞和量詞的時候更有趣,這兩種詞在關系數(shù)據(jù)庫中很顯然沒有對應的結(jié)構。邏輯運算符可解釋成如下形式:
合?。海?amp;R1,...,Ra)——轉(zhuǎn)換成形式為(CHECK-ALL-TRUE T(R1),..…,T(Rn))的一個程序。在執(zhí)行程序時,依次查詢每個T(Ri),確認為真,并將變量的約束傳遞給后面的查詢。如果存在一組變量約束,用其查詢每個T(Ri)都為真,那么該程序成功;否則失敗。
析?。海∣R R1,.….,Ra)——轉(zhuǎn)換成形式為(FIND-ONE-TRUE T(R1),..…,T(Rn))的一個程序。在執(zhí)行時,依次查詢每個T(Ri),直到其中一個Ri為真,這樣該程序成功;如果沒有Ri為真,該程序失敗。
否定過程對數(shù)據(jù)庫中的所有關系做了一個封閉世界假設,并使用失敗證明(proof by failure):
(NOT R)——可轉(zhuǎn)換成形式為(UNLESS T(R))的一個程序。只有查詢T(R)失敗了,該程序才成功。
最復雜的轉(zhuǎn)換常常與量詞有關。每個量詞都轉(zhuǎn)換成對數(shù)據(jù)庫進行適當操作的程序。由于數(shù)據(jù)庫語言的限制,通常只支持復數(shù)量詞的個體性解讀。這里,分析問答系統(tǒng)中比較重要的三個量詞:THE, EACH和WH。
(THE x:Rx Px)——轉(zhuǎn)換為程序(FIND-THE ?x T(R?x)T(P?x))。首先,進行一次查詢以找到所有滿足T(Rx)的?x,也就是說(Retrieve?x T(Rgx))。如果只找到一個答案,就用該答案替換整個表達式中的?x,并執(zhí)行T(P2)以提供整個表達式的答案。如果查詢T(R,),但沒找到符合條件的對象,則與假設存在沖突,該沖突可由問答系統(tǒng)以一種特殊的方式進行處理,比如,通知用戶沒有這種對象。如果找到多個答案,系統(tǒng)的設計者必須決定哪一個才是最佳答案。一些系統(tǒng)能處理這種情境,并對每個值執(zhí)行T(P,);而其他系統(tǒng)將這種情況看成失敗。
(EACHx: RxPx)——轉(zhuǎn)換為程序(TTERATE?x T(Rx)T(Px)),也是先執(zhí)行一次查詢以找出所有滿足T(R?x)的?x。然后,對每個找到的值重復執(zhí)行T(P?x),只有所有的查詢都成功,該程序才成功。
(WH x: RxPx)——轉(zhuǎn)換為程序(PRINT-ALL ?x T(Rx)T(Px)),查找所有滿足Rx和Px的轉(zhuǎn)換的對象,即(Retrieve?x T(Rx)T(Px)),然后打印結(jié)果。確定打印答案的最佳格式,尤其是確定是否還要提供附加信息,這是一個很復雜的問題。這里,假定只是簡單地打印找到的答案。
這里介紹的方法足以解釋一些使用了圖1中的數(shù)據(jù)庫的例子。查詢“Which flight to Chicago leaves at 4PM?”的邏輯形式為(經(jīng)過轄域指定之后):
(WH f1 : (& (FLIGHT f1) (DEST f1 (NAME c1 "Chicago")))
(LEAVE l1 (NAME t1 “4PM”)))