一種基于本體和受限自然語言處理的數(shù)據(jù)庫查詢方法
【專利摘要】本發(fā)明公開了一種基于本體和受限自然語言處理的數(shù)據(jù)庫查詢方法,主要用于處理數(shù)據(jù)庫的自然語言查詢問題。本發(fā)明將數(shù)據(jù)庫的關(guān)系模式轉(zhuǎn)換為對應(yīng)的本體,根據(jù)數(shù)據(jù)庫中的記錄構(gòu)建分詞專用詞典以及關(guān)鍵詞索引,從用戶自然語言查詢中提取出關(guān)鍵詞后,利用本體中的語義信息找到多個關(guān)鍵詞的關(guān)聯(lián),最終將自然語言查詢轉(zhuǎn)換為SQL查詢。
【專利說明】一種基于本體和受限自然語言處理的數(shù)據(jù)庫查詢方法【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于語義查詢領(lǐng)域,涉及一種基于本體和受限自然語言處理的數(shù)據(jù)庫查詢方法。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)的不斷發(fā)展,互聯(lián)網(wǎng)中包含的信息量也在呈幾何倍數(shù)的增長著。而據(jù)統(tǒng)計,互聯(lián)網(wǎng)中的數(shù)據(jù)有70%以上是存放在數(shù)據(jù)庫中的,所以對數(shù)據(jù)庫進行有效的查詢在當代Web數(shù)據(jù)分析中有著非常重要的地位。然而傳統(tǒng)的對數(shù)據(jù)庫的查詢需要專業(yè)人員深入的理解數(shù)據(jù)庫內(nèi)部的模式信息,并構(gòu)建出適當?shù)腟QL查詢語句;對非專業(yè)人員來說,由于不具備數(shù)據(jù)庫的專業(yè)知識,對于龐大的數(shù)據(jù)庫只能望洋興嘆。
[0003]數(shù)據(jù)庫自然語言查詢是自然語言理解與數(shù)據(jù)庫技術(shù)結(jié)合的產(chǎn)物,近年來,作為人工智能中自然語言理解的智能接口技術(shù)而受到重視,尤其與漢語的手寫體及語音識別的結(jié)合研究,具有很高的理論價值與廣泛的應(yīng)用前景。數(shù)據(jù)庫自然語言接口允許用戶通過自然語言對數(shù)據(jù)庫進行各種操作,由系統(tǒng)自動的將其轉(zhuǎn)換為數(shù)據(jù)庫的操作語言,為用戶的使用帶來極大的方便。這里一個很有挑戰(zhàn)性的問題是,如何準確的將自然語言搜索語句轉(zhuǎn)化為數(shù)據(jù)庫的操作語言。由于缺乏語料庫,傳統(tǒng)的基于詞性標注和語法分析對數(shù)據(jù)庫的自然語言查詢處理的效果很難達到實用的要求。
[0004]縱觀近年來國內(nèi)所研制的多個系統(tǒng),所采用的技術(shù)主要是基于數(shù)據(jù)庫的E-R漢語理解模型、類關(guān)系代數(shù)邏輯式的中間語言轉(zhuǎn)換、以條件為中心的句型匹配以及多語言組合模板等。東南大學(xué)的CQI系統(tǒng)是上世紀90年代國內(nèi)首次研制成功的基于E-R模型的數(shù)據(jù)庫中文查詢接口,但是接口受制于只能使用祈使句型,并且詞匯量有限。中國人民大學(xué)和香港中文大學(xué)所研制成功的Chiql在查詢語句結(jié)構(gòu),詞匯量以及自然語言查詢轉(zhuǎn)換方面都有了很大的改進,但是用戶使用時受限程度依然較大,因此仍然達不到實用的要求。
【發(fā)明內(nèi)容】
[0005]技術(shù)問題:本發(fā)明提供一種用戶友好型,通過用戶輸入的自然語言就可以自動的生成SQL查詢語句,并將查詢結(jié)果返回給用戶的基于本體和自然語言處理的數(shù)據(jù)庫查詢方法。
[0006]技術(shù)方案:本發(fā)明的基于本體和自然語言處理的數(shù)據(jù)庫查詢方法,首先從數(shù)據(jù)庫的關(guān)系模式中抽取出本體,即將關(guān)系表抽象成一個具體的類,類與類之間具有繼承、等價等關(guān)系;關(guān)系表中的每一列被抽象為本體中的一個數(shù)據(jù)類型屬性;其次,關(guān)系數(shù)據(jù)庫中的外鍵也被轉(zhuǎn)換為本體中的對象屬性。然后,將本體轉(zhuǎn)換成圖數(shù)據(jù)結(jié)構(gòu),再結(jié)合自然語言處理技術(shù)對用戶輸入的自然語言進行分詞,構(gòu)建關(guān)鍵詞索引,搜索連接多個關(guān)鍵詞的連通圖,SQL轉(zhuǎn)換等實現(xiàn)自然語言到SQL (—種數(shù)據(jù)庫查詢和程序設(shè)計語言)語言的轉(zhuǎn)換。
[0007]本發(fā)明的基于本體和自然語言處理的數(shù)據(jù)庫查詢方法,包括如下步驟:
[0008]I)將根據(jù)數(shù)據(jù)庫關(guān)系模式 構(gòu)建出的本體轉(zhuǎn)換成圖數(shù)據(jù)結(jié)構(gòu):本體中的類被轉(zhuǎn)換為類結(jié)點,數(shù)據(jù)類型屬性被轉(zhuǎn)換為屬性結(jié)點,屬性結(jié)點分別有一條連接到它指定的類結(jié)點的邊,對象屬性被轉(zhuǎn)換為連接兩個類的邊;
[0009]2)構(gòu)建分詞專用詞典和關(guān)鍵詞索引:依次讀取數(shù)據(jù)庫中的每一條記錄,將讀取到的記錄值添加到詞典中作為用戶查詢時分詞的專用詞典,讀取出每一條記錄時同時將該記錄值作為鍵,將該記錄值在數(shù)據(jù)庫中對應(yīng)的關(guān)系表名和列名作為值,組成鍵值對,存入到非關(guān)系型數(shù)據(jù)庫中,作為關(guān)鍵詞索引,用于快速定位給定的關(guān)鍵詞,提高查詢效率;
[0010]3)系統(tǒng)接收到用戶自然語言查詢后,利用步驟2)中構(gòu)建出的專用詞典將自然語言分解為多個有意義的關(guān)鍵詞;
[0011]4)將步驟3)中分解出的關(guān)鍵詞逐個地作為鍵,在關(guān)鍵詞索引中查找所對應(yīng)的值,即找出該關(guān)鍵詞所對應(yīng)的關(guān)系表名和列名,然后在步驟I)中生成的圖數(shù)據(jù)結(jié)構(gòu)中找到所有關(guān)系表名和列名對應(yīng)的結(jié)點,最后將所有結(jié)點對應(yīng)的連通分量從圖數(shù)據(jù)結(jié)構(gòu)中提取出來,作為查詢空間;
[0012]5)遍歷步驟4)中構(gòu)建出的查詢空間中的連通分量,找到查詢空間中能將所有關(guān)鍵詞連接起來的所有連通子圖,若不能找到任何一個滿足條件的連通子圖,則找出包含盡可能多的關(guān)鍵詞的連通子圖,然后將找出的連通子圖根據(jù)其包含的關(guān)鍵詞數(shù)從大到小進行排序,對于包含關(guān)鍵詞數(shù)相同的連通子圖,則再根據(jù)所包含的邊數(shù)從小到大進行排序,最后選擇排序最靠前的k個連通子圖,k的值根據(jù)數(shù)據(jù)庫的大小以及搜索得到的所有連通子圖個數(shù)來確定;
[0013]6)將步驟5)中選擇的k個連通圖按照排序,依次根據(jù)如下規(guī)則轉(zhuǎn)換成SQL語句:將SQL語句中的Select子句以*填充,用以表示將所有的列全部返回,將連通圖中的類結(jié)點寫入到SQL語句中的From子句中,將連接兩個類結(jié)點的邊轉(zhuǎn)換為外鍵關(guān)系寫入到SQL語句中的Where子句中,將用戶輸入的關(guān)鍵詞根據(jù)其對應(yīng)的關(guān)系表名和列名寫入到SQL語句中的Where字句中;
[0014]SQL語句生成后,對數(shù)據(jù)庫進行查詢,然后將查詢結(jié)果返回給用戶。
[0015]本發(fā)明的一個優(yōu)選方案中,步驟2)中的非關(guān)系型數(shù)據(jù)庫采用MongoDB數(shù)據(jù)庫。
[0016]有益效果:本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點:
[0017]本發(fā)明方法通過本體存儲數(shù)據(jù)庫中關(guān)系表之間的語義信息,通過關(guān)鍵詞索引快速的構(gòu)建出查詢空間,在搜索空間中找到一條或多條包含所有用戶查詢關(guān)鍵詞的最小連通圖,并按照一定的規(guī)則將最小連通圖轉(zhuǎn)換為SQL查詢語句,在此基礎(chǔ)上有效的實現(xiàn)語義查詢。
[0018]本方法中,將用戶的自然語言查詢分解成多個有意義的關(guān)鍵詞,關(guān)鍵詞之間的潛在關(guān)聯(lián)是通過搜索對應(yīng)的圖數(shù)據(jù)結(jié)構(gòu)而挖掘出來的,因此不涉及詞性標注和語法分析,也不受限于句型。例如查詢“張三的學(xué)號”和“學(xué)號的張三”,系統(tǒng)都將它們分解為關(guān)鍵詞“張三”、“學(xué)號”,因此兩種查詢得到的結(jié)果是完全一樣的。
[0019]另外,本方法與傳統(tǒng)基于數(shù)據(jù)庫E-R模型的方法不同,提出一種新穎的方法,將從數(shù)據(jù)庫關(guān)系模式中抽取出的本體,轉(zhuǎn)換成圖數(shù)據(jù)結(jié)構(gòu),通過遍歷該圖數(shù)據(jù)結(jié)構(gòu),找到用戶查詢中包含的關(guān)鍵詞對應(yīng)的連通子圖,實現(xiàn)自然語言對數(shù)據(jù)庫的查詢。對于一個龐大的數(shù)據(jù)庫,它可以包含數(shù)以萬計的記錄,但是它的關(guān)系模式是相對簡單的。而且相對于數(shù)據(jù)來說,關(guān)系模式是非常小的,而且數(shù)據(jù)庫中的每一條記錄必定有與之對應(yīng)的關(guān)系模式,所以可以把關(guān)系模式看成是從數(shù)據(jù)中抽象出來的統(tǒng)一的標準,數(shù)據(jù)庫中所有的記錄都滿足該標準。本方法從數(shù)據(jù)庫的關(guān)系模式中抽取出本體,將該本體轉(zhuǎn)換成圖數(shù)據(jù)結(jié)構(gòu),通過關(guān)鍵詞索引,從圖數(shù)據(jù)結(jié)構(gòu)中提取所有與關(guān)鍵詞對應(yīng)的連通分量作為查詢空間,極大的縮小了搜索的范圍,從而大大的提聞搜索效率。
[0020]本發(fā)明采用非關(guān)系型數(shù)據(jù)庫存儲關(guān)鍵詞索引,非關(guān)系型數(shù)據(jù)庫存儲時結(jié)構(gòu)靈活,不受關(guān)系型數(shù)據(jù)庫ACID事務(wù)(原子性Atomicity、一致性Consistency、隔離性Isolation、持久性Durability)的約束,存儲關(guān)鍵詞索引時,相比傳統(tǒng)關(guān)系型數(shù)據(jù)庫有很強的優(yōu)勢。
[0021]經(jīng)過實例分析證明,利用本發(fā)明提出的數(shù)據(jù)庫自然語言查詢方法,用戶不需要十分了解數(shù)據(jù)庫,也不需要對SQL查詢語言有任何的基礎(chǔ),只需要輸入自然語言就能實現(xiàn)對數(shù)據(jù)庫的查詢。從自然語言到SQL的自動轉(zhuǎn)換過程對用戶是完全透明的。本發(fā)明是一種用戶友好型的方法,通過驗證,該方法是完全正確可行的。
【專利附圖】
【附圖說明】
[0022]圖1是本發(fā)明的基本過程的流程示意圖;
[0023]圖2是本發(fā)明查詢空間構(gòu)建流程圖;
[0024]圖3是本發(fā)明查詢子圖搜索算法流程圖;
[0025]圖4是實例的POTO圖數(shù)據(jù)結(jié)構(gòu)示意圖;
[0026]圖5是實例的查詢空間示意圖;
[0027]圖6是實例的POTO子圖示意圖。
【具體實施方式】
[0028]以下結(jié)合實施例和說明書附圖,詳細說明本發(fā)明的實施過程。
[0029]本發(fā)明的基于本體和受限自然語言處理的關(guān)系數(shù)據(jù)庫查詢方法,包括以下6個步驟:
[0030]I)本體轉(zhuǎn)P⑶0圖數(shù)據(jù)結(jié)構(gòu):本體(Ontology)是由萬維網(wǎng)聯(lián)盟(W3C)提出的用于描述萬維網(wǎng)上各類資源信息的一種規(guī)范,本發(fā)明中的本體是根據(jù)關(guān)系數(shù)據(jù)庫的模式信息,按照一定規(guī)則構(gòu)建出來的,用于描述數(shù)據(jù)庫中的各類資源信息,本體構(gòu)建規(guī)則如下:
[0031](a)本體中構(gòu)建類(class):對于關(guān)系數(shù)據(jù)庫中的所有關(guān)系表,在本體中分別構(gòu)建出一個對應(yīng)的類,類和關(guān)系表一一對應(yīng);
[0032](b)本體中構(gòu)建數(shù)據(jù)類型屬性(dataTypeProperty):對于每一張關(guān)系表t中的每一列C,在本體中分別構(gòu)建出一個c對應(yīng)的數(shù)據(jù)類型屬性,該數(shù)據(jù)類型屬性所屬的類即為關(guān)系表t所對應(yīng)的類;
[0033](c)本體中構(gòu)建對象屬性(objectProperty):對于關(guān)系數(shù)據(jù)庫中的每一個關(guān)聯(lián)兩張關(guān)系表tl、t2的外鍵f,在關(guān)系表tl、t2對應(yīng)的兩個類之間,構(gòu)建出一個f對應(yīng)的對象屬性,該對象屬性連接的兩個類即為關(guān)系表tl、t2對應(yīng)的類。
[0034]本體中僅包含類、對象屬性和數(shù)據(jù)類型屬性。為了充分利用本體中的信息,我們提出了 POTO圖數(shù)據(jù)結(jié)構(gòu)(下稱POTO圖)。POTO圖主要包含兩種子數(shù)據(jù)結(jié)構(gòu)即結(jié)點(Node)和邊(Edge)。
[0035]結(jié)點的數(shù)據(jù)結(jié)構(gòu)如表I所示:[0036]表1結(jié)點的數(shù)據(jù)結(jié)構(gòu)
【權(quán)利要求】
1.一種基于本體和受限自然語言處理的數(shù)據(jù)庫查詢方法,其特征在于,該方法包括如下步驟: 1)將根據(jù)數(shù)據(jù)庫關(guān)系模式構(gòu)建出的本體轉(zhuǎn)換成圖數(shù)據(jù)結(jié)構(gòu):本體中的類被轉(zhuǎn)換為類結(jié)點,數(shù)據(jù)類型屬性被轉(zhuǎn)換為屬性結(jié)點,所述屬性結(jié)點分別有一條連接到它指定的類結(jié)點的邊,對象屬性被轉(zhuǎn)換為連接兩個類的邊; 2)構(gòu)建分詞專用詞典和關(guān)鍵詞索引:依次讀取數(shù)據(jù)庫中的每一條記錄,將讀取到的記錄值添加到詞典中作為用戶查詢時分詞的專用詞典,讀取出每一條記錄時同時將該記錄值作為鍵,將該記錄值在數(shù)據(jù)庫中對應(yīng)的關(guān)系表名和列名作為值,組成鍵值對,存入到非關(guān)系型數(shù)據(jù)庫中,作為關(guān)鍵詞索引,用于快速定位給定的關(guān)鍵詞,提高查詢效率; 3)系統(tǒng)接收到用戶自然語言查詢后,利用所述步驟2)中構(gòu)建出的專用詞典將自然語言分解為多個有意義的關(guān)鍵詞; 4)將所述步驟3)中分解出的關(guān)鍵詞逐個地作為鍵,在關(guān)鍵詞索引中查找所對應(yīng)的值,即找出該關(guān)鍵詞所對應(yīng)的關(guān)系表名和列名,然后在所述步驟I)中生成的圖數(shù)據(jù)結(jié)構(gòu)中找到所有關(guān)系表名和列名對應(yīng)的結(jié)點,最后將所有結(jié)點對應(yīng)的連通分量從圖數(shù)據(jù)結(jié)構(gòu)中提取出來,作為查詢空間; 5)遍歷所述步驟4)中構(gòu)建出的查詢空間中的連通分量,找到查詢空間中能將所有關(guān)鍵詞連接起來的所有連通子圖,若不能找到任何一個滿足條件的連通子圖,則找出包含盡可能多的關(guān)鍵詞的連通子圖,然后將找出的連通子圖根據(jù)其包含的關(guān)鍵詞數(shù)從大到小進行排序,對于包含關(guān)鍵詞數(shù)相同的連通子圖,則再根據(jù)所包含的邊數(shù)從小到大進行排序,最后選擇排序最靠前的k個連通子圖,k的值根據(jù)數(shù)據(jù)庫的大小以及搜索得到的所有連通子圖個數(shù)來確定; 6)將所述步驟5)中選擇的k個連通圖按照排序,依次根據(jù)如下規(guī)則轉(zhuǎn)換成SQL語句:將SQL語句中的Select子句以*填充,用以表示將所有的列全部返回,將連通圖中的類結(jié)點寫入到SQL語句中的From子句中,將連接兩個類結(jié)點的邊轉(zhuǎn)換為外鍵關(guān)系寫入到SQL語句中的Where子句中,將用戶輸入的關(guān)鍵詞根據(jù)其對應(yīng)的關(guān)系表名和列名寫入到SQL語句中的Where字句中; 所述SQL語句生成后,對數(shù)據(jù)庫進行查詢,然后將查詢結(jié)果返回給用戶。
2.根據(jù)權(quán)利要求1所述的基于本體和受限自然語言處理的數(shù)據(jù)庫查詢方法,其特征在于,所述步驟2)中的非關(guān)系型數(shù)據(jù)庫采用MongoDB數(shù)據(jù)庫。
【文檔編號】G06F17/30GK103646032SQ201310556508
【公開日】2014年3月19日 申請日期:2013年11月11日 優(yōu)先權(quán)日:2013年11月11日
【發(fā)明者】漆桂林, 崔榮國, 張慧, 鄧波, 陸彬, 楊成彪 申請人:漆桂林, 崔榮國, 張慧, 鄧波