李彦志,朱红梅
(1. 西南大学电子信息与工程学院,重庆 400715;2. 山东农业大学信息科学与工程学院,山东 泰安 271000)
正文内容。Google于 2012年提出知识图谱概念[1],其本质是一种表示知识的语义网络,用图的形式描述客观事物,即由节点和边组成。其中,节点用来表示概念和实体,概念是抽象出来的事物,实体是具体的事物;边表示实体与概念之间的关系,事物的内部特征用属性来表示,外部联系用关系来表示。知识图谱描述实体之间的关系,其通用表达方式是三元组[2],可以表达丰富的语义关系[3]。
农药领域的知识牵扯到农业相关的多个方面,例如:农作物的分类,作物的不同品种和名称,因此,知识的专业性强,数据的结构复杂,相关实体之间关系复杂,织起了一张巨大复杂的关系网,可以用图数据库(Graph database)来组织这些知识,构建农药知识图谱,用知识图谱展示农业知识是一种很好的工具[4],通过知识的链接发掘更多知识[5]。原生图数据库 Neo4j使用的存储后端专门为图结构数据的存储和管理进行了定制和优化,在图上互相关联的节点在数据库中的物理地址也指向彼此,因此更能发挥出图结构形式数据的优势。因此,采用图结构组织知识的农药知识图谱非常适合用 Neo4j进行存储。知识可视化在传递知识方面有很大优势[6],用可视化的方式在Web端展示知识图谱的网络关系图是知识图谱查询结果的一种形象化的展示形式,可以使人一目了然看到结果,有助于直观揭示对象之间的关系,展示多方面的属性,理解节点之间的连接和关系,确保对关系的理解更直观和形象。Cytoscape.js[7]是一个用JS编写的开源图库,它允许用户与图形交互以及显示操作丰富的交互式图形。通过把Cytoscape.js集成到应用程序中,就可以实现显示neo4j图形数据库的数据到Web端。
知识图谱由大量结构化元组数据组成。农药品种很多,标准不同,分类也不同,可以按用途分类,按原料来源分类,按化学结构分类,按加工剂型分类等,一种实体可能属于多个不同分类。所以,在农药知识图谱中,一个概念节点C或实例节点E可能与多个概念节点,如C1,C2,…,Cn分别存在关系R1,R2,…,Rn。如果2个概念节点C1,C2之间存在关系 RC,且 E1、E2分别与概念节点 C1、C2存在概念-实例关系,则E1和E2之间也存在关系RC。农药知识图谱包括概念层和实例层,其基本结构模型如图1所示。其中,虚线框部分是概念层,其余部分是实例层。一种农药与某病/虫/草害或调节生长之间具有actOn关系,该关系具有属性:‘制剂用药量’和‘使用方法’;农药节点本身也具有属性:‘农药登记证号’、‘有效成分’和‘有效成分含量’。这些节点、关系和属性都要求在需要的时候能够实现
Web可视化。
图1 农药知识图谱的结构模型Fig.1 The Structure Model of Pesticide Knowledge Graph
把存储在 neo4j图数据库的农药知识图谱数据显示到前端的可视化系统的架构体系如图2所示。该架构的后端包括:图形数据库 neo4j用来存储网络节点及节点间的关系;一个基于 Python的 Web微框架Flask;neo4j的Python API包py2neo[8]。前端包括:用于显示节点及关系的cytoscape.js,AJAX用的库 jQuery.js。Cytoscape.js 是开源 JavaScript图形库,可以用它分析和制作可视化图形。
图2 农药知识图谱Web可视化的架构体系Fig.2 Framework of Web visualization of pesticide knowledge graph
添加需要的html/Javascript/css文件以满足功能要求,项目的目录结构如下:
| app.py
+---static
| +---css
| | style.css
| +---js
| code.js
| cytoscape.min.js
| jquery-1.11.2.min.js
| cytoscape-qtip.js
| jquery.qtip.css
| jquery.qtip.js
+---templates
| index.html
templates 目录用于存放html网页,index.html是网站的主页。flask应用程序 app.py对应到templates目录下找响应页面。 static 目录用于存放网站的静态文件,包括javascript文件和css文件。cytoscape.min.js是cytoscape必须的Javascript库;AJAX实现客户端与服务器端的异步通信,创建快速动态网页,jquery-1.11.2.min.js为网站提供AJAX交互;前台程序code.js调用cytoscape.min.js在前台生成网络关系图;style.css是自定义的样式表,cytoscape.min.js读取样式表初始化网络关系图的样式,如:画布的宽度,高度,背景;jquery.qtip.css、query.qtip.js和 cytoscape-qtip.js是 jquery的提示插件,用于鼠标点击时的消息提醒。
Cypher[9]是noe4j数据库的查询语言。本项目的主程序主要完成连接 neo4j图数据库,从主页获取查询条件,生成用Cypher语言描述的查询matchstr,通过调用py2neo的session.run(matchstr)语句查询农药知识图谱,得到图的节点和边,再构建web显示节点和边的信息,取得节点的id,属性(properties),标签(Label),返回图的节点和边的列表,构造网站动态图数据。
2.3.1 查询结果的可视化
用cytoscape.js画图的典型方法如下:
var cy = cytoscape({
container: document.getElementById('cy'), // 定义需要渲染的容器
elements:{
nodes:[/*...*/],
edges:[/*...*/]
},
style:[/*...*/],
layout<{ name:'cose'}
});
图3 显示用于‘水稻’病害的药剂(部分)Fig.3 Show pesticide for 'rice' disease (part)
该方法用cytoscape()函数生成cy,并为其设置各种属性,如:container,elements,style,layout等。其中,container定义需要渲染的容器,elements中的nodes是要显示的节点,edges是要显示的边,style,layout等规定了显示时的样式、布局,包括大小、前景、背景颜色等。还可以定义一些交互选项,如:图是否可缩放、缩放级别的界限、是否使用事件、是否启用平移、节点是否可拖动等。
查找用于‘水稻’病害的药剂(部分)如图 3所示。从图示可以看出,用于‘水稻’病害的药剂有:‘咪锰·多菌灵’和‘咪鲜胺’用于治疗‘恶苗病’,‘稻瘟灵’用于治疗‘稻瘟病’,‘丙环唑’、‘苯甲丙环唑’、‘噻呋酰胺’、‘己唑醇’用于治疗‘纹枯病’。
2.3.2 节点属性的可视化
在展示图中,当用户点击农药节点时要显示这种农药的属性,如:农药登记号 Registration-CertificateNo,有效成分 ActiveIngredient及其含量ActiveIngredientContent,其设置如下:
cy.nodes('[label ="AgriChem"]').qtip({
content:
{
text:function(){
return '有 效 成 分 :'+ this.data( 'ActiveIngredient')+'<br/> 有 效 成 分 含 量 :'+this.data('ActiveIngredientContent')
},
title:function(){ return ''+this.data('RegistrationCertificateNo')}
},
position:{[/*...*/]},
style:{[/*...*/]}
});
图4 显示农药节点的属性Fig.4 Show attribute of pesticide node
点击农药‘苯甲·丙环唑'节点显示其属性如图 4所示。从图示可以看出,农药‘苯甲·丙环唑’的‘农药登记证号’是LS20082140,有效成分是‘苯醚甲环唑,丙环唑’,有效成分含量是 300克/升,用于治疗水稻‘纹枯病’。
2.3.3 关系属性的可视化
在展示图中,当用户点击农药与某种病/虫/草害的actsOn关系时要显示这种关系的属性,如:制剂用药量Dosage和使用方法Usage,其设置如下:
cy.edges('[relationship ="actsOn"]').qtip({
content:
{
text:function(){ return ' 制 剂 用 药量 :'+this.data('Dosage')+'<br/> 使 用 方法:'+this.data('Usage')},
title:function(){ return ''+this.data('relationship')}
},
position:{[/*...*/]},
style:{[/*...*/]}
});
图5 显示农药与病害的actsOn关系的属性Fig.5 Show attribute of relation ‘actsOn'between pesticides and diseases
点击农药‘苯甲·丙环唑'与‘纹枯病’的 actsOn关系显示其属性如图5所示。从图示可以看出,农药‘苯甲·丙环唑'用于治疗水稻‘纹枯病’时,制剂用药量是 15-20毫升/亩,使用方法是喷雾。
本文介绍Neo4j农药知识图谱Web可视化的方法。该方法在分析农药知识图谱结构的基础上,搭建了基于 Flask的农药知识图谱可视化网站,从网页获取查询条件,生成用Cypher语言描述的查询语句,通过py2neo查询neo4j农药知识图谱,取得图的节点和边的信息,构造网站动态图数据,利用cytoscape.js实现查询结果的Web可视化。完善和扩展农药知识图谱,增加其它多种节点和关系的属性展示是进一步要完成的工作。