張永威,張 巖,唐新余,王 蒙
1.中國科學(xué)院 新疆理化技術(shù)研究所,烏魯木齊 830011
2.中國科學(xué)院大學(xué),北京 100049
3.中國科學(xué)院 新疆民族語音語言信息處理重點(diǎn)實(shí)驗(yàn)室,烏魯木齊 830011
4.江蘇中科西北星信息科技有限公司,江蘇 無錫 214135
近年來,知識(shí)圖譜作為一種高效的數(shù)據(jù)組織方式,在各行各業(yè)的眾多任務(wù)中都得到了廣泛的應(yīng)用。知識(shí)圖譜本質(zhì)上是一種大規(guī)模語義網(wǎng)絡(luò),即一種用互聯(lián)節(jié)點(diǎn)和弧表示知識(shí)的一個(gè)結(jié)構(gòu)[1]。知識(shí)圖譜中的節(jié)點(diǎn)可以代表概念、屬性、事件或者實(shí)體;弧表示節(jié)點(diǎn)之間的關(guān)系[2]。知識(shí)圖譜以結(jié)構(gòu)化三元組的形式存儲(chǔ)現(xiàn)實(shí)世界中的實(shí)體以及實(shí)體之間的關(guān)系,表示為G=(E,R,S),其中E表示實(shí)體集合,R表示關(guān)系集合,S表示知識(shí)圖譜中三元組的集合[3]。RDF(resource description framework)作為一種現(xiàn)實(shí)世界中資源及資源關(guān)系的描述框架和數(shù)據(jù)模型,是知識(shí)圖譜中非常重要的一種知識(shí)表示方式[4],在知識(shí)圖譜的構(gòu)建和應(yīng)用被廣泛使用。
知識(shí)圖譜按照領(lǐng)域劃分,一般可分為通用知識(shí)圖譜和行業(yè)領(lǐng)域知識(shí)圖譜。通用知識(shí)圖譜包含了大量現(xiàn)實(shí)世界中的常識(shí)性知識(shí),涵蓋范圍廣、規(guī)模巨大,如FreeBase[5]、Yago[6]、DBpedia[7],已經(jīng)被廣泛應(yīng)用于信息搜索、自動(dòng)問答等場景。行業(yè)領(lǐng)域知識(shí)圖譜又稱為垂直知識(shí)圖譜,面向特定的領(lǐng)域,如面向電影領(lǐng)域的IMDB[8]、生物醫(yī)學(xué)領(lǐng)域的DrugBank[9]、學(xué)術(shù)領(lǐng)域的Acemap[10]等、一般由各領(lǐng)域中的企業(yè)進(jìn)行構(gòu)建[11]。在行業(yè)領(lǐng)域中,關(guān)系數(shù)據(jù)庫由于其模型簡單、關(guān)系理論完備、接口易用等特點(diǎn),已經(jīng)成為各行業(yè)中廣泛使用的數(shù)據(jù)存儲(chǔ)和管理方案。因此結(jié)合本體模型從結(jié)構(gòu)化的關(guān)系型數(shù)據(jù)中進(jìn)行知識(shí)抽取并轉(zhuǎn)換成RDF三元組是構(gòu)建行業(yè)知識(shí)圖譜的關(guān)鍵步驟。
目前把關(guān)系型數(shù)據(jù)轉(zhuǎn)換成RDF數(shù)據(jù)常用的方案是使 用W3C 推出 的DM[12(]direct mapping)和R2RML[13](RDB to RDF mapping language),手工編輯從關(guān)系數(shù)據(jù)到RDF 數(shù)據(jù)的映射,再由轉(zhuǎn)換工具執(zhí)行映射完成數(shù)據(jù)轉(zhuǎn)換[14]。另外也有部分映射工具采用私有的RDB2RDF(relational database to RDF)映射語言實(shí)現(xiàn)關(guān)系數(shù)據(jù)到RDF數(shù)據(jù)的映射和轉(zhuǎn)換。目前的方案不僅需要掌握和使用各種映射語言和映射工具,還要對本體模型定義的知識(shí)體系結(jié)構(gòu)和領(lǐng)域中的業(yè)務(wù)數(shù)據(jù)庫的模式結(jié)構(gòu)非常熟悉。另外領(lǐng)域知識(shí)圖譜雖然沒有通用知識(shí)圖譜的覆蓋范圍廣,但是也具有相當(dāng)規(guī)模的數(shù)據(jù)量。在進(jìn)行知識(shí)抽取和數(shù)據(jù)轉(zhuǎn)換時(shí),需要根據(jù)本體模型和關(guān)系數(shù)據(jù)進(jìn)行大量的查詢語句和映射的編輯和維護(hù)工作,不僅費(fèi)時(shí)費(fèi)力而且還容易出錯(cuò)。本文提出一套直接由關(guān)系數(shù)據(jù)根據(jù)本體模型進(jìn)行抽取轉(zhuǎn)換成RDF 的框架,簡化了映射編輯和維護(hù)等工作,提供了更簡單易用的關(guān)系型數(shù)據(jù)的知識(shí)抽取和數(shù)據(jù)轉(zhuǎn)換的解決方案。
目前對關(guān)系型數(shù)據(jù)進(jìn)行知識(shí)抽取并轉(zhuǎn)換成RDF數(shù)據(jù)的方案一般是先編寫從關(guān)系型數(shù)據(jù)到RDF數(shù)據(jù)的映射,然后借助的RDB2RDF工具執(zhí)行映射完成數(shù)據(jù)抽取和轉(zhuǎn)換。在關(guān)系數(shù)據(jù)與RDF 數(shù)據(jù)的映射方面,W3C 制定了兩種從關(guān)系數(shù)據(jù)到RDF 數(shù)據(jù)的映射語言,DM 和R2RML。Direct mapping 定義了從關(guān)系數(shù)據(jù)庫到RDF三元組的簡單變換,這種變換把關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)模式和結(jié)構(gòu)直接反映在RDF圖中[12]。Direct mapping將關(guān)系數(shù)據(jù)庫直接映射為RDF 圖,只是對原有關(guān)系數(shù)據(jù)直接轉(zhuǎn)換[15],無法根據(jù)自定義的本體模型對數(shù)據(jù)進(jìn)行抽取和組織后轉(zhuǎn)換成RDF三元組。
為了支持自定義的本體概念模型和詞匯,W3C 推出了R2RML 映射語言,其映射本身就是Turtle 形式的RDF圖[13]。每一個(gè)R2RML映射都對應(yīng)一個(gè)數(shù)據(jù)庫模式和目標(biāo)詞匯。R2RML映射的輸入是符合該模式的關(guān)系數(shù)據(jù),輸出是使用目標(biāo)詞匯中的謂詞和類型的RDF 數(shù)據(jù)。使用R2RML 可以在關(guān)系數(shù)據(jù)庫上自定義視圖,一個(gè)R2RML 映射文檔里包含多個(gè)R2RML 映射,每個(gè)映射都需要配置數(shù)據(jù)檢索的邏輯表。邏輯表可以是關(guān)系數(shù)據(jù)庫中的一個(gè)基礎(chǔ)表或一個(gè)視圖,也可以是對關(guān)系數(shù)據(jù)庫的一個(gè)有效的SQL 查詢。每個(gè)邏輯表都使用三元組映射表映射到RDF,三元組映射中需要配置將邏輯表中每一行映射到多個(gè)RDF三元組的規(guī)則。該規(guī)則由主語映射和謂詞-賓語映射兩部分組成。通過將主語應(yīng)和謂詞-賓語映射組合,應(yīng)用于每個(gè)邏輯表行實(shí)現(xiàn)關(guān)系數(shù)據(jù)到RDF數(shù)據(jù)的轉(zhuǎn)換。R2RML映射需要根據(jù)自定義的詞匯和關(guān)系數(shù)據(jù)庫手動(dòng)編輯大量的映射規(guī)則,包括本體模型中的類與表或邏輯視圖的對應(yīng)、屬性與字段的對應(yīng)、數(shù)據(jù)類型等。也需要基于本體模型和關(guān)系數(shù)據(jù)庫編寫SQL 語句對數(shù)據(jù)進(jìn)行抽取和組織。因此R2RML 語句編碼的工作量和R2RML 映射的創(chuàng)建和維護(hù)是使用R2RML的主要障礙。
在映射執(zhí)行工具方面,D2RQ[16]是出現(xiàn)在DM 和R2RML 之前的RDB2RDF 開源工具平臺(tái)。它包括D2R Server 和一種私有的RDB2RDF 映射語言D2Rq。D2RQ 在2012 年發(fā)布的版本開始支持direct mapping,但是不支持R2RML[17]。Virtuoso[18]利用自有的“元數(shù)據(jù)方案映射語言”,來實(shí)現(xiàn)RDB 數(shù)據(jù)與RDF 數(shù)據(jù)的映射,生成關(guān)聯(lián)數(shù)據(jù)視圖(linked data views),得到RDF 數(shù)據(jù),這種功能與R2RML 類似,是R2RML 誕生之前私有映射語言的一種[19]。W3C 推出R2RML 后,Virtuoso 也通過R2RML VAD插件的方式通過將R2RML轉(zhuǎn)化成它自己的關(guān)聯(lián)數(shù)據(jù)視圖的語法來實(shí)現(xiàn)對R2RML 的支持。Ontop[20]依賴于R2RML映射實(shí)現(xiàn),通過將SPARQL查詢轉(zhuǎn)換為有關(guān)系數(shù)據(jù)源執(zhí)行的SQL 查詢。Ontop 可以提供一個(gè)基于關(guān)系數(shù)據(jù)的虛擬知識(shí)圖譜系統(tǒng),以虛擬的RDF 圖的形式訪問關(guān)系數(shù)據(jù)庫中的內(nèi)容。此外Ontop也可以基于R2RML映射把關(guān)系數(shù)據(jù)轉(zhuǎn)換成RDF數(shù)據(jù)。
現(xiàn)有的工作除了提供不同的映射工具和映射語言外,還有一些工作集中在提高R2RML 映射語言的編輯效率上。文獻(xiàn)[21]提出了一種快速編輯R2RML映射的編輯器,目的在于提高手工編輯映射時(shí)的效率,但是仍然需要專業(yè)人員大量參與。文獻(xiàn)[22]和[23]提出了根據(jù)關(guān)系數(shù)據(jù)生成R2RML 映射的方法,但還是需要后續(xù)對映射進(jìn)行維護(hù),沒有很好地解決從關(guān)系數(shù)據(jù)中進(jìn)行知識(shí)抽取生成RDF數(shù)據(jù)的問題。
針對這些問題本文提出了一種直接根據(jù)本體模型和關(guān)系數(shù)據(jù)庫進(jìn)行知識(shí)抽取并轉(zhuǎn)換成RDF 數(shù)據(jù)的框架,省去了R2RML映射的編輯、執(zhí)行和維護(hù)等工作。直接以可視化的方式指定關(guān)系數(shù)據(jù)和本體模型的對應(yīng)關(guān)系,根據(jù)選取的字段自動(dòng)生成SQL語句,在數(shù)據(jù)庫中進(jìn)行查詢并取出相應(yīng)的數(shù)據(jù)后,根據(jù)對應(yīng)關(guān)系,把關(guān)系數(shù)據(jù)自動(dòng)轉(zhuǎn)換成RDF 三元組。與之前的方法相比,本文提出的框架不需要大量的映射編輯和維護(hù)工作,可以對本體模型和關(guān)系數(shù)據(jù)庫進(jìn)行解析,并自動(dòng)生成本體模型和數(shù)據(jù)庫之間的候選映射,提供了更加自動(dòng)化的解決方案?;诒疚牡目蚣軐?shí)現(xiàn)的知識(shí)抽取系統(tǒng),能夠方便地根據(jù)本體模型的目標(biāo)詞匯快速地生成RDF 三元組,完成關(guān)系型數(shù)據(jù)的知識(shí)抽取和數(shù)據(jù)轉(zhuǎn)換。
本章提出一套根據(jù)自定義本體模型對關(guān)系數(shù)據(jù)進(jìn)行抽取并轉(zhuǎn)換成RDF數(shù)據(jù)的框架。如圖1所示,首先對本體模型進(jìn)行解析,解析出本體知識(shí)體系中的類別屬性等詞匯。接著對關(guān)系數(shù)據(jù)庫的模式結(jié)構(gòu)進(jìn)行解析,獲取其表、字段、主外鍵等信息。解析完成后以可視化的方式把本體模型和數(shù)據(jù)庫的解析結(jié)果展示出來。然后根據(jù)數(shù)據(jù)庫的解析結(jié)果生成中間本體,并且根據(jù)語言學(xué)特征和結(jié)構(gòu)特征計(jì)算中間本體和自定義本體中概念和屬性的相似度,借助中間本體自動(dòng)獲取數(shù)據(jù)庫和自定義本體的映射關(guān)系。最后根據(jù)每個(gè)類的屬性和映射關(guān)系,生成單表或多表查詢的SQL語句,在數(shù)據(jù)庫中進(jìn)行查詢并取出相應(yīng)的數(shù)據(jù)后,根據(jù)對應(yīng)關(guān)系,自動(dòng)轉(zhuǎn)換成RDF三元組。
圖1 關(guān)系數(shù)據(jù)知識(shí)抽取框架Fig.1 Relational data knowledge extraction framework
關(guān)系數(shù)據(jù)知識(shí)抽取和數(shù)據(jù)轉(zhuǎn)換框架的具體描述如下:
(1)設(shè)置數(shù)據(jù)源DS 和本體源文件ontology,并進(jìn)行解析。
table∈DS,column∈table
(class,data property,object property)∈ontology
(2)可視化解析結(jié)果,創(chuàng)建中間本體,自動(dòng)生成關(guān)系數(shù)據(jù)和自定義本體模型之間的候選映射關(guān)系automaps。
automaps={(c1,c2,max_sim)}
其中c1 ∈ontology;c2 ∈DS,分別表示本體和數(shù)據(jù)中的概念,max_sim表示兩個(gè)概念之間的最大相似度。
(3)修正automap,并自動(dòng)生成SQL 語句,并獲取的數(shù)據(jù)data。
sql=generate_sq(lautomap)
data=get_data(DS,sql)
(4)RDF三元組前綴prefix url和主語模板template的設(shè)置。
template={column1}@{column2}
(5)主語(subject)構(gòu)建。
subject=prefix url+value(column1)@value(column2)
根據(jù)mapping的(logic table:class)構(gòu)建出主語類型的三元組triple=(subject,rdf:type,class)
(6)謂詞(predicate)構(gòu)建
數(shù)據(jù)屬性謂詞構(gòu)建:
predicate=prefix url+data property
對象屬性謂詞構(gòu)建:
predicate=prefix url+object property其中data property,object property∈ontology。
(7)賓語(object)構(gòu)建:
賓語是數(shù)據(jù)屬性值時(shí):
get data type ∈{int,string,date,…}
value(data property)=value(column),其中(column:property)∈mapping
根據(jù)mapping構(gòu)建三元組:
triple=(subject,predicate,value(data property))
賓語是對象屬性值時(shí):
get data type ∈class
object property=prefix+template
由于對象屬性也是實(shí)體所以構(gòu)建對象屬性類型三元組:
triple=(object property,rdf:type,class)
構(gòu)建主語的對象屬性三元組:
triple=(subject,predicate,object property)
以下是根據(jù)框架描述進(jìn)行的具體實(shí)現(xiàn)。
本體模型的設(shè)計(jì)定義了知識(shí)的類別體系,每個(gè)類別下所屬的概念和實(shí)體,某類概念和實(shí)體所具有的屬性,以及概念之間,實(shí)體之間的語義關(guān)系。同時(shí)也包含定義在這個(gè)本體上的一些推理規(guī)則。根據(jù)本體模型中的知識(shí)體系把關(guān)系型數(shù)據(jù)轉(zhuǎn)換成RDF 數(shù)據(jù),即使用本體模型中自定義的詞匯和關(guān)系等,把數(shù)據(jù)歸屬到本體模型定義的知識(shí)框架下。因此首先需要對本體模型解析,獲取其類別屬性等詞匯。本文使用Jena[24]對本體模型進(jìn)行解析,Jena 是惠普實(shí)驗(yàn)室語義Web 研究項(xiàng)目的開放資源,是用于創(chuàng)建語義Web 應(yīng)用系統(tǒng)的Java 框架結(jié)構(gòu),它為RDF、RDFS、OWL 提供了一個(gè)程序開發(fā)環(huán)境。另外為了方便建模和展示,使用經(jīng)典建模工具Protégé[25]進(jìn)行本體模型的構(gòu)建。Protégé提供了本體概念類、關(guān)系、屬性和實(shí)例的構(gòu)建,并且屏蔽了具體的本體描述語言,用戶只需在概念層次上進(jìn)行領(lǐng)域本體模型的構(gòu)建。Protégé 可從http://protege.standford.end/下載,具體用法可參考文獻(xiàn)[26]。
本文主要使用Jena 的Ontology 子系統(tǒng)和RDF 子系統(tǒng)。對于一個(gè)本體模型首先獲取本體模型中所有的類,然后再對每一個(gè)類進(jìn)行解析。解析出當(dāng)前類與其他類的關(guān)系。之后,對每個(gè)類的屬性進(jìn)行解析。對于類的數(shù)據(jù)屬性(data property),獲取到其屬性名及其定義域和值域。對于類的對象屬性(object property),由于其在本體模型中表示概念類之間的關(guān)系,其值域和定義域都是類或資源實(shí)體(resource)。所以在解析到其屬性名后,還要獲取對象屬性與其定義域類和值域類的關(guān)系。
在完成解析后,把本體模型中的所有的類,對象屬性和數(shù)據(jù)屬性都當(dāng)作節(jié)點(diǎn),按照對象屬性和數(shù)據(jù)屬性的值域和定義域把屬性節(jié)點(diǎn)和類節(jié)點(diǎn)連接起來。如圖2(c)所示,形成一個(gè)可以表示本體模型結(jié)構(gòu)的圖。不同于Protégé[25]建模工具中對本體模型的展示,如圖2(a)和(b)所示Protégé中把概念類作為節(jié)點(diǎn),屬性作為邊把本體模型展示出來。本文對本體模型的可視化展示方式,除了能表示出概念類之間的關(guān)系,還展示了概念類與屬性的所屬關(guān)系。更方便在設(shè)置關(guān)系數(shù)據(jù)和本體模型的對應(yīng)關(guān)系時(shí)對類和屬性等相關(guān)概念進(jìn)行選擇。
圖2 解析結(jié)果展示圖Fig.2 Parse result display diagram
關(guān)系型數(shù)據(jù)的知識(shí)抽取需要根據(jù)本體模型定義的知識(shí)框架,在數(shù)據(jù)庫中選取字段數(shù)據(jù)轉(zhuǎn)換成(subject,predicate,object)三元組。因此在對數(shù)據(jù)進(jìn)行知識(shí)抽取并轉(zhuǎn)換成RDF 之前,需要解析出整個(gè)關(guān)系數(shù)據(jù)庫的模式結(jié)構(gòu)。包括數(shù)據(jù)庫中所有的表、每個(gè)表的表結(jié)構(gòu)、表中所含有的字段、字段的數(shù)據(jù)類型、字段之間的關(guān)系、表的主外鍵和引用關(guān)系等。
本文使用DataBaseMetaData 接口獲取關(guān)系數(shù)據(jù)庫的元數(shù)據(jù),解析出整個(gè)數(shù)據(jù)庫中所有的表、字段、字段的數(shù)據(jù)類型和主外鍵、引用關(guān)系等信息。此外,為了在知識(shí)抽取對整個(gè)數(shù)據(jù)庫的模式結(jié)構(gòu)有更加直觀的認(rèn)識(shí),更方便選擇數(shù)據(jù)字段和本體詞匯的對應(yīng)關(guān)系。對數(shù)據(jù)庫進(jìn)行解析后,以可視化的方式對數(shù)據(jù)庫的模式結(jié)構(gòu)進(jìn)行展示。
如圖2(d),把數(shù)據(jù)庫中每一個(gè)表和每一個(gè)字段都當(dāng)作節(jié)點(diǎn),連接節(jié)點(diǎn)的邊表示字段節(jié)點(diǎn)和表節(jié)點(diǎn)的所屬關(guān)系。其中外鍵節(jié)點(diǎn),同時(shí)連接引用表和被引用表,表示表之間的引用關(guān)系。
2.3.1 本體模型到關(guān)系數(shù)據(jù)的自動(dòng)映射
完成本體模型和數(shù)據(jù)庫模式結(jié)構(gòu)的解析之后,接下來要建立從關(guān)系數(shù)據(jù)到本體映射,即關(guān)系數(shù)據(jù)中的表和字段與本體模型中類和屬性之間的對應(yīng)關(guān)系。盡管本文提供了可視化選擇對應(yīng)關(guān)系的方式替換了傳統(tǒng)映射語句的編輯。但是為了進(jìn)一步提高框架的自動(dòng)化程度,設(shè)計(jì)了一種根據(jù)關(guān)系數(shù)據(jù)庫和自定義本體模型自動(dòng)生成候選映射的方法。
如圖3 所示,首先獲取數(shù)據(jù)庫模式的解析結(jié)果,利用解析后的表和字段自動(dòng)建立一個(gè)和數(shù)據(jù)庫一一對應(yīng)的中間本體模型。然后對中間本體和自定義本體進(jìn)行匹配和對齊,基于語言學(xué)信息和結(jié)構(gòu)信息計(jì)算兩個(gè)本體之間各種概念的相似度,并根據(jù)相似度獲取候選映射關(guān)系。由于中間本體中的概念和數(shù)據(jù)庫模式中的元素是一一對應(yīng)的,所以自定義本體和中間本體的對應(yīng)關(guān)系,也即自定義本體和數(shù)據(jù)庫之間的對應(yīng)關(guān)系。
圖3 自動(dòng)建立對應(yīng)關(guān)系的流程圖Fig.3 Automatically establishing corresponding relationship
1)自動(dòng)創(chuàng)建中間本體
基于數(shù)據(jù)庫模式結(jié)構(gòu)的解析結(jié)果,采用如表1所示規(guī)則建立一個(gè)中間本體。
表1 數(shù)據(jù)庫與中間本體對應(yīng)規(guī)則Table 1 Correspondence between database and middle ontology
采用以上方式,保證中間本體的詞匯表和術(shù)語名稱與關(guān)系數(shù)據(jù)庫中的表名和字段名保持一致,這樣就得到了一個(gè)和數(shù)據(jù)庫一一對應(yīng)的中間本體模型。在中間本體中,數(shù)據(jù)庫中的表是本體中的類,表中的字段是類的數(shù)據(jù)屬性和對象屬性,字段所屬的表及字段的數(shù)據(jù)類型是屬性的值域和定義域。
接下來用中間本體和根據(jù)數(shù)據(jù)庫自定義的本體進(jìn)行匹配,獲取到兩個(gè)本體中概念的映射關(guān)系。由于中間本體和數(shù)據(jù)庫是一一對應(yīng)的,因此自定義本體和中間本體之間的映射,即自定義本體和數(shù)據(jù)庫之間的映射。
2)本體中類和屬性的相似度計(jì)算
不同于傳統(tǒng)的本體對齊和本體匹配任務(wù)需要考慮大規(guī)模異構(gòu)之間的匹配和對齊關(guān)系。因?yàn)樽远x本體是由建模人員根據(jù)數(shù)據(jù)庫進(jìn)行重新組織篩選而建立的,而中間本體又是整個(gè)數(shù)據(jù)庫在本體模型中的直接反映,包含了數(shù)據(jù)庫中的所有模式。所以自定義本體和中間本體本身就具有一定程度上的相似,這種相似表現(xiàn)在兩個(gè)方面,一是語言特征上,即兩個(gè)本體中概念標(biāo)簽字符和描述的相似。二是表現(xiàn)在本體的結(jié)構(gòu)特征上,在本體模型所表示的RDF 樹上,自定義本體往往是中間本體的子結(jié)構(gòu)。因此基于這兩個(gè)特性來計(jì)算自定義本體和中間本體里各種概念的相似度,再根據(jù)相似度來確定匹配和映射關(guān)系,最終得到數(shù)據(jù)庫和自定義本體之間的候選映射。
(1)基于語言學(xué)特征
基于語言學(xué)特征采用編輯距離計(jì)算兩個(gè)本體中概念的相似度時(shí),首先自定義本體和中間本體進(jìn)行預(yù)處理,去掉類和屬性的命名空間前綴,只保留類名和屬性名。在計(jì)算相似度之前,基于外部詞典WordNet對本體中的類和屬性進(jìn)行同義詞替換。對于類,替換后基于編輯距離計(jì)算相似度,對于屬性,組合替換后的屬性名和定義域計(jì)算相似度。形式化描述如下:
①對于?class,property∈customer ontology∪middle ontology,獲取其同義詞集合并按字典序排序。
synonym set(word)=WordNet.synset(word)其中synonym set(word)[1]表示取同義詞集合中的第一個(gè)元素。
②對于類的標(biāo)簽,用其同義詞集合里的第一個(gè)元素進(jìn)行替換。
③對于屬性的標(biāo)簽,首先用該屬性的同義詞集合里的第一個(gè)元素對其進(jìn)行替換。然后拼接屬性名,及其值域和定義域得到一個(gè)新的字符串。
④最后基于編輯距離計(jì)算自定義本體和中間本體中各種概念屬性的相似度。
⑤根據(jù)上述計(jì)算結(jié)果獲得兩個(gè)本體中類的相似度矩陣:class similarity matrix,和屬性的相似度矩陣:property similarity matrix。根據(jù)概念和屬性的最大相似度獲取候選映射集合:map{(c1,c2,max_sim)}。
(2)基于結(jié)構(gòu)特征
基于本體的結(jié)構(gòu)特征進(jìn)行概念的相似度計(jì)算時(shí),考慮當(dāng)前概念節(jié)點(diǎn)在本體概念所表示的RDF樹上的父節(jié)點(diǎn),子節(jié)點(diǎn)和兄弟節(jié)點(diǎn)的相似關(guān)系來確定當(dāng)前節(jié)點(diǎn)的相似關(guān)系。另外在中間本體和自定義本體中,具有對應(yīng)關(guān)系的類的子節(jié)點(diǎn)的數(shù)目不一定相同,具有對應(yīng)關(guān)系的屬性的兄弟節(jié)點(diǎn)也不一定相同。因此在中間本體和自定義本體中,取屬性數(shù)目較小的一方作為個(gè)數(shù)依據(jù),同時(shí)從另一個(gè)本體取相同個(gè)數(shù)且相似度高屬性節(jié)點(diǎn)進(jìn)行計(jì)算。
①對于類的結(jié)構(gòu)相似:
其中,c1∈customer ontology,c1.property num表示類c1的屬性節(jié)點(diǎn)個(gè)數(shù),c2∈middle ontology,c2.property num表示類c2的屬性節(jié)點(diǎn)個(gè)數(shù)。
②根據(jù)上一步得到屬性相似度矩陣,計(jì)算類節(jié)點(diǎn)的前k個(gè)相似度最高的屬性。
其中property similarity matrix表示屬性相似度矩陣。
③對于屬性的結(jié)構(gòu)相似:
其中,p1.brother num表示屬性p1 的兄弟節(jié)點(diǎn)個(gè)數(shù),其中p2∈customer ontology,p2.property num表示類c2的屬性節(jié)點(diǎn)個(gè)數(shù),其中p2∈middle ontology。
④根據(jù)屬性相似度矩陣,計(jì)算當(dāng)前節(jié)點(diǎn)的前k個(gè)相似度最高的兄弟節(jié)點(diǎn);根據(jù)類相似度矩陣計(jì)算當(dāng)前節(jié)點(diǎn)的父類相似度。
其中,p1.father表示p1 的父節(jié)點(diǎn),p2.father表示p2的父節(jié)點(diǎn)。
⑤結(jié)合父類和子類計(jì)算最終的相似度。
最后根據(jù)實(shí)驗(yàn)效果,采取如下的方式綜合基于語言特征計(jì)算的相似度sim1和基于結(jié)構(gòu)特征計(jì)算的相似度sim2。
sim=max(sim1,sim2)
2.3.2 三元組的創(chuàng)建
RDF 數(shù)據(jù)表示為(S,P,O)形式的主謂賓三元組,把關(guān)系型數(shù)據(jù)進(jìn)行知識(shí)抽取轉(zhuǎn)換成RDF 數(shù)據(jù)時(shí),要根據(jù)本體模型中定義的詞匯對關(guān)系數(shù)據(jù)中的字段進(jìn)行篩選、抽取、組織成(主語,謂詞,賓語)的形式。
(1)主語
RDF三元組的主語是一個(gè)資源實(shí)體,由一個(gè)統(tǒng)一資源標(biāo)識(shí)符URI(uniform resource identifier)表示。在RDF 中表示主語資源的URI 一般是由命名空間和資源實(shí)體的名稱或一些其他標(biāo)識(shí)組成。比如一門課程實(shí)體的可以表示為:
其中,“http://www.xbstar.com/ontology/pension#”是命名空間,“Java”是課程名,“CS102”是課程代碼,課程名和課程代碼存儲(chǔ)在數(shù)據(jù)庫中。在根據(jù)關(guān)系數(shù)據(jù)創(chuàng)建主語實(shí)體的URI 時(shí),本文采用本體模型中定義的命名空間,命名空間后面的標(biāo)識(shí)符根據(jù)由自定義模板配置進(jìn)行生成,模板是由關(guān)系數(shù)據(jù)庫中的字段和一些字符組成,如表2所示。
表2 主語資源實(shí)體URI配置Table 2 Subject resource entity URI configuration
另外,對于知識(shí)圖譜中的每一個(gè)資源實(shí)體,都要?dú)w屬到本體模型所定義的概念類別下。所以在每個(gè)主語資源實(shí)體的URI生成后,還有根據(jù)本體模型中定義的概念指定其所屬的類別。當(dāng)一個(gè)主語映射完成后會(huì)生成如下的三元組:
S:
P:
O:
(2)謂詞
在RDF 三元組(S,P,O)中,謂詞P表示主語S和賓語O之間的關(guān)系,或者表示主語S具有屬性P且其取值為O。謂詞在知識(shí)圖譜中表示關(guān)系,關(guān)系可以連接兩個(gè)實(shí)體資源,表示兩個(gè)資源之間的關(guān)系。也可以連接實(shí)體資源和數(shù)據(jù)值,表示實(shí)體資源的屬性值。
謂詞在本體模型中進(jìn)行定義,表示為本體模型中概念之間的關(guān)系,當(dāng)使用本體模型規(guī)定的知識(shí)體系填充RDF 數(shù)據(jù)時(shí),謂詞就表示為概念下的實(shí)體之間的關(guān)系。完成主語實(shí)體的創(chuàng)建后,要根據(jù)本體模型中定義的謂詞詞匯,為主語連接資源或數(shù)據(jù)。本文是根據(jù)本體模型解析的結(jié)果,獲取連接類與屬性值的屬性名,然后把謂詞屬性名和屬性值在關(guān)系表中對應(yīng)的字段一一映射起來。
(3)賓語
三元組的賓語可以看作是主語實(shí)體的屬性值,包括數(shù)據(jù)屬性(data property)和對象屬性(object property)兩種類型。其中數(shù)據(jù)屬性表示賓語是一個(gè)數(shù)據(jù)值,表示實(shí)體和數(shù)據(jù)值之間的關(guān)系,對象屬性表示賓語是一個(gè)資源實(shí)體,描述的是兩個(gè)實(shí)體之間的關(guān)系,在進(jìn)行映射時(shí),對象屬性一般是關(guān)系表中的外鍵。
對于數(shù)據(jù)屬性,由于其屬性值也就是(S,P,O)中的賓語是一個(gè)數(shù)值,從數(shù)據(jù)庫中取出對應(yīng)的字段和屬性進(jìn)行映射即可,如:
S:
P:
O:“張三”
對于對象屬性,在(S,P,O)三元組中其主語和賓語都是實(shí)體資源。因此在進(jìn)行對象屬性的映射時(shí),用謂詞把兩個(gè)實(shí)體連接之前,需要先創(chuàng)建賓語實(shí)體,包括生成賓語實(shí)體的URI,并把其歸類的所屬的類別下。
S:
P:
O:
S:
P:
O:
為了定義和保存數(shù)據(jù)庫到本體模型的對應(yīng)關(guān)系,定義了如下的數(shù)據(jù)結(jié)構(gòu)對用戶選擇的映射進(jìn)行存儲(chǔ)。其中對于每一個(gè)類,對應(yīng)關(guān)系是一個(gè)集合,集合中包含映射的元素,每個(gè)元素都有類名、表名、字段名稱和對應(yīng)的謂詞名稱和數(shù)據(jù)類型,字段所屬的表。還包括主語的模板,以及當(dāng)前字段是不是外鍵類型,為每個(gè)外鍵類型定義包含主表名稱、主列的名稱、引用表的名稱、引用列的名稱的數(shù)據(jù)結(jié)構(gòu)。
在確定字段和屬性的對應(yīng)關(guān)系之后,根據(jù)選取的字段和涉及到的表生成SQL語句,并在數(shù)據(jù)庫中獲取相應(yīng)的數(shù)據(jù)。對于同一個(gè)類的屬性,對應(yīng)的字段可能來自同一個(gè)表或來自多個(gè)表。當(dāng)一個(gè)類別的屬性對應(yīng)的字段都屬于同一個(gè)表時(shí),從選擇的對應(yīng)關(guān)系中獲取字段名稱和其所屬的表,組合成SQL語句,在數(shù)據(jù)庫中進(jìn)行查詢獲得相應(yīng)的數(shù)據(jù)即可。
當(dāng)一個(gè)類的屬性對應(yīng)多個(gè)表的字段時(shí),選擇的字段關(guān)系會(huì)涉及多個(gè)表,一般在數(shù)據(jù)庫中進(jìn)行連接查詢或者需要多個(gè)連接條件才能獲取查詢結(jié)果。這種情況下根據(jù)選取的字段生成的SQL語句,需要獲取連接查詢中所有的連接條件。本文采用的方法是根據(jù)關(guān)系數(shù)據(jù)庫解析的結(jié)果,把表和字段當(dāng)作節(jié)點(diǎn),字段和表的所屬關(guān)系當(dāng)作邊,外鍵字段引用關(guān)系連接兩個(gè)表節(jié)點(diǎn),由此生成一個(gè)無向圖。需要進(jìn)行多表連接查詢時(shí),根據(jù)選擇的字段在這個(gè)無向圖上尋找從起始表節(jié)點(diǎn)到終結(jié)點(diǎn)的一條路徑,然后從這條路徑上的表節(jié)點(diǎn)和字段節(jié)點(diǎn)獲取連接查詢時(shí)的條件信息,并生成SQL語句。
以學(xué)生表、選課情況表和課程表為例,在以RDF三元組的形式表示學(xué)生選擇的課程時(shí),就要涉及到在學(xué)生表、選課情況表和課程表這三個(gè)表之間進(jìn)行查詢。首先通過學(xué)生表和選課情況表,找到學(xué)生選擇課程的課程ID,然后再通過選課情況表和課程表,找到課程ID對應(yīng)的課程名。這時(shí)就需要在圖中的學(xué)生節(jié)點(diǎn)和課程節(jié)點(diǎn)之間找到一條通路,通路上所經(jīng)過的點(diǎn)就是在進(jìn)行查詢時(shí)所需要的連接條件。首先把數(shù)據(jù)庫模式結(jié)構(gòu)建成一個(gè)無向圖,如圖4所示,然后以學(xué)生節(jié)點(diǎn)作為起點(diǎn),課程節(jié)點(diǎn)作為終點(diǎn)尋找一條通路。尋找路徑的同時(shí),記錄下路徑上經(jīng)過的所有節(jié)點(diǎn)的信息。由于路徑上的節(jié)點(diǎn)除了表節(jié)點(diǎn),所有的字段節(jié)點(diǎn)都是外鍵字段,所以使用外鍵類型的數(shù)據(jù)結(jié)構(gòu),存儲(chǔ)外鍵的主表和引用表等相關(guān)信息。獲取這條路徑上的信息后,根據(jù)路徑信息設(shè)置生成SQL語句,并設(shè)置連接查詢的查詢條件。
圖4 由關(guān)系數(shù)據(jù)庫生成的無向圖Fig.4 Undirected graph generated by relational database
首先獲取到2.3節(jié)獲取到的數(shù)據(jù)庫和本體之間的映射關(guān)系,再根據(jù)2.4 節(jié)由字段、表、外鍵引用關(guān)系等信息生成的SQL 語句,在數(shù)據(jù)庫中進(jìn)行查詢獲取相應(yīng)的數(shù)據(jù)。根據(jù)主語模板和模板中對應(yīng)的關(guān)系表中的字段數(shù)據(jù),創(chuàng)建一個(gè)主語資源實(shí)體,并且根據(jù)指定的類別名把主語實(shí)體歸類到對應(yīng)的類別概念下,創(chuàng)建一個(gè)(主語實(shí)體,類型,類別概念)的三元組。
其次根據(jù)對應(yīng)關(guān)系對屬性進(jìn)行處理,用數(shù)據(jù)屬性連接主語實(shí)體和數(shù)據(jù)值,用對象屬性連接主語實(shí)體和屬性實(shí)體,并創(chuàng)建相應(yīng)的三元組。對于數(shù)據(jù)屬性,直接根據(jù)謂詞對應(yīng)的字段名稱,取出字段數(shù)據(jù)作為數(shù)據(jù)屬性值并設(shè)置其數(shù)據(jù)類型;用謂詞關(guān)系把主語實(shí)體和數(shù)據(jù)屬性值連接起來,創(chuàng)建(主語實(shí)體,謂詞,數(shù)據(jù)屬性值)的三元組。對于對象屬性根據(jù)其URI 模板得到其實(shí)體資源的URI,判斷這個(gè)對象屬性實(shí)體是否已經(jīng)存在。如果對象屬性實(shí)體已經(jīng)存在直接使用謂詞關(guān)系把主語實(shí)體和對象屬性實(shí)體連接起來即可。如果該對象屬性實(shí)體不存在,那么就創(chuàng)建一個(gè)對象屬性實(shí)體,并且根據(jù)類型把其歸屬到對應(yīng)的類別下,然后在用謂詞連接主語實(shí)體和對象屬性實(shí)體創(chuàng)建(主語實(shí)體,謂詞,對象屬性實(shí)體)的三元組。
最后選擇可以當(dāng)前類,或者批量選擇本體模型中的所有類,按照指定的格式進(jìn)行RDF三元組的轉(zhuǎn)換,系統(tǒng)提供了RDF/XML、N-triples、Turtle三種格式。
整體框架的實(shí)現(xiàn)算法如算法1 所示,算法2 描述了根據(jù)數(shù)據(jù)的查詢結(jié)果和對應(yīng)關(guān)系生成三元組的過程。
算法1整體框架實(shí)現(xiàn)算法
輸入:Database URL,User Name,Password,Ontology URL
輸出:RDF Triples
Parsing-Database(Database URL,User Name,Password)
Parsing-Ontology(Ontology)
Specify subject entity template
AutoMaps=generateAutoMapping(Database URL,Ontology URL)
Revise AutoMaps
For map in AutoMaps:
If Fields are from the same table then
Generate SQL based on field and table information
Else if Fields come from different tables then
Creating graph according to database schema
Find the shortest path
Record the nodes passed by the path
Generate SQL based on the path
RDF Triples=generateRDFTriples(queryResult,mapping-Result)
Return RDF Triples
算法2RDF三元組生成算法
輸入:SQL Query Result,Map
輸出:RDF Triples
Generate subject according subject template and field data
Classify the subject into its category
Create Property according to predicate
Generate predicate attributes
If it is a data attribute then
Generate triples(subject,predicate,attribute value)
Else
If this attribute is already in RDF graph
Generate triples(subject,predicate,object property)
Else
Create object attribute entity
Categorized into its category,that is generated(object property entity,type,class)
Generate triples(subject,predicate,object attribute)
Select RDF data format
Return RDF Triples
實(shí)驗(yàn)使用本文提出的框架對智慧養(yǎng)老業(yè)務(wù)系統(tǒng)中老年人的信息進(jìn)行知識(shí)抽取并轉(zhuǎn)換成RDF 數(shù)據(jù),完成智慧養(yǎng)老領(lǐng)域老年人基礎(chǔ)信息知識(shí)圖譜的構(gòu)建。
實(shí)驗(yàn)使用的自定義本體模型如圖5所示,該本體模型中包括17 個(gè)類別概念,25 個(gè)數(shù)據(jù)屬性,22 個(gè)對象屬性。類別概念中主要包括老人、養(yǎng)老機(jī)構(gòu)、證件、護(hù)理類型等,主要用于描述老人的基礎(chǔ)信息,和老年人在養(yǎng)老機(jī)構(gòu)的日常護(hù)理信息。其中數(shù)據(jù)屬性用于描述老人的基礎(chǔ)信息,如hasEmergencyPhone 表示老人的緊急聯(lián)系人電話。對象屬性用于表達(dá)老人概念與其他概念之間的關(guān)系,如belongPensionInstitution 表示老年人與養(yǎng)老機(jī)構(gòu)的關(guān)系。
圖5 養(yǎng)老領(lǐng)域老人基礎(chǔ)信息本體模型Fig.5 Ontology model of basic information for the elderly
除了老人的基本信息概念和老年人在養(yǎng)老機(jī)構(gòu)的信息,本體模型中還包括地址信息相關(guān)的概念。地址概念的規(guī)定采用了國家區(qū)域劃分的五級(jí)地址數(shù)據(jù)庫。行政區(qū)域劃分的本體模型中包含5個(gè)概念,用來表示行政區(qū)域劃分的五個(gè)級(jí)別。包括19 個(gè)屬性,其中14 個(gè)數(shù)據(jù)屬性表示行政區(qū)域基本信息,5個(gè)對象屬性連接不同等級(jí)的行政區(qū)域,表示行政區(qū)域的所屬關(guān)系。
數(shù)據(jù)庫中包括四個(gè)表,其中老人基礎(chǔ)信息表存儲(chǔ)老年人、姓名、性別、出生日期、血型等基礎(chǔ)信息。老人在養(yǎng)老機(jī)構(gòu)登記的信息表存儲(chǔ)了老年人在當(dāng)前機(jī)構(gòu)的信息,如房間號(hào)、護(hù)理級(jí)別等信息。養(yǎng)老機(jī)構(gòu)表存儲(chǔ)機(jī)構(gòu)名、機(jī)構(gòu)代碼、機(jī)構(gòu)法人等養(yǎng)老服務(wù)機(jī)構(gòu)的相關(guān)信息。地址信息表行政區(qū)域的數(shù)據(jù)庫里存儲(chǔ)區(qū)域的相關(guān)信息,包括區(qū)域代碼、區(qū)域名稱、郵政編碼、區(qū)域的經(jīng)緯度,其中區(qū)域的parent_code是一個(gè)引用自身表的外鍵,被引用列是父級(jí)區(qū)域的區(qū)域代碼。
實(shí)驗(yàn)步驟如下:
(1)如圖6 所示,首先對數(shù)據(jù)庫和本體模型的相關(guān)信息進(jìn)行配置,包括數(shù)據(jù)庫的地址,數(shù)據(jù)庫的用戶名和密碼,本體模型所在的路徑地址。系統(tǒng)根據(jù)配置連接數(shù)據(jù)庫,加載本體模型,然后自動(dòng)對數(shù)據(jù)庫和本體模型進(jìn)行解析,并以可視化的方式展示出來。
圖6 本體模型和數(shù)據(jù)信息配置Fig.6 Ontology and database address configuration
(2)完成數(shù)據(jù)庫和本體模型的配置后,系統(tǒng)會(huì)根據(jù)數(shù)據(jù)庫的解析結(jié)果生成中間本體.并且計(jì)算自定義本體和中間本體各種概念屬性的相似度,基于相似度自動(dòng)生成數(shù)據(jù)庫和自定義本體之間的候選映射。如圖7所示,對于自定義本體中的每一個(gè)類,顯示一個(gè)類標(biāo)簽頁面。如圖7 所示,每個(gè)標(biāo)簽頁面的顯示詳情包括:類和表的對應(yīng)關(guān)系,屬性和字段的對應(yīng)關(guān)系,以及類的主語模板的默認(rèn)設(shè)置。
圖7 自動(dòng)生成對應(yīng)關(guān)系Fig.7 Automatically generated candidate mapping
(3)對自動(dòng)生成的候選映射進(jìn)行確認(rèn),確認(rèn)類與表的映射,字段與屬性的映射。對錯(cuò)誤的候選映射進(jìn)行修正。如果不進(jìn)行任何操作,則默認(rèn)自動(dòng)生成的對應(yīng)關(guān)系全部是正確的。實(shí)驗(yàn)中自定義本體模型中的17 個(gè)類,成功匹配到14 個(gè),對象屬性22 個(gè)成功匹配到16 個(gè),數(shù)據(jù)屬性25個(gè)匹配到20個(gè)。
(4)根據(jù)需要選擇是否對資源實(shí)體的主語模板修改,可選擇數(shù)據(jù)庫中表的字段和字符組合方式,將根據(jù)在主語設(shè)置的字段模板和字符生成主語資源的URI,實(shí)驗(yàn)中使用默認(rèn)的主語生成方式。
(5)確認(rèn)和修改后,可以直接把當(dāng)前類轉(zhuǎn)成RDF三元組,也可以在確認(rèn)所有類的候選映射關(guān)系之后,一次完成整個(gè)數(shù)據(jù)庫的轉(zhuǎn)換。最終共抽取272 102 條RDF三元組,以N-triples的格式保存三元組到文件中。
最后使用本文的框架對關(guān)系數(shù)據(jù)進(jìn)行知識(shí)抽取并轉(zhuǎn)換成RDF 數(shù)據(jù),結(jié)合本體模型建立的養(yǎng)老領(lǐng)域老年人基礎(chǔ)信息知識(shí)圖譜如圖8所示。
圖8 老年人基礎(chǔ)信息知識(shí)圖譜Fig.8 Basic information knowledge graph for the elderly
如表3 所示,與現(xiàn)有的映射編輯類工具對比,本文提出的框架能夠方便地根據(jù)數(shù)據(jù)源和本體的解析結(jié)果,自動(dòng)生成候選映射,可視化地進(jìn)行修正和調(diào)整。另外能夠根據(jù)選擇的結(jié)果自動(dòng)進(jìn)行SQL 語句的生成和相應(yīng)數(shù)據(jù)的獲取。不需中間映射文件的編輯和維護(hù)映射。并且應(yīng)用框架能直接獲取到RDF 三元組,而不是映射文件,不需要再借助其他工具和插件去執(zhí)行映射文件再得到RDF三元組。因此基于本文的框架實(shí)現(xiàn)的知識(shí)抽取系統(tǒng),能夠方便地根據(jù)本體模型的目標(biāo)詞匯快速的生成RDF三元組,較為高效地完成關(guān)系型數(shù)據(jù)的知識(shí)抽取和數(shù)據(jù)轉(zhuǎn)換。
表3 框架和工具功能比較情況Table 3 Comparison of framework and tool functions
結(jié)構(gòu)化數(shù)據(jù)的知識(shí)抽取和RDF轉(zhuǎn)換是結(jié)構(gòu)行業(yè)領(lǐng)域知識(shí)圖譜的重要步驟,本文針對當(dāng)前關(guān)系型結(jié)構(gòu)化知識(shí)抽取和數(shù)據(jù)轉(zhuǎn)換方法存在的操作繁瑣、需要用戶大量參與、進(jìn)行大量R2RML 語句編碼工作,以及R2RML 映射維護(hù)等問題,提出一種關(guān)系型結(jié)構(gòu)化知識(shí)抽取的框架方案并予以實(shí)現(xiàn)。直接由指定關(guān)系數(shù)據(jù)和本體模型中類別概念和屬性的對應(yīng)關(guān)系,系統(tǒng)框架根據(jù)用戶指定的對應(yīng)關(guān)系,自動(dòng)生成SQL語句從關(guān)系數(shù)據(jù)庫中進(jìn)行數(shù)據(jù)抽取生成RDF三元組。
未來的研究工作要對框架的細(xì)節(jié)進(jìn)行進(jìn)一步的完善,如在轉(zhuǎn)成生成三元組時(shí)根據(jù)用戶的需求把三元組劃分到不同的命名圖(named graph)中,提供數(shù)據(jù)類型的轉(zhuǎn)換機(jī)制,提供枚舉類型的處理機(jī)制等。另外還可以從關(guān)系型的結(jié)構(gòu)化數(shù)據(jù)擴(kuò)展到其他類型的結(jié)構(gòu)數(shù)據(jù)的知識(shí)抽取上和數(shù)據(jù)轉(zhuǎn)換上,如Redis、Hbase、MongoDB 等數(shù)據(jù)庫,建立一個(gè)統(tǒng)一的結(jié)構(gòu)化數(shù)據(jù)知識(shí)抽取和數(shù)據(jù)轉(zhuǎn)換的框架。未來的研究可以考慮實(shí)現(xiàn)一個(gè)統(tǒng)一的結(jié)構(gòu)化知識(shí)抽取和數(shù)據(jù)轉(zhuǎn)換框架,并且以插件的方式集成到Protege中。