作者寄语:
刚开始接触知识图谱不久,看过一些知识图谱视频及论文后,想自己亲手做实验来验证下所学的知识。于是开始在网上查看各种实验,找到了一个比较全面的实验,能更让人理解这里面的层层关系:如何构建本体,如何获取数据,如何将数据表转成三元组关系,如何使用三元组关系进行查询,如何最终与python相连接等等。这是一个以电影及人物为知识库的知识问答系统。
使用到的工具及版本:
网上虽然做这个实验的不少,但是本人查看了很多,几乎每个人用的版本不同出现的问题也不同,出现问题时有以下几个解决方案:1.去官网查看配置文件是否需要更改,有时是因为版本太新导致实验中的配置文件不能使用。2.下载之前的版本。3.查看别人的解决方案。
我使用到的工具:
mysql8.0(建议下载5.0+版本,否则之后使用d2rq会出现问题,因为d2rq源码支持5.1版本)
navicat for mysql
protege5.5.0
JAVA JDK 1.8
d2qr
Apache-jena及Apache-jena-fuseki3.7.0
python
pycharm编辑器
第三方库SPARQLWrapper
工具的下载这里就不多说了,网上很多详细教程,大家自行查看。
步骤一:数据的导入及构建本体
数据的导入:
运行sql文件导入数据表。数据表一共有5个:演员表、电影信息表、电影-演员表、电影类型表、电影-类型表。
或者根据自己的需要军进行自定义数据表。
导入后结果如下:
构建本体:
使用protege构建本体,最终结果是生成一个ontology.owl的文件。
构建过程如下:
1.点击“Entities”tab标签,选择“Classes”标签。在"owl:thing"下,我们创建三个类:movie、person、genre。右下方还可以设置描述该类的特性。
2.然后切换到"Object Properties"页面,我们在此界面创建类之间的关系,即,对象属性。这里我们创建了三个对象属性:"hasActedIn""hasActor""hasGenre"。"domain"表示该属性是属于哪个类的,"range"表示该属性的范围定义。Inverse Of表示该属性与"hasActor"互为相反属性。"SubProperty Of"指子属性关系。"Equivalent To"指相等属性关系。这里根据自己需求进行定义。