标签:
转载 |
该项目是和XXXX的合作项目,按照二十四史来建立人物、时间、地点、时间、职官本体库,具体类属结构不便于在此展示
)
一、使用的技术及工具
1. AlleGroGraph3.3 一个优秀的本体库存储工具,与一般的关系数据库最大的不同在于以文件的形式将数据存储在磁盘,这个特性使其具有存储亿级Triple的能力,同时具有高效的检索性能。支持Jena2 API,RDFS++推理,SPARQL查询语言等。官网http://www.franz.com/
2. Jena2 API 对本体库的解析处理一般都少不了Jena
的身影,在该模块中我主要使用了其基本的API来对本体库进行操作,系统中使用Model接口代替了OntModel接口,主要是考虑到OntModel接口的性能太低,它是把本体文件整个加载到java虚拟机,导致了其处理大Triple数据量比较吃力。同时还使用了RDFS++来弥补Model接口中不具备OntModel的逻辑推理能力。在该模块中还使用了Jena中的推理接口,主要是GenericRuleReasoner
,由于逻辑关系在本系统中的作用不大,所以使用了基于规则的推理。推理规则文件中已经建立了100条左右的规则。
3.RDFS++
逻辑推理工具。现在只支持
rdf:type rdfs:subClassOf rdfs:domain and
rdfs:range rdfs:subPropertyOf owl:sameAs owl:inverseOf
owl:TransitiveProperty 这些谓语。本模块中使用了rdf:type
rdfs:subClassOf来找到一个本体实例的最高类型。
4.SPARQL
RDF
查询语言。本模块中使用SPARQL来查询具体本体实例,使用了FILTER
regex()来实现模糊匹配等,具体请参见W3C的SPARQL文档http://www.w3.org/TR/rdf-sparql-query/
5.TouchGraph
本体库的可视化插件。该插件是基于AWT的,使用了java的Vector集合,现在估计已经不再更新了,支持protégé中的TGVizlab标签,可实现节点的旋转、缩放、拖拽、按半径扩展等功能。
6.
其他。JE分词工具包(可添加用户词典)
二、模块功能
1.
本体实例模糊查询,主要是通过SPARQL实现,得到本体实例列表。核心语句如下:
"SELECT DISTINCT ?s " + "WHERE {" +
" ?s ?p ?o "+ "FILTER regex(str(?s),""+subKeyword+""" +")"+ "}";
其中subKeyword为待查询的字段。
2.繁简转化功能。由于中华书局要求本体库使用繁体建立,所以就有了这样一个功能,主要一点是解决了一个简体对应多个繁体的问题,该工具类使用的是北大教授制作的一个比较全的繁简对照表。
3.本体关系检索。给出两个本体实例找到两者之间的关系,目前只做了3层关系(层级越高算法越复杂,效率比较低),即A->B->C,A->B<-C,C->B->A,其中每条路径(如A->B)可能是经过推理得到的,所以最终的关系层次可能多于3层。
4.属性检索。给定一个本体实例及其需要查询的属性(如:曹操 儿子)将得到其属性值。
5.异称查询。由于人物和地点又别称,模块可实现异称查询,这点是由于本体库中本体实例的属性中对应有相应的异称,比较容易实现。
三、功能界面
1.本体实例查询
曹操
曹丕
曹操
同时单击某个节点时,会显示该节点的数据属性(Literal类型的),这里不演示。
实例检索考虑到属性太多,属性节点之间的关系就没有显示,若要得到某个属性节点的关系,可以右键点击“展开节点”得到该节点的属性,可以按照本体的类型进行展开,类型后面括号里面的数字是对应的还未展开的边数,如下图:
2. 关系检索
3. 属性检索
关系检索和属性检索的表现形式和实例检索一样,只是检索的更加具体,只上小图吧:
关系检索例子:曹操和某地的关系