資源描述:
《自然語言接口軟件的設(shè)計(jì)與實(shí)現(xiàn)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、自然語言接口軟件的設(shè)計(jì)與實(shí)現(xiàn)摘要為數(shù)據(jù)庫設(shè)計(jì)自然語言接口成為數(shù)據(jù)庫應(yīng)用的一個研究方向。本文介紹了一種基于受限的漢語自然語言查詢技術(shù),通過建立機(jī)器辭典,對自然語言查詢語句進(jìn)行切詞,再通過查找查詢對象和查詢條件,生成SQL語句。關(guān)鍵字受限;自然語言;機(jī)器辭典;切詞;SQL語句1引言隨著人工智能的發(fā)展和數(shù)據(jù)庫技術(shù)的廣泛應(yīng)用,人們非常希望以一種更方便的方法去查詢數(shù)據(jù)庫。使用自然語言進(jìn)行查詢無疑是解決這一問題的有效方法。它避免了以往命令式人機(jī)界面、圖形式人機(jī)界面繁雜的操作訓(xùn)練。事實(shí)證明,通用的自然語言理解往往是低效的,而
2、作為數(shù)據(jù)庫人機(jī)接口的自然語言界面具有使用目的單一、用詞范圍有限等特點(diǎn),在數(shù)據(jù)庫查詢意義上實(shí)現(xiàn)自然語言理解是完全可行的。另外,我們可以通過語音識別技術(shù)進(jìn)行語音輸入,從而簡化復(fù)雜的輸入工作。本系統(tǒng)針對數(shù)據(jù)庫這一單一領(lǐng)域進(jìn)行查詢,從而簡化了數(shù)據(jù)庫查詢的復(fù)雜操作。以提取查詢對象和查詢條件為手段,生成數(shù)據(jù)庫查詢語句為目的的軟件。本軟件的人機(jī)交互界面既可以單純的通過輸入語句,然后轉(zhuǎn)換成SQL語句,也可以通過語音輸入,再依靠復(fù)制-粘貼的手段進(jìn)行輸入,然后轉(zhuǎn)換成SQL語句。2數(shù)據(jù)辭典的設(shè)計(jì)2.1辭典結(jié)構(gòu)的設(shè)計(jì)為了便于以后對機(jī)器
3、辭典進(jìn)行查找,本系統(tǒng)通過類來設(shè)計(jì)了機(jī)器辭典,具體結(jié)構(gòu)如下:classjqcd//定義一個反映機(jī)器辭典的jqcd類{char*ct;//詞條字符串char*yzym;//標(biāo)志char*yybz;//語義char*szb1;//所在表1char*szb2;//所在表2char*szb3;//所在表3}其中:ct:表示詞條字符串,在切詞時進(jìn)行匹配,便于以后生成SQL語句。yzym:表示句法標(biāo)志,用來表示詞條在語句中的功能。用九個數(shù)字表示不同的含義,其中:“0”表示域名,“1”表示域值,“2”表示邏輯操作符,“3”表示
4、關(guān)系操作符,“4”表示查詢動詞,“5”表示疑問詞,“6”表示連接動詞,“7”表示使役動詞,“8”表示中性詞。yybz:表示語義標(biāo)志,用來表示詞條所對應(yīng)的概念在語義框架中的功能。給詞條加上合適的語義標(biāo)志,有助于以后生成SQL語句。語義標(biāo)志比語法標(biāo)志復(fù)雜的多。szb1:表示詞條所在表1,因?yàn)橛行┰~條(如學(xué)號等)不只在一個表中,指出所在表有助于以后生成SQL語句。szb2:表示詞條所在表2,因?yàn)橛行┰~條(如學(xué)號等)不只在一個表中,指出所在表有助于以后生成SQL語句。szb3:表示詞條所在表3,因?yàn)橛行┰~條(如學(xué)號等)
5、不只在一個表中,指出所在表有助于以后生成SQL語句。2.2辭典的排序辭典排序采取先按機(jī)內(nèi)碼由小到大,再按詞條長度由大到小進(jìn)行排序,通過排序以后,切詞時可以先通過機(jī)內(nèi)碼找到該詞第一個字,然后通過最大匹配法進(jìn)行切詞?!?】3切詞及其存儲3.1切詞切詞采取機(jī)內(nèi)碼匹配,然后通過匹配詞條字符串進(jìn)行切詞,具體流程如圖1所示。具體分析如下:首先,讀入句子。然后,按照句子的第一個字的機(jī)內(nèi)碼與辭典中的詞條第一個字相匹配,匹配成功則從辭典中順序查找詞條,找到詞條后入棧。如果找不到,則進(jìn)行容錯處理。對于數(shù)字,我們給他添加特別標(biāo)志,使
6、其在辭典中的位置為“-1”,以后進(jìn)行分析時,只要遇到位置為“-1”的詞時,就認(rèn)為是數(shù)字。3.2存儲切詞完畢,用棧進(jìn)行存儲中間結(jié)果,棧的結(jié)構(gòu)如下:structsave{char*savestr;intindexInDirectory;structsave*next;};其中:savestr存儲切出的詞。indexInDirectory存儲切出的詞在辭典中的位置,便于以后查詢機(jī)器辭典中的詞條。圖1切詞流程圖4中間鏈表的生成生成中間鏈表【2】的目的是為了便于以后的語句分析,便于生成查找對象和查找條件中間鏈表的結(jié)構(gòu)如下
7、:structe;//對應(yīng)的域名intlocationlibrary;//在辭典中的位置structe;//域名intnamEindex;//域名在字典中的位置char*condition;//關(guān)系(邏輯或者一般關(guān)系)char*value;//域值intvaluEIndex;//域值在字典中的位置structcondStack*next;};7SQL語句的生成根據(jù)前面生成的查詢對象棧和查詢條件棧,進(jìn)行SQL語句的轉(zhuǎn)換。【1】首先,判斷對象棧和條件棧是否為空。如果這兩個棧有一個為空,則SQL轉(zhuǎn)化沒有辦法執(zhí)行,直接
8、返回空。其次,分別將對象棧和條件棧中的結(jié)點(diǎn)做出棧處理。并分別記下查詢對象和條件的個數(shù),并判斷該查詢語句屬于哪一種情況:(1)單對象,單條件(2)單對象,多條件(3)多對象,但條件(4)多對象,多條件。然后,根據(jù)屬于哪一種情況,來進(jìn)行對漢語查詢語句的SQL轉(zhuǎn)換。但是,不管查詢語句屬于哪一種情況,都要進(jìn)行判斷查詢對象和查詢條件是否在同一個表中。這是通過szb()函數(shù)和OneOrMoreTa