Prolog 與 WordNet (4)

來源:互聯網
上載者:User
3、使用 WordNet以下討論使用 WordNet 的基本問題,並給出幾個方便使用的謂詞,以提高效率。若要更多的文檔,請查看來源程式。(1)建立索引Prolog 版的 WordNet 資料庫檔案,共有代碼484381行。因而提高檔案處理速度,是 WordNet 的主要目標之一。減少查詞時間的一個辦法,是建立索引。從 WordNet 中尋找單詞,我們需要用到謂詞s(+Synset_ID,+W_Num,+Word,+SS_Type,+Sense_Number,+Tag_Count).可用謂詞 g(+Synset_ID,+Gloss). 查詢單詞的含義。要找的單詞,由 s/6 的第3個形參 Word 指定,這意味著預設的索引不影響匹配的合一。建立索引的辦法有2個。一個是內建的謂詞 index(+Predicate) ,以形參指定索引用到的謂詞。若按形參 Predicate 建立索引,該形參就執行個體化為1;否則,執行個體化為0。記住,在居前的32個形參中,最多4個可以索引。因此,查詞時,謂詞 index(s(0,0,1,0,0,0))應該最佳化。這項技術的優點,是我們可以對多於一個的形參建立索引,例如,同義字集合的標示、單詞本身;缺點是我們不得不在每個產生的檔案中,聲明謂詞 index/1,於是,資料庫的相容性變差。以索引減少查詞時間的第二個辦法,是將檔案 wn_s.pl 的形參順序改變。謂詞 improve_file/0 將謂詞 s 作為第一參數,並通過 s 取得單詞。其他參數保留原有順序不變。更新後的檔案是 wn_s_new.pl。現在,預設的索引方式提高了尋找速度,可達到原來的9倍。(2)轉換 WordNet 檔案將 WordNet 用作自然語言處理時,有幾種通常的辦法,簡化與其他工具的互動。尤其開發 Prolog 的自然語言處理工具時,我們可用以下參數改進互動。首先,在子句中只允許小寫字母出現;其次,不用底線分隔單詞,改用列表 list;第三,使用開放式列表,以便處理單詞、語句和全文。如上所說,謂詞 convert_file/0 用於轉換 wn_s.pl 檔案,它是謂詞 improve_file/0 的擴充。建立索引的好處依然存在。下面這個子句是新結構的執行個體:s([human, action|_G4016],100022113,2,n,1,1).(3)WordNet 的一個子集為了方便測試的需要,可以只用 WordNet 的子集。子集只包括英語最常用的單詞。由此,我要介紹謂詞 subset_wn_s(+Number)。謂詞 subset_wn_s(+Number) 以檔案 wn_s.pl 作為輸入的資料,並且建立新檔案 wn_s_subset.pl。新檔案只包括最常用的單詞,具體的單詞由謂詞 s/6 確定。謂詞的參數 Number 指定在子集中應該有多少單詞。這將極大地加速 WordNet 的實驗。如果你決定在項目中使用子集,可以做個有趣的嘗試,不僅建立主要檔案 wn_s.pl 的子集,還要對 WordNet 其他檔案建立子集。謂詞 subset_wordnet(+Number) 查詢子集 wn_s/1,並且轉換其他相應檔案。新檔案的名字是 wn_operator_subset.pl。這些謂詞可以實現使用 WordNet 子集的好處。另外,它們給出了如何自動轉換檔的編程示範。將來可以建立不同的子集,如僅含名詞、動詞、形容詞的 WordNet 子集。(4)很有用的 WordNet 謂詞使用 WordNet 需要 Prolog 資料庫的介面。本文列出的全部謂詞,都在 Prolog 檔案中有詳細描述。你只需查閱這些檔案定義的謂詞,即可使用它們。其他檔案可在調入記憶體後查詢。首先,需要弄清怎樣的輸入謂詞可接受。由於我們轉換了檔案以使用開放式列表,它也就明顯成為輸入對象。為了更便於使用者使用,Prolog 的資料類型“原子”也是可用的。例如,如果你要輸入單詞 dog,可以鍵入它或者 [dog|X]。但如前所述有一例外:由於其他自然語言處理工具不承認底線,若是2個單詞,你必須用開放式列表,如 [physical,thing|X]。全部謂詞都是為了轉換 WordNet 檔案,而非未經處理資料。用完整資料庫還是其子集,可以選擇。WordNet 最直接的用途是尋找單詞。謂詞 lookup(+Word) 從檔案 wn_s.pl 中尋找單詞,並顯示其文法類別和定義。它的擴充 lookup(+Word,-SynsetList) 尋找單詞,並返回該詞的全部同義字集合。若要得到單詞不同含義的全部同義字,這個謂詞很有用處。這2個謂詞定義在檔案 lookup.pl。在本文的上半部分,我說明了 WordNet 檔案,描述了單詞作同義字分組的方式。謂詞 find_synset(+Synset_ID,-WordList) 按照給出的同義字集合標示,返回一列表,內有該集合的全部單詞。它定義在檔案 find_synset.pl 中。同時,詳盡解釋了各種語義關係和字面關係。下面實驗謂詞對這些關係的處理。謂詞 find_hyp_chains(+Word,+Cat) 尋找單詞的上位詞鏈,並將它們列表顯示。例如,[[organism|_G529], [being|_G520]] 是單詞 dog 的上位詞鏈,因此,上位詞鏈還有 [[animal|_G616], [animate, being|_G607], [beast|_G595], [brute|_G586], ... 。記住,只有動詞和名詞可作上位詞。只有同類的詞能成為上位詞,使用者必須在第二個形參指定類別。例如,你若尋找名詞 dog 的上位詞,會發現單詞 mammal。你當然不是要找單詞 to move,即動詞 to dog(跟蹤)的上位詞。謂詞 find_hyp(+Word,+Cat,-HypList) 查詢單詞的全部上位詞,並以列表返回。謂詞 find_ent_chains(+Word) 和 find_ent(+Word,-EntList) 是用於找蘊含關係詞。不同的是,不必指定詞類,因為蘊含關係僅適用於動詞。上述4個謂詞定義在檔案 hyp_ent.pl 中。這4個謂詞很相似,find_hyp_chains/2 和 find_ent_chains/1 都調用通常程式謂詞 find_chain/3,並以第4個形參確定是上位關係還是蘊含關係。同樣,find_chain/3 和 find_ent/1 則調用通常程式謂詞 find/4,並以第3個形參確定是上位關係還是蘊含關係。謂詞 find_sim_meanings(+Word) 為一形容詞尋找全部相似意思,予以顯示。與之類似的謂詞 find_sim(+Word,-SimList) 返回一列表,內為與參數Word相類似的詞。相類似的詞,不一定是上位關係或蘊含關係。因此,尋找全部相類似的辦法,是用內部謂詞 find_all。它不用遞迴迴圈去尋找相似關係鏈。如前所說,檔案 wn_mm.pl, wn_ms.pl 和 wn_mp.pl 描述“部分”與“整體”之間產生的幾種關係。以下的謂詞,是表示和處理這些關係的介面。“部分”與“整體”之間的關係,只產生於名詞。謂詞 member_of(+Word,-GroupList) 的輸入變元是 Word,用於尋找包含成員 Word 的集合,將其以列表 GroupList 輸出。例如:?- member_of(faculty,X).X = [school|_G413]得到的結果,faculty(全體教職員)是 school 的組成部分。謂詞 has_member(+Word,-MemberList) 尋找在集合中的成員,以列表輸出。例如:?-has_member(faculty,X).X = [professor|_G407]得到的結果,professor(教授)是 faculty(全體教職員)的組成部分。謂詞 substance_of(+Word,-List) 和 has_substance(+Word,-SubstanceList) 尋找屬於Word的物質名詞,或者包含該物質的名詞,以列表返回。例如:?- substance_of(water,X).X = [tear|_G407]? has_substance(water,X).X = [h2o|_G407]水是構成眼淚的物質,水分子是構成水的物質。謂詞 part_of(+Word,-WholeList) 和 has_part(+Word,-PartList) 返回是 Word 一部分的詞彙列表。例如:?- part_of(leg,X).X = [table|_G407]? has_part(leg,X).X = [knee|_G407]單詞 leg(腿)是 table(桌)的一部分,knee(膝)是 leg 的一部分。輸入變元可以是“原子”或開放式列表,輸出變元是開放列表。2個謂詞在檔案 meronym_holonym.pl 中定義。謂詞 member_of/2, substance_of/2 和 part_of/2 調用通常程式 all_one/4,並以第3個變元指定相應的副檔名 mm, ms 和 mp。首先,我們用它們作為通用操作符構成相應的謂詞,其次,調用內建謂詞 find_all/3 獲得答案。再用 list/2 尋找屬於同義字集合標識的全部單詞,並將它們存入列表。還有另外2個定義可供選擇,一是原子,二是開放式列表。謂詞 all_two/4 與之相似,但不是匹配第1變元與返回第2變元,它是以對第2變元進行合一。這個謂詞配合 has_member/2, has_substance/2 和 has_part/2 的處理。最後,談談謂詞 cause(+Verb,-CauseList)。這個謂詞的輸入變元 Verb 給定一個動詞,並返回它產生的動詞列表。例如,動詞 leak 是動詞 break, get out, get around 產生的結果。這個謂詞定義在檔案 cause.pl 中,並且這個謂詞只有一行代碼。它與謂詞 member_of/2 的機制完全相同。它以第3個變元調用謂詞 all_one/4。現在,我們知道了為何謂詞 all_one/4 需要第4個變元指定類別。由於表示和處理“部分-整體”關係,只能用名詞,卻還要指定類別,似乎不可思議。但我們是重用謂詞於因果關係,為了能處理動詞,需要引入新變元。(5)如何處理不在 WordNet 資料庫中的普通單詞本節是關於無法從WordNet發現的詞彙的。當你面對以WordNet作為自然語言處理工具的資料庫時,這是個重要問題。謂詞 lookup_text(+FileName) 試圖尋找文本中的全部單詞,發現不在 WordNet 中的詞,顯示出來。調用這個謂詞,你會看到一些詞不在 WordNet 資料庫中,如 this, which, whether, of, from, the, my, is 等。如何處理這些詞呢?這取決於你所遇到的問題。擴充知識庫是一個辦法。如果 lookup_text/1 返回單字清單,而不作屏顯,那它是很有用處的。它的新形式是 lookup_text(+FileName,-List)。(6)為 ProNTo 語態學分析器提供的介面Jason Schlachter 設計的 ProNTo 是 獨立的 Prolog 自然語言處理工具,可單獨使用也可整合使用。如果整合使用,WordNet 資料庫必須有語態學分析工具的介面。ProNTo 有幾種輸出,需要 WordNet 檢查是否單詞。ProNTo 只能一次分析一個單詞。它的輸出是一列表,包含單獨的語態學分析結果。通過回溯,可以得到全部分析結果,如 [[walk,-ed]]。後來,ProNTo 的輸出結果擴充為包括如何分割單詞的列表,如 [[walked],[walke,-d],[walk,-ed]]。現在,要檢查語態學的說明解釋是否單詞,可以調用謂詞 morph_atoms_lookup(+Morph)。若在 WordNet 中找到該單詞,則調用成功,反之則失敗。但語態學分析器也解釋較長的片語或語句,例如,分析的結果是[[[he]],[[walked],[walke,-ed],[walk,-ed]],[[slowly],[slow,-ly]]]。這個例子是謂詞 morph_bag_lookup(+Morph) 處理的結果。如果在 WordNet 中發現至少一個單字清單,該謂詞執行成功,否則它失敗。對於要使用ProNTo工具的人來說,這些謂詞很有用處。謂詞執行的成敗還不夠,更有用的是它輸出的資訊。因此,我設計了以下幾個謂詞 morph_atoms_lookup(Morph,Result) 和 morph_bag_lookup(Morph,Result),它們有同樣的輸入變元,但以第2變元返回一單字清單,而不管成敗。如果找不到輸入的詞,它返回這樣的列表 [word,synset_ID,w_num,category]。例如:?- morph_atoms_lookup([[talk,-ed]],R).R = [[talk, 100677091, 1, n]] ;R = [[talk, 105953501, 1, n]]?- morph_bag_lookup([[[he]],[[talked],[talke,-d],[talk,-ed]]],R).R = [[he, 105716399, 1, n], [talk, 100677091, 1, n]] ;R = [[he, 105716399, 1, n], [talk, 105953501, 1, n]]若想更多瞭解這些謂詞是如何工作的,請查看檔案 morph lookup.pl。4、結論本文是為了給 Prolog 版本的 WordNet 做份好文檔。本文給出的知識,會簡化 PrologWordNet 資料庫的編程工作。當然,列出的謂詞可由使用者根據實際需要作出擴充。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.