一、前言:
Protégé为传统构建知识图谱的软件。Protégé在构建知识图谱的时候可以采用手动搭建、批量搭建两种方式。手动搭建可以参考之前发布的《Protégé手动构建简单知识图谱》一文。但是如果需要搭建比较庞大的知识图谱,手动搭建的方法因为具有非常高的重复性,所以工作量非常巨大且繁琐。因此本文尝试拆解Protégé批量搭建步骤来提高搭建简单知识图谱本体的效率。
二、两种方法对比:
由于常见的知识图谱的数据量不小同时Mapping Master DSL语言学习成本及难度较低,因此手动搭建知识图谱的方式仅适用于熟悉Protégé软件。知识图谱的搭建,尤其是多人协同构建知识图谱时需要采用批量输入搭建的方法来增加工作效率。
手动搭建 | 批量输入搭建 | |
特点 | 繁琐、精细化 | 快速 |
适用阶段 | 熟悉Protégé软件阶段+知识图谱细节优化阶段 | 知识图谱搭建阶段+知识图谱更新阶段 |
组织需求 | 所有参与者皆需要掌握Protégé | 仅需要部分参与者掌握Protégé,其余可在excel中进行知识图谱搭建 |
三、批量输入的搭建方法
3.1 Mapping Master DSL 基础语法:
(此部分可以跳过,在需要的时候返回学习即可。具体语法可参考:
网址1:MappingMasterDSL ·protegeproject/mapping-master Wiki ·GitHub
网址2:Cellfie-本体转换领域专用语言(MappingMaster DSL)概述_ppsuc_deer的博客-CSDN博客)
我们以Sheet名为“Protégé学习”,大小为3X3的表格为例进行说明。
图1Protege学习表
3.1.1单元格引用语法:
1、指定A1单元格:
语法:@A1
2、指定A列:
语法:@A*(*代表“整”)
3.1.2声明类及其属性语法:
1、将A列作为类导入protégé
语法:Class: @A*
2、将B列作为A列的子类,将A、B两列导入protégé
语法:Class: @B*
SubClassOf: @A*
3、将B列作为A列的子类规则,将A、B两列导入protégé(注:Protégé中已定义“hastype”为数据属性)
语法:Class: @B*
SubClassOf: (hastype Value @A*)
Tips:“Value”为Protégé中的连接关键词(Syntax Keyword)。其他关键词包括:value、some、only、min、max、exactly、and、or、not,可以参考网址:Class Expression Syntax (protegeproject.github.io)
4、将B列作为A列的等价类,将A、B两列导入protégé
语法:Class: @A*
EquivalentTo: @B*
5、将B列作为A列的批注属性,将A、B两列导入protégé(注:Protégé中已定义“hasSource”为数据属性)
语法:Class: @A*
Annotations: hasSource @B*
6、将B列作为A列的对象属性(Object properties),将A、B两列导入protégé(注:Protégé中已定义“hastype”为对象属性)
语法:Class: @A*
Annotations: hastype @B*
3.1.3声明实例及其属性语法:
1、将A列作为实例导入protégé
语法:Individual: @A*
2、将B列作为A列的数据属性(Data properties),将A、B两列导入protégé(注:Protégé中已定义“hasStateName”为数据属性)
语法:Individual: @A*
Facts: hasStateName @B*
3、将B列作为A列的批注属性,将A、B两列导入protégé(注:Protégé中已定义“hasSource”为数据属性)
语法:Individual: @A*
Annotations: hasSource @B*
4、将B列作为A列的所属类,将B列导入protégé中的A列所属类(注:Protégé中已定义“hasSource”为数据属性)
语法:Individual: @A*
Types: @B*
3.2Protege批量输入的搭建简单知识图谱方法:
3.2.1excel中搭建类的层级结构:
(团队协作时该步骤为核心步骤,需要使用大量人力进行搭建)
在搭建层级结构时,需要将excel模型库划分成若干互斥“一级类”。图5为划分“一级类”(图中将“一级类”错误表达成“本体”)的示意图:从“一级类”出发进行类的细分,并且当出现有交叉类别时,将交叉类别重新划分新的“一级类”。图6为给出的Pizza知识图谱。在划分新的知识图谱“一级类”时,可以参考该知识图谱进行划分。
图2本体划分示意图
图3Pizza知识图谱
以构建口腔咀嚼系统知识图谱为例:
图4Excel主层级模型库
图5Excel次层级模型库
从“一级功能”到“基础子系统”具有较好的互斥性,可以构成较好的类的层级。自“基础子系统”层级之后的功能划分则具有大量交叉,可以在主层级中划分出新的层级。
(所有的划分均需要以知识图谱搭建的目的为标准,因此所有的层级划分方案不唯一)
3.2.2excel中罗列实例:
(团队协作时该步骤为核心步骤,需要使用大量人力进行搭建)
以构建口腔咀嚼系统知识图谱为例:
在excel中罗列涉及的实例器官及其直属类,如图12所示:
图6实例器官及所属类
3.2.3excel中搭建类的外部属性:
(团队协作时该步骤为核心步骤,需要使用大量人力进行搭建)
3.2.4Protege中批量导入层级结构:
以构建口腔咀嚼系统知识图谱为例:
Protégé中批量导入层级结构步骤如下:
步骤一:点击“Tools“中的“Create axioms from Excel workbook…”:
图7进入批量导入页面
步骤二:打开需要导入的excel文件:
图8打开需要打开的excel文件
步骤三:在“Cellfie”中点击“Add”:
图9添加批量数据导入页面
步骤四:在“Transformation Rule Editor”中写入所需的Mapping Master DSL语言:
“Transformation Rule Editor”中各项说明如下:
“Sheet name” | 需要导入的表格 |
“Start column” | 开始导入的列名 |
“End column” | 结束导入的列名 |
“Start row” | 开始导入的列名 |
“End row” | 结束导入的列名(“+“表示到最后一列) |
选择合适的参数后在“Rule”中写入以下语句:
Class: @[子类列名]*
SubClassOf: @[父类列名]*
(在Protégé中每一层父子类层级需要一次输入,不可以在一次规则输入连续多层的父子类关系)
图10“Cellfie”规则写入页面
图10显示了在搭建咀嚼系统知识图谱层级结构的过程中需要构建的规则。“B-D-F-H-J“为“父1-子1(父2)-子2(父3)-子3……”链条,在Protégé中需要将其拆分成四条“父-子”规则进行输入。输入完成后点击“Generate Axioms”即可生成相应的层级结构。
图11为规则搭建完成后咀嚼系统主层级结构。
图11层级结构规则构建完成界面
图12咀嚼系统层级结构
反复步骤一至步骤四,补充次层级结构。
3.2.5Protege中批量导入实例:
步骤一、二、三与3.2.4中一致。
步骤四:在“Transformation Rule Editor”中写入所需的Mapping Master DSL语言:
选择合适的参数后在“Rule”中写入以下语句:
Individual: @[实例列名]*
types: @[所属类列名]*
(在Protégé批量导入实例时,实例与所属类名相同会发生导入错误,需要更改其中之一的名称)
图13实例器官及所属类(改)
图14导入实体规则构建完成界面
图15实例导入完成界面
3.2.6Protege中批量导入类的外部属性:
以构建口腔咀嚼系统知识图谱为例:
Protégé中批量导入类的外部属性步骤如下:
步骤一:将excel中的关系输入Protégé中“Object properties”中,如图16所示。
图16关系显示界面
步骤二:以3.2.4相同的方法选择需要导入excel表格进入“Cellfie”,并点击Add按钮。
图17关系导入界面
步骤三:选择合适的参数后在“Rule”中写入规则语句并点击确定:
规则语句的输入语法如下所示:
Class: @[主语列名]*
SubClassOf: ([关系名称] [关键词] @[宾语列名]*)
Tips:其他关键词包括:value、some、only、min、max、exactly、and、or、not,可以参考网址:Class Expression Syntax (protegeproject.github.io)
在咀嚼系统外部属性搭建时输入以下代码:
Class:@B*
SubClassof:(link Only @E*)
图18中显示了参数的选择以及代码。
图18输入外部属性代码
第四步:在“Cellfie”页面选择第三步输入的规则并点击Generate Axions,完成外部属性的输入。
图19外部属性导入规则构建完成界面
图20外部属性导入完成界面
3.3 Mapping Master DSL 进阶语法:
Mapping Master DSL提供在导入时对导入内容进行批量修改的语法,详细请查看以下网址:
1、 Cellfie-本体转换领域专用语言(MappingMaster DSL)概述_ppsuc_deer的博客-CSDN博客
2、 MappingMasterDSL ·protegeproject/mapping-master Wiki ·GitHub