當前位置:學問谷 >

行業範例 >設計 >

淺談自然語言接口軟件的設計與實現

淺談自然語言接口軟件的設計與實現

  摘要為數據庫設計自然語言接口成為數據庫應用的一個研究方向。本文介紹了一種基於受限的漢語自然語言查詢技術,通過建立機器辭典,對自然語言查詢語句進行切詞,再通過查找查詢對象和查詢條件,生成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:文件中。

  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.

  • 文章版權屬於文章作者所有,轉載請註明 https://xuewengu.com/flhy/sheji/9nojjk.html