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

本体编辑、知识推理与检索本体编辑、知识推理与检索一切要从一个倒霉项目开始说起,项目要求根据一个构建好的本体文件,通过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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 结构体赋值和指针赋值「建议收藏」

    结构体赋值和指针赋值「建议收藏」结论:结构体的赋值,修改新结构体的内容不会改变原来的那个结构体的值,而指针的赋值,再对指针内容修改则会改变指针指向的那个对象的值,因为指针的赋值其实是将地址传给另一个指针。定义结构体:structperson{ intage; stringname;};结构体赋值:personp1;p1.age=12;p1.name=”Mike”;personp2=p1;p2.name=”Mary”;cout<<“p1:”<<p1.age

    2022年7月15日
    14
  • iptable详解

    一:前言防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测。目前市面上比较常见的有3、4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关。对于TCP/IP的七层模型来讲

    2022年4月3日
    181
  • java400报错[通俗易懂]

    java400报错[通俗易懂]页面报400,控制台没输出也没报错,原来是数据库中的date类型,和实体的字段冲突。获取到页面的时间,转换成date类型,在给实体date类型属性赋值。报hasanunsupportedreturntype:classjava.lang.String===》在dao层写add方法时,疏忽了,写了String的返回类型400报错!

    2022年6月13日
    49
  • cv.copyMakeBorder(imwrite opencv)

    文章目录参考依据设置边界框参数实例参考依据OpenCV-Python官方教程:https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_core/py_basic_ops/py_basic_ops.html设置边界框如果你想给你的图片设置边界框,就像一个相框一样的东西,你就可以使用cv2.copyMake…

    2022年4月14日
    85
  • pycharm打包python项目_Python怎么打包

    pycharm打包python项目_Python怎么打包一、构建虚拟环境1.PyCharm终端中输入命令python-mvenvvenv2.刷新后产生venv文件夹二、创建解释器1.文件–>设置–>Python解释器2.添加所需模块(1)已经存在的模块(2)重新添加一个终端,这样就会将模块安装在虚拟环境中了(3)安装缺少的模块(4)安装打包模块pipinstallpyinstaller-ihttps://pypi.douban.com/simple/(5)打包程序p

    2022年8月26日
    7
  • pycharm怎么装第三方库jieba_python怎么导入requests库

    pycharm怎么装第三方库jieba_python怎么导入requests库PyCharm安装第三方库是十分方便的,无需pip或其他工具,平台就自带了这个功能而且操作十分简便。如下:

    2022年8月25日
    10

发表回复

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

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