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

本体编辑、知识推理与检索本体编辑、知识推理与检索一切要从一个倒霉项目开始说起,项目要求根据一个构建好的本体文件,通过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)
上一篇 2022年5月16日 上午11:40
下一篇 2022年5月16日 上午11:40


相关推荐

  • 即梦AI细节修复有什么用?

    即梦AI细节修复有什么用?

    2026年3月13日
    2
  • 垂直类AI Agent智能体介绍

    垂直类AI Agent智能体介绍

    2026年3月15日
    2
  • 格式化hdfs的命令_hadoop的启动命令

    格式化hdfs的命令_hadoop的启动命令总结:上传文件:put、copyFromLocal、moveFromLocal下载文件:get、copyToLocal、moveToLocal查看文件:text、cat、tail合并文件:getmerge命令详解HDFS命令基本格式:hadoopfs-cmd<args>表格:选项名称使用格式含义-ls-ls查看指定路径的当前目录结构-lsr-lsr递归查看指定路径的目录结…

    2026年4月15日
    6
  • 【数据库学习】数据库总结[通俗易懂]

    【数据库学习】数据库总结[通俗易懂]1,数据库1)概念数据库是长期存储在计算机内、有组织的、可共享的大量数据的集合。常见数据库管理系统有:Access、mysql、sqlserver2)特点①数据库数据特点永久存储、有组织、可共享。(数据的最小存取单位是数据项)②数据库系统的特点数据结构化数据的共享性,冗余度,易扩充数据独立性高逻辑数据独立性(logicaldata…

    2022年4月30日
    71
  • 怎样背英语单词才高效?有哪些好方法?(如何高效的背英语单词)

    原文地址:https://www.zhihu.com/question/19580414何宜晖CSundergrad,CV,DL,ML单词视频下载方式:微盘http://vdisk.weibo.com/lc/T7ktJoSaPlIlVW0a8密码:X3J8直接下载压缩包http://yihui-he.github.io/TOEFL-10000-0/(通过github,速度可能比较慢…

    2022年4月15日
    32
  • C++虚函数详解

    C++虚函数详解C++虚函数详解前言C++的特性使得我们可以使用函数继承的方法快速实现开发,而为了满足多态与泛型编程这一性质,C++允许用户使用虚函数**(virtualfunction)来完成运行时决议这一操作,这与一般的编译时决定**有着本质的区别。虚函数表实现原理虚函数的实现是由两个部分组成的,虚函数指针与虚函数表。虚函数指针虚函数指针**(virtualfunctionpointer)*…

    2022年7月26日
    9

发表回复

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

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