本體編輯、知識(shí)推理與檢索
一切要從一個(gè)倒霉項(xiàng)目開(kāi)始說(shuō)起,項(xiàng)目要求根據(jù)一個(gè)構(gòu)建好的本體文件,通過(guò)JAVA調(diào)用相應(yīng)API實(shí)現(xiàn)對(duì)本體文件的編輯、推理以及檢索。由于之前對(duì)本體、知識(shí)圖譜這些完全不熟悉,被強(qiáng)行推入坑之后就開(kāi)始了漫長(zhǎng)且毫無(wú)希望的技(瘋)術(shù)(狂)調(diào)(百)研(度)之路。。。。
調(diào)研之前:這是啥呀?
調(diào)研之后:這***都是些啥?。?!
呼~(yú)~ 好在最后算是做出來(lái)了,故在此記錄一下過(guò)程及部分主要代碼。
1.環(huán)境相關(guān)
我的:
Java:
Eclipse:
Protege: Protege-5.2.0
2.項(xiàng)目整體邏輯
如圖:
3.用本體編輯工具protege構(gòu)建基礎(chǔ)本體文件
Protege是一個(gè)本體編輯工具,可以將知識(shí)的三元組以及各種邏輯通過(guò)可視化界面編輯成本體文件,protege還帶有一些推理機(jī)插件(見(jiàn)下圖),pellet、Hermit等,可以利用這些插件對(duì)本體文件進(jìn)行推理。也可以通過(guò)SWRL自定義一些規(guī)則加入本體,還可以進(jìn)行查詢??梢?jiàn)Protege能一條龍解決本體的編輯、推理、查詢等問(wèn)題,但本項(xiàng)目要求用Java調(diào)API實(shí)現(xiàn)功能。編輯、推理和檢索都是在構(gòu)建好的基礎(chǔ)本體文件上進(jìn)行的,該本體文件就是用protege構(gòu)建的。
Protege構(gòu)建本體時(shí),主要用到的有‘Classes(類)’;‘Individuals(實(shí)例)’;‘Object properties(對(duì)象屬性)’;‘Data properties(數(shù)據(jù)屬性)’這四個(gè)概念。
(1) 在定義本體的各個(gè)類時(shí),可以為其添加各種描述,比如它的等價(jià)類(Equivalent To),它是誰(shuí)的子類(SubClass Of),它與哪一類互斥(Disjoint Union Of),它下面有哪些Individuals(Instances)等等。
(2) Individuals(實(shí)例)是類下面的具體個(gè)體,比如下圖Country類下面的individual有Ametica等。在定義individual時(shí),可以為其添加描述及屬性聲明,屬性聲明中包括對(duì)象屬性數(shù)據(jù)屬性等。
(3) Object properties(對(duì)象屬性)和Data properties(數(shù)據(jù)屬性),我理解為“謂語(yǔ)”,用于連接主語(yǔ)(class/individual)和賓語(yǔ)(class/individual/value)。Object properties(對(duì)象屬性)所連接的賓語(yǔ)是class或individual,Data properties(數(shù)據(jù)屬性)所連接的賓語(yǔ)是具體的value。舉例見(jiàn)下圖:chenjianer這個(gè)人是類Expert下面的一個(gè)individual,ta是一名專家,右側(cè)帶有藍(lán)色標(biāo)志的部分是其對(duì)象屬性聲明,mother_language_is、people_is 這些就是對(duì)象屬性,后面連接的賓語(yǔ)english、Chinese 啥的仍然是個(gè)individual。右側(cè)帶有綠色標(biāo)志的部分是其數(shù)據(jù)屬性聲明,birthday、ID_card 這些就是數(shù)據(jù)屬性,后面連接的賓語(yǔ)”2008-03-23”、”4216633322656”等是具體的值。
對(duì)象屬性和數(shù)據(jù)屬性也可定義其自身的Description,其中包括Domains、Ranges,關(guān)于屬性的定義域和值域,我的理解是,在使用該屬性時(shí)所連接的主語(yǔ)的范圍即為定義域,賓語(yǔ)的范圍就是值域。
4. 初始化本體文件
通過(guò)protege構(gòu)建好的本體文件保存為一個(gè)owl文件,接下來(lái)要對(duì)其進(jìn)行編輯推理檢索,這些工作通過(guò)調(diào)用OWLAPI和Jena API實(shí)現(xiàn)。首先讀入owl文件。
5.編輯本體文件
將知識(shí)或數(shù)據(jù)寫(xiě)入本體,例子如下。這段代碼實(shí)現(xiàn)了在本體文件中新建了一個(gè)‘天線寶寶’的類,在這個(gè)類下面新建了一個(gè)名為‘天線寶寶1號(hào)’的實(shí)例,同時(shí)新建數(shù)據(jù)屬性‘name’,并為天線寶寶1號(hào)這個(gè)實(shí)例添加數(shù)據(jù)屬性聲明name=Alice。
6.pellet推理機(jī)推理
7.推理結(jié)果檢索
檢索這里用的方法是使用jena執(zhí)行sparql進(jìn)行查詢。下面這個(gè)例子是在上一步得到的推理結(jié)果中檢索是天線寶寶1號(hào)叫啥名,并把查詢結(jié)果在控制臺(tái)顯示出來(lái)。
8.其他
另外,在整個(gè)工程中引用了別的庫(kù),在引用外部jar的時(shí)候把該引的都引了,主要用到的有owl api、pellet、Jena這幾個(gè)??赡苓€會(huì)報(bào)一些jar包沖突或者某個(gè)包找不到的錯(cuò)誤,那就按照錯(cuò)誤提示,沖突就移除相應(yīng)的包,找不到就去找(廢話),我的意思是如果提示某個(gè)包沒(méi)有就去找到它下下來(lái)然后再載入。反正在載入外部jar這一趴,我真的是花了好多時(shí)間碰壁碰到自閉(哭泣)。
9.參考
經(jīng)過(guò)瘋狂百度之后發(fā)現(xiàn)這方面的資料真的不是很多,下面兩個(gè)網(wǎng)址是我主要參考的資料。在此十分感謝鏈接(1)的博主Kujou,看他的博客受到很大啟發(fā)并且十分感謝他耐心答疑解惑(抱拳了兄弟)。
(1)https://blog.csdn.net/BUPTOctopus/article/details/81562114
(2)http://dior.ics.muni.cz/~makub/owl/
---------------------
作者:櫻桃小胖子同學(xué)
來(lái)源:CSDN
原文:https://blog.csdn.net/weixin_40771521/article/details/85132456