本体编辑、知识推理与检索

本体编辑、知识推理与检索本体编辑、知识推理与检索一切要从一个倒霉项目开始说起,项目要求根据一个构建好的本体文件,通过JAVA调用相应API实现对本体文件的编辑、推理以及检索。由于之前对本体、知识图谱这些完全不熟悉,被强行推入坑之后就开始了漫长且毫无希望的技(疯)术(狂)调(百)研(度)之路。。。。调研之前:这是啥呀?调研之后:这tm都是些啥啊!!呼~~好在最后算是做出来了,故在此记录一下过程及部分主要代码。1…

大家好,又见面了,我是你们的朋友全栈君。

本体编辑、知识推理与检索

一切要从一个倒霉项目开始说起,项目要求根据一个构建好的本体文件,通过JAVA调用相应API实现对本体文件的编辑、推理以及检索。由于之前对本体、知识图谱这些完全不熟悉,被强行推入坑之后就开始了漫长且毫无希望的技(疯)术(狂)调(百)研(度)之路。。。。

调研之前:这是啥呀?
调研之后:这***都是些啥啊!!
呼~~ 好在最后算是做出来了,故在此记录一下过程及部分主要代码。

1.环境相关

我的:
Java:
在这里插入图片描述
Eclipse:
在这里插入图片描述
Protege: Protege-5.2.0

2.项目整体逻辑

如图:
在这里插入图片描述

3.用本体编辑工具protege构建基础本体文件

Protege是一个本体编辑工具,可以将知识的三元组以及各种逻辑通过可视化界面编辑成本体文件,protege还带有一些推理机插件(见下图),pellet、Hermit等,可以利用这些插件对本体文件进行推理。也可以通过SWRL自定义一些规则加入本体,还可以进行查询。可见Protege能一条龙解决本体的编辑、推理、查询等问题,但本项目要求用Java调API实现功能。编辑、推理和检索都是在构建好的基础本体文件上进行的,该本体文件就是用protege构建的。
在这里插入图片描述

Protege构建本体时,主要用到的有‘Classes(类)’;‘Individuals(实例)’;‘Object properties(对象属性)’;‘Data properties(数据属性)’这四个概念。

(1) 在定义本体的各个类时,可以为其添加各种描述,比如它的等价类(Equivalent To),它是谁的子类(SubClass Of),它与哪一类互斥(Disjoint Union Of),它下面有哪些Individuals(Instances)等等。

在这里插入图片描述

(2) Individuals(实例)是类下面的具体个体,比如下图Country类下面的individual有Ametica等。在定义individual时,可以为其添加描述及属性声明,属性声明中包括对象属性数据属性等。
在这里插入图片描述

(3) Object properties(对象属性)和Data properties(数据属性),我理解为“谓语”,用于连接主语(class/individual)和宾语(class/individual/value)。Object properties(对象属性)所连接的宾语是class或individual,Data properties(数据属性)所连接的宾语是具体的value。举例见下图:chenjianer这个人是类Expert下面的一个individual,ta是一名专家,右侧带有蓝色标志的部分是其对象属性声明,mother_language_is、people_is 这些就是对象属性,后面连接的宾语english、Chinese 啥的仍然是个individual。右侧带有绿色标志的部分是其数据属性声明,birthday、ID_card 这些就是数据属性,后面连接的宾语”2008-03-23”、”4216633322656”等是具体的值。
在这里插入图片描述
对象属性和数据属性也可定义其自身的Description,其中包括Domains、Ranges,关于属性的定义域和值域,我的理解是,在使用该属性时所连接的主语的范围即为定义域,宾语的范围就是值域。

4. 初始化本体文件

通过protege构建好的本体文件保存为一个owl文件,接下来要对其进行编辑推理检索,这些工作通过调用OWLAPI和Jena API实现。首先读入owl文件。

在这里插入图片描述

5.编辑本体文件

将知识或数据写入本体,例子如下。这段代码实现了在本体文件中新建了一个‘天线宝宝’的类,在这个类下面新建了一个名为‘天线宝宝1号’的实例,同时新建数据属性‘name’,并为天线宝宝1号这个实例添加数据属性声明name=Alice。

在这里插入图片描述

6.pellet推理机推理

在这里插入图片描述

7.推理结果检索

检索这里用的方法是使用jena执行sparql进行查询。下面这个例子是在上一步得到的推理结果中检索是天线宝宝1号叫啥名,并把查询结果在控制台显示出来。

在这里插入图片描述

8.其他

另外,在整个工程中引用了别的库,在引用外部jar的时候把该引的都引了,主要用到的有owl api、pellet、Jena这几个。可能还会报一些jar包冲突或者某个包找不到的错误,那就按照错误提示,冲突就移除相应的包,找不到就去找(废话),我的意思是如果提示某个包没有就去找到它下下来然后再载入。反正在载入外部jar这一趴,我真的是花了好多时间碰壁碰到自闭(哭泣)。

9.参考

经过疯狂百度之后发现这方面的资料真的不是很多,下面两个网址是我主要参考的资料。在此十分感谢链接(1)的博主Kujou,看他的博客受到很大启发并且十分感谢他耐心答疑解惑(抱拳了兄弟)。
(1)https://blog.csdn.net/BUPTOctopus/article/details/81562114
(2)http://dior.ics.muni.cz/~makub/owl/
另外特别感谢当初与我共同入坑在项目完成过程中同我并肩作战并在后期凭借自身努力顺利出坑且一路小跑绝尘而去的 我的优秀的小伙伴 螺!(假装@螺 哈哈哈)

10.

没有10啦写完啦!
以上。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145884.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 交叉编译lrzsz

    交叉编译lrzsz参考:https://blog.csdn.net/linucos/article/details/5582979https://blog.csdn.net/wangzhen209/article/details/32713715https://blog.csdn.net/zijie_xiao/article/details/50934279步骤:获取源码:https://www…

    2022年6月23日
    36
  • 如何得到屏幕分辨率?

    如何得到屏幕分辨率?

    2021年7月29日
    53
  • JS通过window location href下载文件「建议收藏」

    JS通过window location href下载文件「建议收藏」最近在写文件下载,发现前端实现下载功能是依赖于浏览器特性,而非JS特性。前端实现文件下载主要分为以下情况1、在页面直接点击某个元素,然后另存为,弹出下载提示框2、直接输入网址,确定,弹出下载提示框3、点击页面的块触发下载时间,弹出下载提示框4、点击下载按钮,实现文件下载html代码 <div> <spanng-click=”downloadFile(url…

    2022年7月12日
    508
  • SQL 事务(Transaction)「建议收藏」

    SQL 事务(Transaction)「建议收藏」1、概念指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)由多个sql语句组成,必须作为一个整体执行这些sql语句作为一个整体一起向系统提交,要么都执行、要么都不执行语法步骤:开始事

    2022年7月1日
    20
  • LSTM模型搭建_LSTM神经网络

    LSTM模型搭建_LSTM神经网络defLSTM_Classifier(self,train,trainLabel,test,testLabel,val_test,val_label,new_test=None):train,test=np.array(train),np.array(test)train,test=train.reshape(train.shape[0],1,train.shape[1]),test.reshape(test.shape[0],1,tes…

    2022年9月11日
    0
  • Tcp是什么?_跟你说完了

    Tcp是什么?_跟你说完了之前受到Wireshark——从此我就喜欢上了它,就像是学武之人得到了一把称手好剑的启发,带着回顾、深入TCP的目标,回顾了《TCP-IP协议卷1》《图解TCP/IP协议》,受益匪浅。写这篇文章,希望自己能对TCP形成一个系统性的知识沉淀,也希望能给初学者一个基本概念的认识,读完本文再深入书籍,应该也是不错滴。学习路径:1、阅读《TCP-IP协议卷1》的TCP章节(相关知识非常全面,各种算法…

    2022年9月5日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号