閱讀屋>設計> 淺談自然語言介面軟體的設計與實現

淺談自然語言介面軟體的設計與實現

淺談自然語言介面軟體的設計與實現

  摘要為資料庫設計自然語言介面成為資料庫應用的一個研究方向。本文介紹了一種基於受限的漢語自然語言查詢技術,透過建立機器辭典,對自然語言查詢語句進行切詞,再透過查詢查詢物件和查詢條件,生成SQL語句。

  關鍵字受限;自然語言;機器辭典;切詞;SQL語句

  1引言

  隨著人工智慧的發展和資料庫技術的廣泛應用,人們非常希望以一種更方便的方法去查詢資料庫。使用自然語言進行查詢無疑是解決這一問題的有效方法。它避免了以往命令式人機介面、圖形式人機介面繁雜的操作訓練。事實證明,通用的自然語言理解往往是低效的,而作為資料庫人機介面的自然語言介面具有使用目的單一、用詞範圍有限等特點,在資料庫查詢意義上實現自然語言理解是完全可行的。另外,我們可以透過語音識別技術進行語音輸入,從而簡化複雜的輸入工作。

  本系統針對資料庫這一單一領域進行查詢,從而簡化了資料庫查詢的複雜操作。以提取查詢物件和查詢條件為手段,生成資料庫查詢語句為目的的軟體。本軟體的人機互動介面既可以單純的透過輸入語句,然後轉換成SQL語句,也可以透過語音輸入,再依靠複製-貼上的手段進行輸入,然後轉換成SQL語句。

  2資料辭典的設計

  2.1辭典結構的設計

  為了便於以後對機器辭典進行查詢,本系統透過類來設計了機器辭典,具體結構如下:

  classjqcd//定義一個反映機器辭典的jqcd類

  {char*ct;//詞條字串

  char*yzym;//標誌

  char*yybz;//語義

  char*szb1;//所在表1

  char*szb2;//所在表2

  char*szb3;//所在表3

  }

  其中:ct:表示詞條字串,在切詞時進行匹配,便於以後生成SQL語句。yzym:表示句法標誌,用來表示詞條在語句中的功能。

  用九個數字表示不同的含義,其中:“0”表示域名,“1”表示域值,“2”表示邏輯運算子,“3”表示關係運算子,“4”表示查詢動詞,“5”表示疑問詞,“6”表示連線動詞,“7”表示使役動詞,“8”表示中性詞。yybz:表示語義標誌,用來表示詞條所對應的概念在語義框架中的功能。給詞條加上合適的語義標誌,有助於以後生成SQL語句。語義標誌比語法標誌複雜的多。szb1:表示詞條所在表1,因為有些詞條(如學號等)不只在一個表中,指出所在表有助於以後生成SQL語句。szb2:表示詞條所在表2,因為有些詞條(如學號等)不只在一個表中,指出所在表有助於以後生成SQL語句。szb3:表示詞條所在表3,因為有些詞條(如學號等)不只在一個表中,指出所在表有助於以後生成SQL語句。

  2.2辭典的排序

  辭典排序採取先按機內碼由小到大,再按詞條長度由大到小進行排序,透過排序以後,切詞時可以先透過機內碼找到該詞第一個字,然後透過最大匹配法進行切詞。【4】

  3切詞及其儲存

  3.1切詞

  切詞采取機內碼匹配,然後透過匹配詞條字串進行切詞,具體流程如圖1所示。

  具體分析如下:首先,讀入句子。然後,按照句子的第一個字的機內碼與辭典中的詞條第一個字相匹配,匹配成功則從辭典中順序查詢詞條,找到詞條後入棧。如果找不到,則進行容錯處理。對於數字,我們給他新增特別標誌,使其在辭典中的位置為“-1”,以後進行分析時,只要遇到位置為“-1”的詞時,就認為是數字。

  3.2儲存

  切詞完畢,用棧進行儲存中間結果,棧的結構如下:

  structsave

  {char*savestr;

  intindexInDirectory;

  structsave*next;

  };

  其中:savestr儲存切出的詞。indexInDirectory儲存切出的詞在辭典中的位置,便於以後查詢機器辭典中的詞條。

  4中間連結串列的生成

  生成中間連結串列【2】的`目的是為了便於以後的語句分析,便於生成查詢物件和查詢條件中間連結串列的結構如下:

  structwTypeList

  {charword;//詞條

  char*wordType;//詞性

  charfield_value;//對應的域值

  charfield_name;//對應的域名

  intlocationlibrary;//在辭典中的位置

  structwTypeList*next;//next指標

  };

  其中:該中間連結串列中的詞性是關係到以後生成查詢物件和查詢條件的關鍵項。透過詞性的判斷可以提取查詢物件和查詢條件,以便生成SQL語句。

  5查詢物件的生成

  自然語言的查詢語句不外乎是命令性的祈使句、疑問句、條件判斷句,根據相應句型,採用不同搜尋方式來確定查詢物件,本軟體採用三種搜尋方式:不需要搜尋查詢物件、需正向搜尋查詢物件【5】、需逆向搜尋查詢物件。

  經過反覆比較和總結自然語言查詢語句,共有六種句型【3】:

  (1)who—sentence如“誰的學號為100033102?”,這種句型的查詢物件隱含在“誰”中,搜尋方式為“不需搜尋”。

  (2)us—sentence如“哪些學生的籍貫是山東?”

  (3)特殊語句:即verbqus不在句子首尾,而可以在其他的任何位置上。如“戴子強是哪個地方的人?”。以上句型一般採用正向搜尋查詢物件。

  (4)find---sentence這是以動詞開頭的句型,大部分的祈使句的查詢句都是這種句型。如“查詢學號為1000033102的學生的姓名”。

  (5)b(把)---sentence這是以“把”為首的祈使句。如“把學號為1000033102的學生找出來”。

  (6)sentence--verb—qus(who)這種句型是以verbqus或verbwho結尾的句子,如“張三的學號是多少?”

  (4)(5)(6)三種句型採取逆向搜尋查詢物件。以上六種句型,其覆蓋的查詢句子已相當廣泛,所以當句型和搜尋方式確定以後,就可以找出查詢物件。查詢物件的搜尋規則滲透到程式中,採取的辦法是一邊搜尋中間詞鏈,一邊根據句型搜尋查詢物件。

  6查詢條件的生成

  首先,根據前面生成的中間詞鏈,在透過查詢物件尋找的程式後用一個指標從中間詞鏈的頭移動到尾,分別判斷當前指標指向的結點的詞性是不是為“-1”、“8”、“4”,即為查詢物件、查詢動詞、中性詞、一般動詞。如果是,指標後移;如果不是,則複製該結點,然後執行插入查詢條件詞鏈中的程式。這樣指標移動到頭後,所生成的查詢條件鏈就是下一步程式所要的詞鏈。若中間詞鏈的頭指標和首結點相等的話,即中間詞鏈為空,則直接返回查詢條件棧的頭指標。

  其次,根據七種基本模版:(1)域名+關係符+域值(2)域名+關係符(3)域名+域值(4)域值(5)域值+域名+關係符(6)域值+域名(7)關係符+域名進行匹配。一個查詢條件鏈可以有一個或多個模版組成。

  最後,將匹配成功的一個或多個模版分別壓入條件棧,返回入棧後的棧頂指標。在沒有找到匹配的模版或條件鏈為空時,直接返回沒有結點的條件棧的棧頂指標。

  查詢條件棧的結構為:

  structcondStack//查詢條件棧

  {char*name;//域名

  intnameIndex;//域名在字典中的位置

  char*condition;//關係(邏輯或者一般關係)

  char*value;//域值

  intvalueIndex;//域值在字典中的位置

  structcondStack*next;

  };

  7SQL語句的生成

  根據前面生成的查詢物件棧和查詢條件棧,進行SQL語句的轉換。【1】

  首先,判斷物件棧和條件棧是否為空。如果這兩個棧有一個為空,則SQL轉化沒有辦法執行,直接返回空。

  其次,分別將物件棧和條件棧中的結點做出棧處理。並分別記下查詢物件和條件的個數,並判斷該查詢語句屬於哪一種情況:(1)單物件,單條件(2)單物件,多條件(3)多物件,但條件(4)多物件,多條件。

  然後,根據屬於哪一種情況,來進行對漢語查詢語句的SQL轉換。但是,不管查詢語句屬於哪一種情況,都要進行判斷查詢物件和查詢條件是否在同一個表中。這是透過szb()函式和OneOrMoreTable()函式結合來實現的。

  在單物件,單條件中,如果查詢物件和條件在同一表中,則直接呼叫函式one()來執行SQL語句的轉化。在one()函式中,將select、from、where等SQL語句中必要的單詞轉換成字串,將查詢物件和查詢條件根據他們能在SQL中的位置進行轉換。當查詢物件和查詢條件不在同一個表中,此時就是一個巢狀查詢的語句。根據提供的9個表,找出查詢物件和查詢條件分別所在表之間的聯絡。因這9個表之間都是透過什麼號(例如:學號、院系號)進行聯絡的,所以最後在多表問題上透過表之間的聯絡並呼叫more()函式來進行SQL語句的轉換。

  在單物件,多條件情況中,先判斷條件是否在同一個表中,然後在分別判斷多條件和單個物件是否在同一個表中。這樣就又會出現多條件在同一個表中,與單物件在同一個表中,與單物件不再同一個表中;多條件不在同一個表中,單條件與單物件在同一個表中,單條件與物件不再同一個表中等多種情況。分別對這些情況進行判斷和分析,最後都將它們轉換成簡單的單物件單條件的情況進行處理。對於實在沒有辦法處理的句子情況,採用返回空值的辦法,繼續下一條查詢語句的執行。

  對於多物件、單條件和多物件、多條件的情況也是這樣進行判斷、分析和處理的。

  最後,我們返回生成的SQL語句,並將它們寫入D:sysdataoutput.txt檔案中。

  8結論

  以上詳細介紹了設計自然語言介面的過程,依據其設計出了一個完整的自然語言資料庫查詢介面軟體,該軟體執行效果良好,並在濟南市第二屆軟體大賽中榮獲三等獎。

  參考文獻

  【1】許龍飛,楊曉昀,唐世謂.基於受限漢語的資料庫自然語言介面技術研究[J].軟體學報,2002,13(4).

  【2】王新民,葉延濱.資料庫自然語言查詢介面.小型微型計算機系統,Vol.18,No.3,1997

  【3】徐九韻,王新民,仝兆歧.文法識別與資料庫漢語查詢語言的結構分析,石油大學學報(自然科學版),Vol.21,No.2,1997

  【4】張劍平.用於管理資訊系統檢索的自然語言介面模型.小型微型計算機系統,Vol.15,No.8,1994

  【5】徐九韻,仝兆歧,向逐聰,王新民.資料庫漢語查詢語言的分詞研究與實現.中文資訊學報,Vo1.12No.4,1998.

【淺談自然語言介面軟體的設計與實現】相關文章: