自然語言接口軟件的設(shè)計與實現(xiàn)_第1頁
自然語言接口軟件的設(shè)計與實現(xiàn)_第2頁
自然語言接口軟件的設(shè)計與實現(xiàn)_第3頁
自然語言接口軟件的設(shè)計與實現(xiàn)_第4頁
自然語言接口軟件的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第頁自然語言接口軟件的設(shè)計與實現(xiàn)

關(guān)鍵字受限;自然語言;機器辭典;切詞;SQL語句

1引言

隨著人工智能的發(fā)展和數(shù)據(jù)庫技術(shù)的廣泛應(yīng)用,人們非常希望以一種更方便的方法去查詢數(shù)據(jù)庫。使用自然語言開展查詢無疑是解決這一問題的有效方法。它防止了以往命令式人機界面、圖形式人機界面繁雜的操作訓練。事實證明,通用的自然語言理解往往是低效的,而作為數(shù)據(jù)庫人機接口的自然語言界面具有使用目的單一、用詞范圍有限等特點,在數(shù)據(jù)庫查詢意義上實現(xiàn)自然語言理解是完全可行的。另外,我們可以通過語音識別技術(shù)開展語音輸入,從而簡化復(fù)雜的輸入工作。

本系統(tǒng)針對數(shù)據(jù)庫這一單一領(lǐng)域開展查詢,從而簡化了數(shù)據(jù)庫查詢的復(fù)雜操作。以提取查詢對象和查詢條件為手段,生成數(shù)據(jù)庫查詢語句為目的的軟件。本軟件的人機交互界面既可以單純的通過輸入語句,然后轉(zhuǎn)換成SQL語句,也可以通過語音輸入,再依靠復(fù)制-粘貼的手段開展輸入,然后轉(zhuǎn)換成SQL語句。

2數(shù)據(jù)辭典的設(shè)計

2.1辭典構(gòu)造的設(shè)計

為了便于以后對機器辭典開展查找,本系統(tǒng)通過類來設(shè)計了機器辭典,具體構(gòu)造如下:

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

{char*ct;//詞條字符串

char*yzym;//標志

char*yybz;//語義

char*szb1;//所在表1

char*szb2;//所在表2

char*szb3;//所在表3

}

其中:ct:表示詞條字符串,在切詞時開展匹配,便于以后生成SQL語句。yzym:表示句法標志,用來表示詞條在語句中的功能。

用九個數(shù)字表示不同的含義,其中:“0”表示域名,“1”表示域值,“2”表示邏輯操作符,“3”表示關(guān)系操作符,“4”表示查詢動詞,“5”表示疑問詞,“6”表示連接動詞,“7”表示使役動詞,“8”表示中性詞。yybz:表示語義標志,用來表示詞條所對應(yīng)的概念在語義框架中的功能。給詞條加上合適的語義標志,有助于以后生成SQL語句。語義標志比語法標志復(fù)雜的多。szb1:表示詞條所在表1,因為有些詞條(如學號等)不只在一個表中,指出所在表有助于以后生成SQL語句。szb2:表示詞條所在表2,因為有些詞條(如學號等)不只在一個表中,指出所在表有助于以后生成SQL語句。szb3:表示詞條所在表3,因為有些詞條(如學號等)不只在一個表中,指出所在表有助于以后生成SQL語句。

2.2辭典的排序

辭典排序采取先按機內(nèi)碼由小到大,再按詞條長度由大到小開展排序,通過排序以后,切詞時可以先通過機內(nèi)碼找到該詞第一個字,然后通過最大匹配法開展切詞。

3切詞及其存儲

3.1切詞

切詞采取機內(nèi)碼匹配,然后通過匹配詞條字符串開展切詞,具體流程如圖1所示。

具體分析如下:首先,讀入句子。然后,按照句子的第一個字的機內(nèi)碼與辭典中的詞條第一個字相匹配,匹配成功則從辭典中順序查找詞條,找到詞條后入棧。如果找不到,則開展容錯處理。對于數(shù)字,我們給他添加特別標志,使其在辭典中的位置為“-1”,以后開展分析時,只要遇到位置為“-1”的詞時,就認為是數(shù)字。

3.2存儲

切詞完畢,用棧開展存儲中間結(jié)果,棧的構(gòu)造如下:

structsave

{char*savestr;

intindexInDirectory;

structsave*next;

};

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

4中間鏈表的生成

生成中間鏈表的`目的是為了便于以后的語句分析,便于生成查找對象和查找條件中間鏈表的構(gòu)造如下:

structwTypeList

{charword;//詞條

char*wordType;//詞性

charfield_value;//對應(yīng)的域值

charfield_name;//對應(yīng)的域名

intlocationlibrary;//在辭典中的位置

structwTypeList*next;//next指針

};

其中:該中間鏈表中的詞性是關(guān)系到以后生成查詢對象和查詢條件的關(guān)鍵項。通過詞性的判斷可以提取查詢對象和查詢條件,以便生成SQL語句。

5查詢對象的生成

自然語言的查詢語句不外乎是命令性的祈使句、疑問句、條件判斷句,根據(jù)相應(yīng)句型,采用不同搜索方式來確定查詢對象,本軟件采用三種搜索方式:不需要搜索查詢對象、需正向搜索查詢對象、需逆向搜索查詢對象。

經(jīng)過反復(fù)比較和總結(jié)自然語言查詢語句,共有六種句型:

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

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

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

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

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

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

(4)(5)(6)三種句型采取逆向搜索查詢對象。以上六種句型,其覆蓋的查詢句子已相當廣泛,所以當句型和搜索方式確定以后,就可以找出查詢對象。查詢對象的搜索規(guī)則滲透到程序中,采取的方法是一邊搜索中間詞鏈,一邊根據(jù)句型搜索查詢對象。

6查詢條件的生成

首先,根據(jù)前面生成的中間詞鏈,在通過查詢對象尋找的程序后用一個指針從中間詞鏈的頭移動到尾,分別判斷當前指針指向的結(jié)點的詞性是不是為“-1”、“8”、“4”,即為查詢對象、查詢動詞、中性詞、一般動詞。如果是,指針后移;如果不是,則復(fù)制該結(jié)點,然后執(zhí)行插入查詢條件詞鏈中的程序。這樣指針移動到頭后,所生成的查詢條件鏈就是下一步程序所要的詞鏈。若中間詞鏈的頭指針和首結(jié)點相等的話,即中間詞鏈為空,則直接返回查詢條件棧的頭指針。

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

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

查詢條件棧的構(gòu)造為:

structcondStack//查詢條件棧

{char*name;//域名

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

char*condition;//關(guān)系(邏輯或者一般關(guān)系)

char*value;//域值

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

structcondStack*next;

};

7SQL語句的生成

根據(jù)前面生成的查詢對象棧和查詢條件棧,開展SQL語句的轉(zhuǎn)換。

首先,判斷對象棧和條件棧是否為空。如果這兩個棧有一個為空,則SQL轉(zhuǎn)化沒有方法執(zhí)行,直接返回空。

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

然后,根據(jù)屬于哪一種情況,來開展對漢語查詢語句的SQL轉(zhuǎn)換。但是,不管查詢語句屬于哪一種情況,都要開展判斷查詢對象和查詢條件是否在同一個表中。這是通過szb()函數(shù)和OneOrMoreTable()函數(shù)結(jié)合來實現(xiàn)的。

在單對象,單條件中,如果查詢對象和條件在同一表中,則直接調(diào)用函數(shù)one()來執(zhí)行SQL語句的轉(zhuǎn)化。在one()函數(shù)中,將select、from、where等SQL語句中必要的單詞轉(zhuǎn)換成字符串,將查詢對象和查詢條件根據(jù)他們能在SQL中的位置開展轉(zhuǎn)換。當查詢對象和查詢條件不在同一個表中,此時就是一個嵌套查詢的語句。根據(jù)提供的9個表,找出查詢對象和查詢條件分別所在表之間的聯(lián)系。因這9個表之間都是通過什么號(例如:學號、院系號)開展聯(lián)系的,所以最后在多表問題上通過表之間的聯(lián)系并調(diào)用more()函數(shù)來開展SQL語句的轉(zhuǎn)換。

在單對象,多條件情況中,先判斷條件是否在同一個表中,然后在分別判斷多條件和單個對象是否在同一個表中。這樣就又會出現(xiàn)多條件在同一個表中,與單對象在同一個表中,與單對象不再同一個表中;多條件不在同一個表中,單條件與單對象在同一個表中,單條件與對象不再同一個表中等多種情況。分別對這些情況開展判斷和分析,最后都將它們轉(zhuǎn)換成簡單的單對象單條件的情況開展處理。對于實在沒有方法處理的句子情況

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論