解析樹節(jié)點的一層子節(jié)點同時添加到解析樹中。所述解析樹節(jié)點的屬性包括 about、map等。map屬性用來描述所述解析樹節(jié)點關(guān)聯(lián)的數(shù)據(jù)庫中的表和字段,通常就是在 所述解析樹節(jié)點的一層子節(jié)點中作為中心詞的分量所關(guān)聯(lián)的表和字段。
[0137] 需要說明的是,由于屬性中擁有與查詢參數(shù)同名的成員,例如nodes,為區(qū)別起見, 將作為屬性的nodes,稱為"nodes屬性",而將作為查詢參數(shù)的nodes,稱為"nodes參數(shù)", 依此類推。
[0138] 如上文所述,一個切詞方案其實就是一個樹的集合,在所述語義解析模塊102對 切詞方案的解析過程中,不斷根據(jù)領(lǐng)域規(guī)則或表達(dá)式規(guī)則來消解切詞方案中的切詞分量, 當(dāng)一個切詞方案中只剩一個切詞分量(即一棵樹)時,說明已完成了對這個切詞方案的語 義解析,如果一個切詞方案擁有不止一個切詞分量,而又無法匹配任何領(lǐng)域規(guī)則或表達(dá)式 規(guī)則,則說明該切詞方案不能被解析。
[0139] 所述語義解析模塊102根據(jù)所述領(lǐng)域規(guī)則及/或表達(dá)式規(guī)則來對切詞方案序列進(jìn) 行解析,這與通常單純基于文法規(guī)則對用戶輸入的自然語言查詢語句的序列進(jìn)行解析的做 法不同,其優(yōu)點一是魯棒性(Robust)較好,避免因為用戶的個人表達(dá)習(xí)慣不同而導(dǎo)致無法 完成語義解析,二是支持左遞歸。
[0140] 在根據(jù)所述的第二規(guī)則對所述的切詞方案進(jìn)行解析時,所述的切詞方案包括切詞 分量。當(dāng)所述的切詞方案中存在連續(xù)的切詞分量匹配所述第二規(guī)則時,并且被匹配規(guī)則的 dsns參數(shù)與已被使用規(guī)則的dsns參數(shù)的交集不為空、該dsns參數(shù)值為列表型、且當(dāng)前用戶 的權(quán)限滿足被匹配規(guī)則的rights參數(shù)要求時,利用所述第二規(guī)則對所述切詞方案中的切 詞分量進(jìn)行消解,包括:
[0141] 新切詞方案創(chuàng)建步驟:將以這些連續(xù)的切詞分量為子節(jié)點創(chuàng)建一個新的切詞分 量,然后以原來的切詞方案為基礎(chǔ),用新的切詞分量替換上述匹配規(guī)則的切詞分量,以構(gòu)成 一個新的切詞方案;及
[0142] 重復(fù)執(zhí)行所述的新切詞方案創(chuàng)建步驟,直至新的切詞方案不再有切詞分量組成的 片段匹配所述第二規(guī)則或新的切詞方案中只剩一個切詞分量。
[0143] 如果新的切詞方案中只剩一個切詞分量,表示解析完成,切詞方案中剩余的切詞 分量作為所生成的解析樹的根節(jié)點。
[0144] 所述語義解析模塊102不斷對所有切詞方案重復(fù)這個過程,直到不再有切詞方案 發(fā)生規(guī)則匹配為止,這時只有一個切詞分量的切詞方案中的切詞分量就是解析樹。
[0145] 將匹配特定規(guī)則的切詞分量合并為一個新的切詞分量之后,還要執(zhí)行中心詞判定 和領(lǐng)域規(guī)則或表達(dá)式規(guī)則的右部以初始化這個新建切詞分量的根節(jié)點屬性,以便后續(xù)為解 析樹的節(jié)點生成查詢參數(shù)。
[0146] 所述的查詢分析模塊103根據(jù)所述解析樹的根節(jié)點生成局部查詢參數(shù),根據(jù)所述 解析樹第一層子節(jié)點生成全局查詢參數(shù),及代入所述解析樹第一層子節(jié)點的全局查詢參數(shù) 并得到所述解析樹的根節(jié)點的全局查詢參數(shù)。在本實施方式中,在確定了根節(jié)點的全局查 詢參數(shù)后,即可生成語義完整的結(jié)構(gòu)化查詢語句。
[0147] 解析樹中每個節(jié)點的查詢參數(shù)包括全局查詢參數(shù)及/或局部查詢參數(shù)。
[0148] 根據(jù)所述解析樹的各個節(jié)點,可以為每個嵌套子節(jié)點生成局部查詢參數(shù),把一個 節(jié)點的所有第一層子節(jié)點的全局查詢參數(shù)代入該節(jié)點的局部查詢參數(shù),就可以得到該節(jié)點 的全局查詢參數(shù)。所述嵌套子節(jié)點,是指本身作為另外一個節(jié)點的第一層子節(jié)點,同時又擁 有子節(jié)點的解析樹節(jié)點。例如,對于解析樹中的節(jié)點Node,將節(jié)點Node的所有第一層子節(jié) 點的全局查詢參數(shù)代入節(jié)點Node的局部查詢參數(shù)之后,就可以得到節(jié)點Node的全局查詢 參數(shù)。
[0149] 如果一個節(jié)點是非嵌套子節(jié)點,則該節(jié)點的局部查詢參數(shù)就是全局查詢參數(shù)。所 述非嵌套子節(jié)點,是指其第一層子節(jié)點中不包含嵌套子節(jié)點的解析樹節(jié)點。
[0150] 針對上文所述的全局查詢參數(shù)與局部查詢參數(shù),舉例說明如下:假設(shè)節(jié)點Node的 第一層子節(jié)點中存在嵌套子節(jié)點Child,則子節(jié)點Child也應(yīng)有自己的查詢參數(shù),子節(jié)點 Child的查詢參數(shù)就是節(jié)點Node的子查詢參數(shù),反過來,節(jié)點Node的查詢參數(shù)就是子節(jié)點 Child的父查詢參數(shù)。因此,將節(jié)點Node的第一層子節(jié)點的全局查詢參數(shù)代入節(jié)點Node的 局部查詢參數(shù),也可以認(rèn)為是將節(jié)點Node的子查詢參數(shù)代入節(jié)點Node的查詢參數(shù),或進(jìn)一 步簡稱為將子查詢參數(shù)代入父查詢參數(shù)。
[0151] 所述的全局查詢參數(shù)或局部查詢參數(shù)的結(jié)構(gòu)相同,均可由heads、outputs、nodes、 links、constraints、conditions、groups 和 orders 等列表屬性組成,其中:heads 屬性用 于生成SELECT子句;outputs屬性用于生成SELECT子句;nodes屬性用于生成FROM子句; links屬性用于生成WHERE子句;constraints屬性用于生成WHERE子句;conditions屬性 用于生成WHERE子句;groups屬性用于生成GROUP BY子句;及orders屬性用于生成ORDER BY子句。
[0152] 所述的查詢語句生成模塊104根據(jù)所述解析樹的根節(jié)點的全局查詢參數(shù)生成語 義完整的結(jié)構(gòu)化查詢語句。在本實施方式中,所述結(jié)構(gòu)化查詢語句可以是SQL(結(jié)構(gòu)化查 詢語言,Structured Query Language)語句、SPARQL(Simple Protocol and RDF Query Language,是為RDF開發(fā)的一種查詢語言和數(shù)據(jù)獲取協(xié)議)語句,或是其他類型的SQL語 句。
[0153] 所述的查詢語句生成模塊104根據(jù)結(jié)構(gòu)化查詢語句的參數(shù)特征,將解析樹的根節(jié) 點的全局查詢參數(shù)轉(zhuǎn)換為結(jié)構(gòu)化查詢語句的參數(shù)(可參考下文提供的三個實施例),從而 得到所述結(jié)構(gòu)化查詢語句。
[0154] 此外,在其他實施方式中,所述的結(jié)構(gòu)化查詢語句生成系統(tǒng)10進(jìn)一步包括數(shù)據(jù)導(dǎo) 入模塊105、數(shù)據(jù)管理模塊106以及索引建立模塊107。
[0155] 所述的數(shù)據(jù)導(dǎo)入模塊105導(dǎo)入各類關(guān)系模型和關(guān)系數(shù)據(jù)以生成上文所述各類詞 典及第一、第二規(guī)則(例如,所述領(lǐng)域詞典、所述領(lǐng)域規(guī)則、所述列名詞典等)的元數(shù)據(jù) (Metadata),并完成對所述領(lǐng)域規(guī)則、表達(dá)式規(guī)則、中心詞判定規(guī)則等的設(shè)置。
[0156] 所述元數(shù)據(jù)是描述數(shù)據(jù)的數(shù)據(jù)(data about data),主要是描述數(shù)據(jù)屬性 (property)的信息,包括指示儲存位置、歷史資料、資源尋找、文件記錄等功能。此外,在所 述元數(shù)據(jù)中,有部分內(nèi)容需進(jìn)行編輯或設(shè)置,例如所述領(lǐng)域詞典中關(guān)聯(lián)類型為obj、prop的 詞條等。
[0157] 例如,針對領(lǐng)域詞典的數(shù)據(jù)導(dǎo)入,所述的數(shù)據(jù)導(dǎo)入模塊105讀入關(guān)系模型和關(guān)系 數(shù)據(jù),生成并編輯領(lǐng)域詞典,包括:對表名、字段、字符型字段值分別進(jìn)行處理。具體而言,包 括如下步驟:
[0158] (1)按照相關(guān)領(lǐng)域的日常表達(dá)習(xí)慣為目標(biāo)數(shù)據(jù)庫中的表創(chuàng)建對應(yīng)的詞條,所述詞 條的nodes參數(shù)應(yīng)被初始化為表名,type屬性被初始化為"obj ",其余字段為空,術(shù)語部分 可進(jìn)行人工輸入或者將現(xiàn)有數(shù)據(jù)進(jìn)行導(dǎo)入;
[0159] (2)按照相關(guān)領(lǐng)域的日常表達(dá)習(xí)慣為目標(biāo)數(shù)據(jù)庫中的字段創(chuàng)建對應(yīng)的詞條,所述 詞條的map參數(shù)和nodes參數(shù)應(yīng)被初始化為相應(yīng)的復(fù)合字段名和表名,type屬性被初始化 為"prop",其余字段為空,術(shù)語部分可進(jìn)行人工輸入或者將現(xiàn)有數(shù)據(jù)進(jìn)行導(dǎo)入;及
[0160] (3)按照相關(guān)領(lǐng)域的日常表達(dá)習(xí)慣為目標(biāo)數(shù)據(jù)庫中的字符型字段值創(chuàng)建對應(yīng)的詞 條,所述詞條的術(shù)語可被初始化為該字段值或含義相同的文字表達(dá),map參數(shù)應(yīng)被初始化為 相應(yīng)復(fù)合字段名,type屬性被初始化為"val"。
[0161] 又如,針對所述領(lǐng)域規(guī)則的生成和編輯,若所述關(guān)系模型中包括N個表,則所述的 數(shù)據(jù)導(dǎo)入模塊105可生成NXN個關(guān)系二元組,然后,為每個關(guān)系二元組添加謂詞關(guān)系和相 應(yīng)的關(guān)系參數(shù)。該謂詞關(guān)系和相應(yīng)的關(guān)系參數(shù)可由用戶直接編輯或者導(dǎo)入已有數(shù)據(jù)。
[0162] 又如,針對所述列名詞典的詞條的生成和編輯,所述的數(shù)據(jù)導(dǎo)入模塊105可為每 個列生成列名詞典詞條,以表名、字段名為入口,創(chuàng)建一個新的入口,然后由用戶填充每個 入口的alias屬性和defaultUnit屬性(該defaultUnit屬性表示這個字段的內(nèi)部存儲單 位)。如果當(dāng)前字段沒有單位,則該defaultUnit屬性為空。
[0163] 在元數(shù)據(jù)準(zhǔn)備階段,這種由系統(tǒng)自動生成腳本框架,在自動導(dǎo)入的基礎(chǔ)上再由人 工做必要的填充的做法是很有優(yōu)勢的,可以大大節(jié)省時間、減少錯漏幾率。除了上述元數(shù)據(jù) 的準(zhǔn)備之外,為了使本發(fā)明提供的系統(tǒng)能夠順利工作,還需要導(dǎo)入公共詞典、表達(dá)式規(guī)則、 單位轉(zhuǎn)換系數(shù)表等(導(dǎo)入方式可參考上述舉例說明)。
[0164] 所述的數(shù)據(jù)管理模塊106對圖3所示流程中的步驟S4和S6中涉及的各類詞典及 第一、第二規(guī)則進(jìn)行管理,包括對所述領(lǐng)域詞典、公共詞典、列名詞典、命名實體識別規(guī)則、 領(lǐng)域規(guī)則、表達(dá)式規(guī)則、中心詞判定規(guī)則等實現(xiàn)瀏覽、查找、編輯、導(dǎo)出、檢索、匹配等功能。
[0165] 所述的數(shù)據(jù)管理模塊106可讀入各種配置文件,發(fā)現(xiàn)并匯報配置文件中存在的語 法錯誤,并直接生成相應(yīng)的索引,還可根據(jù)索引重新導(dǎo)出各種配置文件。所述配置文件包 括領(lǐng)域詞典定義文件、公共詞典定義文件、命名實體規(guī)則定義文件、領(lǐng)域規(guī)則定義文件、列 名詞典定義文件、表達(dá)式規(guī)則定義文件、單位轉(zhuǎn)換系數(shù)定義文件、中心詞判定規(guī)則定義文件 等。
[0166] 所述的數(shù)據(jù)管理模塊106在利用不同的索引對各類詞典或規(guī)則進(jìn)行檢索時可實 現(xiàn)模糊匹配功能。例如,允許以代替任意個字符,用"?"代替一個字符,從而滿足特殊 檢索需求。
[0167] 所述的數(shù)據(jù)管理模塊106支持相似匹配功能。例如,假設(shè)領(lǐng)域詞典中存在以"每股 未分配利潤"為術(shù)語的詞條,并且相似匹配的閥值設(shè)置為0. 8,如果輸入"每股未分利潤",因 為輸入與"每股未分配利潤"之間的相似度達(dá)0.923,仍可以得到"每股未分配利潤"作為相 似匹配的結(jié)果。這個特點可以提高對用戶不同輸入習(xí)慣的適應(yīng)性,尤其是適應(yīng)不同的縮略 習(xí)慣,可基于編輯距離或基于頻譜特征實現(xiàn)所述相似匹配的計算。
[0168] 所述的索引建立模塊107對上文所述的各類詞典及第一、第二規(guī)則建立相對應(yīng)的 索引(例如領(lǐng)域詞典索引、領(lǐng)域規(guī)則索引、公共詞典索引等),以便于所述數(shù)據(jù)管理模塊106 可快速根據(jù)索引查找到相對應(yīng)的數(shù)據(jù)。
[0169] 此外,針對表達(dá)式規(guī)則,所述的數(shù)據(jù)管理模塊106可進(jìn)一步訪問預(yù)先存儲的單位 轉(zhuǎn)換系數(shù)表,提供對單位轉(zhuǎn)換系數(shù)的瀏覽、查找、編輯、導(dǎo)入、導(dǎo)出、以及檢索功能,并計算相 應(yīng)的轉(zhuǎn)換系數(shù)。例如,所述的數(shù)據(jù)管理模塊106可輸入源單位查詢對應(yīng)的所有目標(biāo)單位,根 據(jù)用戶輸入的源單位快速查詢到所有以用戶輸入為源單位的目標(biāo)單位及其單位轉(zhuǎn)換系數(shù), 還可輸入目標(biāo)單位查詢對應(yīng)的所有源單位,根據(jù)用戶輸入的目標(biāo)單位快速查詢到所有以用 戶輸入為目標(biāo)單位的源單位及其單位轉(zhuǎn)換系數(shù)。
[0170] 如圖3所示,是本發(fā)明結(jié)構(gòu)化查詢語句生成方法的較佳實施方式的流程圖。首先, 步驟S2,所述的輸入處理模塊100獲取用戶通過手工或語音輸入的自然語言