一种云计算模式下JSON数据可视化优化方法
技术领域
本发明涉及一种云计算模式下JSON数据可视化优化方法。
背景技术
云计算(Cloud Computing)是一种基于互联网的计算模式,其中,SaaS(软件即服务)是云计算的一种重要模式,把数据资源和功能通过云服务封装交付给用户使用。随着2000年REST(Representational State Transfer)架构风格的提出,REST服务逐渐成为软件即服务的一种重要实现技术架构。多样化的数据服务交叉融合了经济、医疗、体育、生活等多个领域,催生了巨量的数据。JSON(JavaScript Object Notation)是近年来流行的一种轻量级的数据交换格式,易于机器解析和生成。
数据可视化通过交互式可视化界面及数据-图像转换技术来辅助用户对数据进行分析理解。可视化的基础是数据,而网络数据时代的数据是多源异构的(multi-sourceheterogeneous),这带来了数据源集成,数据编排的问题。
众多领域的数据服务供应商提供了大量REST服务,各个服务有各自不同结构的数据响应方式与JSON响应格式,这为数据获取,数据解析带来了困难;因此,通过减少人为干预,自动化解析、编排异构的服务数据,使数据自动可视化,具有重要的现实意义。
知识图谱由Google公司于2012年6月正式提出,是一种基于图的数据结构。知识图谱是一种结构化的语义知识库,以图的形式来展现现实世界中各个实体及其相互之间的关系,并用形式化的方式来进行描述。知识图谱以“实体-关系-实体”或“实体-属性-属性值”的三元组表达形式存储,这些数据将构成可观的实体关系网络,即知识的“图谱”。
目前,虽然已经存在一些JSON的数据可视化建模方法,但这些方法的数据自动可视化效率较低,或者自动化生成的可视化图形存在大量的冗余图形,不利于用户理解与分析。知识图谱拥有高效的信息检索能力,强大的语义关系构建能力以及可视化呈现能力,将知识图谱与数据可视化相结合能更有效找出隐藏在数据背后的规律。
发明内容
本发明提出一种云计算模式下JSON数据可视化优化方法,利用网络语料构建网络语料库,对语料库中进行实体抽取,结合DBSCAN算法进行关系抽取构建知识图谱。对常见的可视化图形进行分析建模归纳构建可视化模型树VT,将Web服务返回的JSON数据构建成元数据树MDT;使用剪枝操作、降维调整以及基于子图同构匹配算法优化JSON数据的数据结构与可视化模型的结构匹配过程,获得符合条件的数据片段。通过查询知识图谱获取该数据片段中的属性组合是否存在语义关联,来进一步优化Web数据的可视化工作,提升有效图形生成的概率。
为了实现上述发明,采用的技术方案如下:
一种云计算模式下JSON数据可视化优化方法,所述方法包括以下步骤:
第一步、目标领域语料库的构建:把网络语料内容作为构建知识图谱的基础,使用网络语料词条信息作为原始语料内容,为构建知识图谱而对原始网络语料内容进行筛选。比较分析网络词条的网页内容,原始语料内容中除了标题和正文信息外,还包含了HTML标签,词条本身的编辑信息,网页链接信息与词条本身无关的冗余信息;对网络词条的内容进行过滤清洗,抽取标题与有效的正文内容。过滤内容包括:对词条的网页内容执行HTML标签/文本样式符号过滤、词条模板符号及非英文字符过滤、词条编辑信息过滤、图片信息过滤、链接信息过滤、页面专有标题属性名过滤以及数值过滤;
第二步、面向语料库的实体抽取:知识图谱是由实体与关系构成图结构的数据信息网,以“实体-关系-实体”的三元组来表示知识图谱的基础结构;三元组中包括了两个有现实语义关系的实体和两个实体间的关系,可以用G=(head,relation,tail)的形式来表示,其中G表示三元组,head表示头实体,tail表示尾实体,relation表示头实体和尾实体间的关系;每个实体本身还包含了属性及属性值,将实体的属性也转化为与该实体相连的尾实体,并在两者间建立relation关系。实体抽取分为命名实体抽取、属性实体抽取及名词实体抽取三个阶段;
第三步:结合Word2vec,对语料库进行指导性二次预分组,使用DBSCAN(Density-Based Spatial Clustering of Applications with Noise)聚类算法构建知识图谱:三元组G的结构为(head,relation,tail),随着head和tail的不同,relation也有多种关系,relation实际上是知识图谱中的关系集合,用以表示多种实体间的复杂联系,其目的在于判断两个属性间是否存在语义关联,即两个实体间是否存在关系,而不关注存在何种关系,通过计算语料库词汇的词向量,将语料库进行二次分组及其对应的词向量集进行二次分簇,使用DBSCAN聚类算法来抽取实体关系
第四步、构建可视化模型树(VisualModel Tree,简称VT):对可视化框架各种可视化图形进行分类,归纳总结各类图形的属性和结构特征,通过创建一种可视化模型树(VT),来形式化地表达各类图形信息;
第五步,定义元数据树MDT与MST元结构树,并将REST服务返回的JSON数据转化为MDT;然后,通过剪枝操作对MDT进行批量数据去重,生成MDT’;在MDT’的基础上,进行降维调整进一步抽取基本数据结构生成多个MST;最后,使用基于子图同构匹配算法,将每个元结构树MST与可视化模型树VT中每个的StructModel进行匹配,返回结果是以<M,VTypei>为元素构成的集合,其中M中的是MST中与可视化结构模型StructModeli匹配的数据片段,VTypei是可视化结构模型对应的可生成图形类型的集合;
第六步、基于网络语料知识图谱的数据可视化优化匹配方法:第五步中对MDT的剪枝操作、降维调整以及原结构树MST与可视化模型树(VT)中的StructModeli的匹配过程中都是以结构匹配为基础。在此基础上,通过第三步中构建的知识图谱中查询匹配出来的数据片段是否存在实际语义关联,根据查询结果优化第五步中的匹配算法,选取有效的维度组合,以提升自动化生成图形的精确率(Precision)。
进一步,所述第二步的过程为:
2.1、实体抽取:实体抽取又称为命名实体识别,是从文本数据集中自动识别出命名实体,这通常指的是人名、地名、机构名词以及其它所有名称为标识的实体,该流程通过使用一些主流的命名实体识别系统来完成,其步骤包括:一、通过工具对语料库内容进行命名实体识别;二、将识别出的命名实体标注它的类型属性;三、根据类型属性对命名实体进行过滤,删除不合适的命名实体,保留其它命名实体的标注,同时将词条名称默认定义为命名实体;
2.2、属性实体抽取:以词条网络语料的信息框为属性的来源,从信息框中提取属性,然后在语料库中截取每个词条的信息框信息,按照信息框结构,提取属性名称,作为所属词条的名称所对应的命名实体的尾实体,不保留属性值,若某词条不存在信息框,则不必为该词条对应的命名实体创建尾实体;
2.3、名词实体抽取,包括四个步骤:单词拆分(Split)、词性标注(POS Tagging)、停用词过滤(Stop Word Filtering)和词干提取(Stemming),命名实体抽取步骤中已经标注了识别出的命名实体,因此接下来的操作仅对标注的实体外的语料内容进行抽取。
所述第三步的流程如下:
其中,DBSCAN算法是一种基于密度的噪声应用空间聚类算法,该算法根据样本的密度分布来考查样本间的可连接性,并基于可连接的样本来扩展聚类簇,以获得最终的聚类结果;
3.1、使用Word2vec将语料库W训练成词向量簇Cube:Word2vec是一种词向量工具,它将词表示成词的特征向量,Word2vec将词转换成数值形式,使用一个N维向量来表示,将语料库W嵌入一个向量空间后得到词向量簇Cube,每一个词向量离散地分布于其中,根据词向量相互关联程度的疏密,分布状态也呈现出不同的聚集情况,通过分析词向量的聚集状态可以获得词的关联性分布状态,按照不同的亲疏关系对词向量进行分组,以获取词之间的关系,即实体间关系;
3.2、对语料库进行两次指导性预先分组:由于DBSCAN聚类算法的分簇易受数据集本身分布情况影响,为保证核心概念,即目标领域的主要分类对象或关键词为聚类中心,需要对语料库进行两次指导性预先分组;
3.3、在指导性分组的基础上,通过DBSCAN聚类算法对Cube中的每一个词向量簇cubez进行分簇并计算cubez的聚类中心Centroidz,对每一个新生成的词向量簇Ck计算簇心Centroidk,根据词向量对象与实体对象间的映射关系,查找出Centroidz与Centroidk所对应的实体Entityz与Entityk,以Entityz为头实体,Entityk为尾实体,默认实体关联为R,构建三元组(Entityz,R,Entityk),并加入三元组集合中,通过DBSACN聚类算法对每个语料集合自动查找聚类中心,进行分簇,同时构建三元组。
所述3.2的步骤如下:
3.2.1、对语料库W及其对应的词向量簇Cube进行一次分组,步骤如下:
3.2.1.1、提取语料库W中根语料标签,形成核心实体;通过爬虫获取网络语料并提取语料库中根语料标签的第一层子分类标签,并生成第一层子分类标签集合Tag={t1,t2...ti...tn},其中(1<=i<=n),共包含了n个子分类标签,每个标签都有一个对应的实体和词向量,并且将这些实体都与核心实体组合,构成若n个三元组,并加入三元组集合TP。
3.2.1.2、将分类标签集合Tag中的每个标签ti对应的词向量作为簇心,计算词向量簇Cube中各个数据点到各个质心的欧式距离,然后根据就近原则,将数据点分配至每个簇心所对应的簇中。此时语料库W被分为了n个语料集wi(1<=i<=n),语料集合wi对应的词向量簇为cubei。
3.2.2、对每个语料集合wi二次分组及其对应的词向量簇cubei进行二次分簇,按照第一次分组的步骤,其流程如下:
3.2.2.1、对于每个语料集合w
i及其对应的簇心标签t
i,提取簇心标签t
i为二级核心实体。通过爬虫获取网络语料并提取簇心标签的第一层子分类标签,并生成分类标签集合
其中(1<=j<=m
i,1<=i<=n),表示当前标签t
i共包含了m
i个子分类标签,每个标签都有一个对应的实体和词向量,并且将这些实体都与二级核心实体组合,构成m
i个三元组并加入三元组集合TP。
3.2.2.2、将步骤3.2.2.1中的Tag
i中的每个标签对应的词向量作为簇心,计算当前词向量簇cube
i中各个数据点到各个质心的欧式距离,然后根据就近原则,将数据点分配至每个簇心所对应的簇中。此时每个语料集合w
i被再次分为了m
i个语料集合w
ij,其中(1<=j<=m
i,1<=i<=n),既原始语料集合W被分为了
个语料集合w
ij,w
ij对应的词向量簇为cube
ij。
其中,步骤3.2.1.2中欧式距离(Euclidean Distance)是判断数据点所属类别的重要依据,假设有给定的样本
与
其中i,j=1,2,...,m,表示样本数,n表示特征数,欧式距离的计算方式为:
3.2.3、结合TF-IDF算法,查找出每个语料集合wij中的关键词,利用关键词对语料集合wij进行再次分组。
上述指导性的预先分组过程中所构建的三元组均加入三元组集合TP中,所获得的每一个词向量簇记为cubez,其对应的语料集合记为wz,其中z为自然数,表示Cube集合中簇的数量及语料集W中语料集合的数量;cubez的簇心记为Centroidz,其对应的实体对象为Entityz。
所述3.3的流程如下:
3.3.1、通过DBSCAN聚类算法对Cube中的每一个词向量簇cubez进行分簇并计算cubez的聚类中心Centroidz;
其中,步骤3.3.1中的DBSCAN聚类算法的执行流程如下:
3.3.1.1、在cubez中选取任意未访问过的样本p(即数据点p)为圆心,划出半径为ε的圆形邻域(即ε-邻域);
3.3.1.2、若ε-邻域中的样本数不小于minPts(邻域内最小样本数),则为p创建一个新的簇C,并将领域内的样本加入集合N;
3.3.1.3、对集合N内的样本p’重复步骤3.3.1.1和3.3.1.2,每次划分ε-邻域前都对p’的从属进行判断,若p’不属于任何簇,就将p’加入簇C;
3.3.1.4、当N中所有样本都被访问完毕,在cubez中选取另一未访问过的样本,并重复步骤3.3.1.1,直至cubez中的样本均被访问;
3.3.1.5、获得的聚类结果:簇集合;
3.3.2、对每一个新生成的词向量簇Ck计算簇心Centroidk,根据词向量对象与实体对象间的映射关系,查找出Centroidz与Centroidk所对应的实体Entityz与Entityk,以Entityz为头实体,Entityk为尾实体,默认实体关联为R,构建三元组(Entityz,R,Entityk),并加入三元组集合TP;
3.3.3、若聚类结果中最小簇的样本数量大于阈值Z时,将已获得的簇集合ClusDS作为输入,调整并减小(ε,minPts)值后,再次对每个簇进行聚类,执行步骤3.3.1与3.3.2;若聚类结果中最小簇的样本数量不大于阈值Z时,则查询出每个簇中各个样本所对应的实体Entityq,将其与所在簇的簇心所对应的实体EntityQ组合为多个三元组(EntityQ,R,Entityq);
其中,在DBSCAN聚类算法中,ε-邻域和minPts的大小是由cubez中的样本数量决定的,cubez样本数量越大,(ε,minPts)值越大,前期使用较大的邻域范围与邻域内最小样本数能够限制分簇数量,若使用较小的值,产生的大量细分组会导致信息过度分散,提取的簇心对应实体作为上层实体无法展现核心内容,递归调用DBSCAN算法时,按梯度递减调整(ε,minPts)值,减小邻域范围及最小样本数,依次对上一次聚类得到的簇再次进行分簇,缩小每个簇中的样本数量;
至此语料库W中所有的实体都与其他实体建立了关系,它们对应构成的三元组相互组合,从而构成了知识图谱,由于自动聚类所查找出的簇心与分簇情况,有可能会产生相关性较弱的实体关系,因此知识图谱构建完成后需要人工校对筛查,去除相关性低的实体关联,以提高知识图谱的质量。
所述第四步的过程为:
4.1、定义VT包括基础属性(BASICATTRIBUTE)和可视结构(DVSCHEMA)两个部分,形式化定义如(1),其中BASICATTRIBUTE保存了图形标题、副标题及其他文本样式的通用信息;
(1)、VT::=<BASICATTRIBUTE><DVSCHEMA>
4.2、BASICATTRIBUTE包括三个属性:标题(title)、子标题(subtitle)、属性(attributes),形式化定义如(2),title用于保存最终生成的可视化图形的标题,subtitle用于保存最终生成的可视化图形的子标题,attributes用于保存最终生成的可视化图形的位置、颜色组合、字体、字号设置参数;
(2)、BASICATTRIBUTE::=<title><subtitle><attributes>
4.3、BASICATTRIBUTE根据图形所需的数据类型、图形数据结构、图形维度将常见的可视化图形归纳为四种基础类别:一般图形(General)、拓扑图(Topology)、地图(Map)、文本图形(Text),形式化定义如(3);
(3)、DVSCHEMA::=<General><Topology><Map><Text>
4.4、步骤4.3中的四种基础类别下属均分别包含两个属性:图形类型(VType)和图形结构(StructModel),VType保存了该类别所属图形种类,StructModel保存了该类别所属图形的基本可视化结构,形式化定义如(4),“A::B”表示“A包含了属性B”;
(4)、DVSCHEMA::=<General><Topology><Map><Text>::<VType>
<StructModel>;
4.5、步骤4.4中四种基础类别均有各自的映射关系(Mapping),描述了各类图形的数据结构、数据维度、图形结构关系、数据映射位置信息;根据Mapping信息并结合图形的数据结构,可以抽象出各类图形的基本可视化结构StructModel。
所述4.4中,四种基础类别的VType属性的所属图形如下:
4.4.1、General包括柱状图(BarChart)、折线图(LineChart)、饼图(PieChart)、雷达图(RadarChart)、散点图(ScatterChart);
4.4.2、Topology包括网络图(NetworkChart)、树图(TreeMap)、面积树图(TreeMapChart);
4.4.3、Map包括地区地图(AreaMapChart)、国家地图(CountryMapChart)、世界地图(WorldMapChart);
4.4.4、Text包括词云(WorldCloudChart);
所述4.5中,各类图形的映射关系Mapping及基本可视化结构StructModel定义如下:
4.5.1、General类型中的图形通常用于表示二维数据或三维数据,可用二元组(XAxis,YAxis)或三元组(XAxis,YAxis,ZAxis)来表示信息,此类图形的Mapping结构如(5),其中LegendName表示图例名称,以ARRAY类型来存储各分组信息;根据Mapping结构可抽象出基础StructModel的结构如(6),StructModel的子节点为临时根节点Root,Root包含两个子节点:键值对K_V与图例节点LegendNode;
(5)、Mapping::=<XAxis,YAxis,[ZAxis]><LegendName>
(6)、StructModel::=<Root::<K_V><LegendNode>>
4.5.2、Topology类型中的图形通常用于表示拓扑关系数据,树图与面积树图可用嵌套的键值对{key:value,children:{key:value}}来表示属性结构,Mapping结构如(7);网络图可用节点集合(Nodes)和边集合(Links)来表示图结构,Mapping结构如(8),其中source表示一条边link的起始节点,target表示该条边link的指向节点;根据Mapping结构可抽象出基础StructModel的结构如(9),StructModel有两个子结构,Root1和Root2分别为两个子结构的临时根节点,Root1包含两个子节点:键值对K_V和孩子节点children,children的子结构为键值对K_V;Root2包含两个子节点:节点集合Nodes和边集合Links,节点集合的子节点为关键字key和值value,其中value可以为空,边集合的子节点为起点source和目标target;
(7)、Mapping::=<K_V><children::<K_V>>
(8)、Mapping::=<Nodes::<key,[value]><Links::<source><target>>
(9)、StructModel::=<Root1::<K_V><children::<K_V>>><Root2::<Nodes::<key,[value]>,<Links::<source><target>>>
4.5.3、Map类型中的图形通常用于表示地图信息,用键值对数组[{PlaceName:value}]或三元组数组[{lng,lat,value}]来表示地图信息,此类图形的Mapping结构如(10),其中PlaceName表示地名,lng表示纬度,lat表示经度;根据Mapping结构可抽象出基础StructModel的结构如(11),StructModel有两个子结构,Root1和Root2分别为两个子结构的临时根节点,Root1包含子子节点键值对K_V;Root2包含了三个子节点:经度lat,纬度lng,数值value;
(10)、Mapping::=<Data1::<PlaceName><value>><Data2::<lng><lat><value>>
(11)、StructModel::=<Root1::<K_V>>,<Root2::<lng>,<lat>,<value>>
4.5.4、Text类型中的图形常用二元组(Keyword,frequency)来表示关键字频率,此类图形的Mapping结构如(12),其中Keyword为文本中提取出的词汇,frequency表示该词汇在文本中的出现频率;根据Mapping结构可抽象出基础StructModel的结构如(13),StructModel的子节点为临时根节点Root,Root包含了键值对K_V;
(12)、Mapping::=<Keyword><frequency>
(13)、StructModel::=<Root::<K_V>>。
所述第五步的过程为:
5.1、定义元数据树MDT,包括根节点TRoot、索引节点INode、数据节点DNode,同时用深度level来表示节点在树结构中的层数,根节点默认为第一层,即level=1;
5.2、按照步骤5.1元结构树MDT的定义,把REST服务所返回的JSON数据,转化成元数据树MDT。
5.3、对MDT进行剪枝操作批量数据去重生成MDT’,保留Web服务返回JSON数据的基本的数据结构信息,缩小模型体量:
5.3.1、将MDT的根节点TRoot存入队列Queue;
5.3.2、队列Queue中的第一个节点出队列,记录为V,读取节点V的isMark属性。
5.3.2.1、若节点V的isMark属性值为1,则保留V的第一个子节点,剪除其余的子节点及其子节点的子树结构,跳转至步骤5.3.2.4;
5.3.2.2、若V节点的isMark属性值为0,则不进行任何操作,跳转至步骤5.3.2.4;
5.3.2.3、若V节点为DNode,则不进行任何操作,跳转至步骤5.3.3;
5.3.2.4、将V节点的子节点加入队列Queue,跳转至步骤5.3.3。
5.3.3、队列Queue为空时,停止当前遍历;当队列Queue不为空时,跳转到步骤5.3.2;
5.3.4、输出MDT剪枝后生成的MDT’。
5.4、对减枝生成的MDT’进降维调整,生成原结构树MST:由多层嵌套结构的JSON数据转换为元数据树,经过剪枝后,其中仍然包含许多对于JSON可视化的冗余索引关系,其中,越接近于DNode的INode,其节点关键字信息与DNode中保存的数据信息的相关度越高,因此,需要使用降维操作来减少冗余的索引信息,降维调整的流程如下所示:
5.4.1、定义元结构树MST(MetaStructure_Tree)为元数据数MDT’降维调整后的结果,包括有子树根节点STRoot(Subtree_Root),子结构(Substruct),形式化表达如式(24);其中子结构Substruct由引导节点(Guide_Node,简称GNode)和数据节点(Leaf_Node,简称LNode)两部分构成如式(25);根节点STRoot内包含的属性同MDT的TRoot;引导节点GNode内包含的属性同MDT的INode;叶子节点LNode内包含的属性同MDT的DNode;同时也用深度(level)来表示节点在树结构中的层数,STRoot默认为第一层,即level=1;
(24)、MST::=<Subtree_Root><Substruct>
(25)、Substruct::=<Guide_Node><Leaf_Node>
5.4.2、使用降维调整算法,对MDT’进行降维操作生成MST:首先根据宽度优先搜索策略在MDT’中查找星标节点,对批量数据进行定位并将其存入集合,然后按照存入集合的顺序倒序开始查找包含Dnode节点的子树结构,对MDT′进行降维,截取基础数据创建MST,其流程如下所示:
5.4.2.1、将MDT′作为降维调整算法的输入数据。
5.4.2.2、对MDT′进行宽度优先搜索,查找星标节点N,并按序将它们存入集合
5.4.2.3、按照节点的存入顺序,在集合S中按倒序遍历节点(集合S中的节点用n表示),查找是否有其它节点与节点n有相同的父节点。
5.4.2.3.1、若不存在这样的节点,则在MDT中,将该节点n及其子结构存储为一颗子树,如式(26),将n作为子树的根节点,将n的子结构作为根节点的子结构,再创建一个只有STRoot的MST,将子树作为STRoot的子结构存入MST,如式(27),并将对应的子树从MDT′中剪除;
(26)、Subtree(n)::=<subtree_root→n><Substruct→n.Substruct>
(27)、MST::=<Subtree_root><Substruct→Subtree(n)>
5.4.2.3.2、若存在这样的节点,则将这些拥有同一父节点的星标节点(node*)存入集合Q,在集合Q中查找是否存在两个星标节点(node*)符合VT中NetworkChart的结构要求,
5.4.2.3.2.1、若存在,则将这两个节点的父节点及其父节点的子结构一并存储为一个子树,如式(28),并将子树存入一个空的MST,以子树的根节点为MST的STRoot,如式(29),再将对应的子树从MDT′中剪除;
(28)、Subtree(n)::=<subtree_root→n.parent><Substruct→n.parent.Substruct>
(29)、MST::=<Substruct_Root→n.parent><Substruct→Subtree(n).Substruct>
5.4.2.3.2.2、若不存在,则Q中的每个星标节点(node*),按照步骤5.4.2.3.1行操作。
5.4.2.4、对生成的MST进行遍历,将isMark=1且只有一个子节点的INode判断为冗余节点,定义如式(30),将这个冗余节点从MST中移除并由其子结构替代它在MST中的位置;
(30)、RNode::=(RNode∈INode)∧(INode::isMark==0)∧(INode::subArray.length==1)
5.4.2.5、输出所有生成的元结构树MST
5.5、基于子图同构的匹配(Match)算法,把步骤5.4中生成的每个MST与可视化模型树(VT)中的StructModeli进行依次比较,查询匹配的数据片段。在匹配过程中,预设了判断条件来判定两个节点的一致性:Fattr用于判断两个节点的isMark、type、arrayNum属性是否一致;Frela用于判断两个节点与各自的父子节点的结构是否一致,基于子图同构匹配(Match)方法的流程如下所示:
5.5.1、初始化第一个匹配目标节点s为StructModeli的根节点;
5.5.2、在当前MST中查找与s符合Fattr条件的节点,将存入集合P;
5.5.3、将集合P中的节点依次与s进行Frela条件判断;若节点p与s的结构一致,将p加入集合M;若结构不一致,则继续在P中查找比较,直至P遍历完;
5.5.4、比较集合M构成的数据结构片段与StructModeli的结构是否一致;若两者结构不一致,则将s的子节点设为下一个匹配目标节点,清空集合P,并重复步骤5.5.2)至步骤5.5.4);若两者结构一致则输出集合M与StructModeli所对应的VTypei;
其中,当MST与VT中StructModeli中成功匹配时,将会返回m个匹配结果<M,VTypei>,每个匹配结果包含当前MST中与图形模型StructModeli匹配的数据结构片段集合M与该图形模型StructModeli对应可生成的图形类型的集合VTypei。
本发明的有益效果主要表现在:在JSON数据生成可视化图形时,可以通过本方法对常见可视化框架可视化图形进行分析归纳建模,将JSON数据构建成可视化模型树,使用剪枝操作、降维调整以及基于子图同构匹配算法优化JSON数据的数据结构与可视化模型的结构匹配,减少JSON自动可视化过程中的干扰信息,提高模型匹配效率。利用网络语料数据构建一个网络语料知识图谱,减少了冗余图形生成,提高了有效图形的生成率。同时,在数据自动可视化过程中减少人工参与筛选图形的工作,简化了Web数据可视化流程。
附图说明
图1示出了语料库分组及词向量集合分簇流程图。
图2示出了基于DBSACN算法的知识图谱构建流程图。
图3示出了可视模型树VT的结构图。
具体实施方式
下面结合附图对本发明作进一步描述。
参照图1~图3,基于DBSCAN聚类算法的知识图谱关系抽取与REST服务可视化融合方法,包括以下步骤:
第一步、目标领域语料库的构建:以网络语料(例如维基百科Wikipedia)的语料内容作为构建知识图谱的基础,提升领域语料库内容的文本质量及内容的全面性,使用网络语料词条信息作为原始语料内容,为构建知识图谱对原始网络语料内容进行筛选,分析词条的网页内容发现,语料内容中除了标题和正文信息外,还包含了HTML标签,词条本身的编辑信息,网页链接信息等与词条本身无关的冗余信息,对目标词条语料进行过滤清洗,抽取标题与有效的正文内容。过滤内容包括:对目标词条的网页内容执行HTML标签/文本样式符号过滤(例如删除<hl>text</hl>,<p>text<p>,<div>text</div>等HTML标签,并且保留text文本;删除span{font-color:#effefe;}等样式符号),词条编辑信息过滤(例如删除[edit]标签),图片信息过滤(例如删除<img src=’...’/>图片标签),链接信息过滤(例如删除<a href=″...″title=″..″>text</a>超链接标签<a>,并保留文本信息),页面专有标题/属性名过滤(例如删除Further reading,External links等专有标题和属性名)及数值过滤(例如删除20,30等数值);
例如,利用维基百科(Wikipedia)网络语料库,通过爬虫获取维基百科竞技体育(Athletic sports)网页内容,过滤筛选后获取得包含竞技体育(Athletic sports)及其子分类的词条语料内容;
第二步、面向语料库的实体抽取:知识图谱是由实体与关系构成图结构的数据信息网,以“实体-关系-实体”的三元组来表示知识图谱的基础结构,三元组中包括了两个有现实语义关系的实体和两个实体间的关系,可以用G=(head,relation,tail)的形式来表示,其中G表示三元组,head表示头实体,tail表示尾实体,relation表示头实体和尾实体间的关系,每个实体本身还包含了属性及属性值,将实体的属性也转化为与该实体相连的尾实体,并在两者间建立relation关系。实体抽取分为命名实体抽取、属性实体抽取及名词实体抽取三个阶段;
2.1、实体抽取:实体抽取又称为命名实体识别,是从文本数据集中自动识别出命名实体,这通常指的是人名,地名,机构名词以及其它所有名称为标识的实体,该流程可通过使用一些主流的命名实体识别系统来完成,如Standtord NER能够将文本中的实体按类标记出来,能够识别包括Time,Location,Person,Date,Organization,Money,Percent等七类属性,使用它作为工具对语料库内容进行命名实体识别,识别出的命名实体标注了它的类型属性,其主要流程为:一、通过工具对语料库内容进行命名实体识别;二、将识别出的命名实体标注它的类型属性;三、根据类型属性对命名实体进行过滤,删除不合适的命名实体,保留其它命名实体的标注,同时将词条名称默认定义为命名实体;
2.2、属性实体抽取:以词条网络语料的信息框为属性的来源,从信息框中提取属性,然后在语料库中截取每个词条的信息框信息,按照信息框结构,提取属性名称,作为所属词条的名称所对应的命名实体的尾实体,不保留属性值,若某词条不存在信息框,则不必为该词条对应的命名实体创建尾实体,以维基百科(Wikipedia)中词条“NationalBasketball Association(NBA)”的信息框(Info Box)为例,它以表格的形式构成,第1行第1列的内容为“Sport”,第1行第2列内容为“Basketball”,第2行第1列的内容为“Founded”,第2行第2列内容为“June 6,1946;73 years ago”等,提取第一列内容“Sport”,“Founded”分别与词条“National Basketball Association(NBA)”构建三元组;
2.3、名词实体抽取,包括四个步骤:单词拆分(Split)、词性标注(POS Tagging)、停用词过滤(Stop Word Filtering)、词干提取(Stemming),命名实体抽取步骤中已经标注了识别出的命名实体,因此接下来的操作仅对标注的实体外的语料内容进行抽取;
2.3.1、单词拆分:使用正则表达式设计拆分规则模式,根据空格、符号、段落对语料库内容进行单词拆分,获取单词文本;
2.3.2、词性标注:为获取语料库中的名词,首先需要对文本词汇进行词性标注。词性标注也被称为语法标注或词类消疑,是语料库语言学中将语料库内单词的词性按其含义和上下文内容进行标记的文本数据处理技术,许多单词可能同时含有多个词性,拥有多种意义,而其词性的选择取决于上下文意义。将已进行命名实体标注的语料库作为标注对象文本进行词性标注,根据标注结果查找出名词对象,并在语料库中剔除非名词对象,但不包括非名词的词条名称,此时语料库中保留的是每个词条中的命名实体、名词对象及原有标点,并且所有内容仍然保持原有文本顺序;
2.3.3、停用词过滤:停用词这一名称来源于Stop Word,指代在信息检索中为了节省存储空间和提高搜索效率,在处理自然语言文本时自动过滤掉的字或词,对于一个给定的目的,任何一类词语都可以被选作停用词,在本发明中停用词主要包括两类:一类是人类语言中包含的功能词(Function Words),常为冠词、连词、副词或介词等,这类功能词使用非常普遍,出现频率极高,但又没有确切的实际含义,如a、an、the、which、on等等;;另一类为实词(Content Words),这里指一部分有实际具体意义但又无明确指代或指向的词,如want、welcome、enough、consider、indeed等,在自然语言处理中,已有了停用词表(StopWord List),将停用词表作为参照字典,通过单词比对从语料库中删除停用词,进一步精简语料库内容,确保保留语料中无停用词;
2.3.4、词干提取:词干化提取是一种去除形态词缀得到对应词根的过程,是英语等西方语言特有的处理过程,同一个英文单词有单数和复数的变形(如apple和apples)、ing和ed等时态的变形(如doing和did)、人称代词对应不同谓语的变形(如like和likes)等,这些词虽然形式上有一些细微差别,但是都对应着相同的词根,在计算相关性的情况下应该作为相同的词来进行处理,这时就需要进行词干化处理,波特词干算法(PorterStemming Algorithm)是一种主流的词干提取算法,其核心理念是根据形态词缀的类型,对单词进行分类处理还原,除了部分特殊的变形,大多数的单词变形是有一定规律的,依照规律将变形分为6种类别,词干的提取步骤如下:
2.3.4.1、依照单词变形类别,针对每一种情况进行词缀去除与单词复原,获得语料库中名词对象的词干信息,以减少同词不同形的情况。6种不同单词变形如下:
2.3.4.1.1、复数、以ed和ing结尾的单词;
2.3.4.1.2、单词中包含元音,并以y结尾的单词;
2.3.4.1.3、双后缀的单词;
2.3.4.1.4、以-ic,-ful,-ness,-ative等为后缀的单词;
2.3.4.1.5、<c>vcvc<v>情形下,-ant,-ence等后缀的单词(c为辅音,v为元音);
2.3.4.1.6、<c>vc<v>元音辅音间有超过1对vc的情形下,以e结尾的单词;
2.3.4.2、将还原为词干的名词对象创建为名词实体,并在语料库中更新名词对象,用词干形式来表示;
第三步:结合Word2vec,对语料库进行指导性二次预分组,使用DBSCAN(Density-Based Spatial Clustering of Applications with Noise)聚类算法构建知识图谱:三元组G的结构为(head,relation,tail),随着head和tail的不同,relation也有多种关系,relation实际上是知识图谱中的关系集合,用以表示多种实体间的复杂联系,其目的在于判断两个属性间是否存在语义关联,即两个实体间是否存在关系,而不关注存在何种关系,参照图1,通过计算语料库词汇的词向量,将语料库进行二次分组及其对应的词向量集合进行二次分簇;参照图2,使用DBSCAN聚类算法来抽取实体关系,其流程如下:
其中,DBSCAN算法是一种基于密度的噪声应用空间聚类算法,该算法根据样本的密度分布来考查样本间的可连接性,并基于可连接的样本来扩展聚类簇,以获得最终的聚类结果;
3.1、使用Word2vec将语料库W训练成词向量簇Cube:Word2vec是一种词向量工具,它将词表示成词的特征向量,Word2vec将词转换成数值形式,使用一个N维向量来表示。将语料库W嵌入一个向量空间后得到词向量簇Cube,每一个词向量离散地分布于其中,根据词向量相互关联程度的疏密,分布状态也呈现出不同的聚集情况。通过分析词向量的聚集状态可以获得词的关联性分布状态,按照不同的亲疏关系对词向量进行分组,以获取词之间的关系,即实体间关系;
3.2、对语料库进行两次指导性预先分组:由于DBSCAN聚类算法的分簇易受数据集本身分布情况影响,为保证核心概念,即目标领域的主要分类对象或关键词为聚类中心,需要对语料库进行两次指导性预先分组,其步骤如下:
3.2.1、对语料库W及其对应的词向量簇Cube进行一次分组,步骤如下:
3.2.1.1、提取语料库W中根语料标签,形成核心实体;通过爬虫获取网络语料并提取语料库中根语料标签的第一层子分类标签,并生成第一层子分类标签集合Tag={t1,t2...ti...tn},其中(1<=i<=n),共包含了n个子分类标签,每个标签都有一个对应的实体和词向量,并且将这些实体都与核心实体组合,构成n个三元组,并加入三元组集合TP;
3.2.1.2、将分类标签集合Tag中的每个标签ti对应的词向量作为簇心,计算词向量簇Cube中各个数据点到各个质心的欧式距离,然后根据就近原则,将数据点分配至每个簇心所对应的簇中,此时语料库W被分为了n个语料集wi(1<=i<=n),语料集合wi对应的词向量簇为cubei;
3.2.2、对每个语料集合wi及其对应的词向量簇cubei进行二次分组,按照第一次分组的步骤,其流程如下:
3.2.2.1、对于每个语料集合w
i及其对应的簇心标签t
i,提取簇心标签t
i为二级核心实体,通过爬虫获取网络语料并提取簇心标签的第一层子分类标签,并生成分类标签集合
其中(1<=j<=m
i,1<=i<=n),表示当前标签t
i共包含了m
i个子分类标签,每个标签都有一个对应的实体和词向量,并且将这些实体都与二级核心实体组合,构成m
i个三元组并加入三元组集合TP;
3.2.2.2、将步骤3.2.2.1中的Tag
i中的每个标签对应的词向量作为簇心,计算当前词向量簇cube
i中各个数据点到各个质心的欧式距离,然后根据就近原则,将数据点分配至每个簇心所对应的簇中。此时每个语料集合w
i被再次分为了m
i个语料集合w
ij,其中(1<=j<=m
i,1<=i<=n),既原始语料集合W被分为了
个语料集合w
ij,w
ij对应的词向量簇为cube
ij;
其中,步骤3.2.1.2中欧式距离(Euclidean Distance)是判断数据点所属类别的重要依据,假设有给定的样本
与
其中i,j=1,2,...,m,表示样本数,n表示特征数,欧式距离的计算方式为:
例如,首先对构建的竞技体育(Athletic sports)语料库W实体数据集进行一次指导性预分类,将先前爬取的竞技体育(Athletic sports)维基百科语料标签第一层子分类标签提取出来,形成标签集合Tag={“Association football”,“Baseball”“Badminton”,“Basketball”,“Beach soccer”,...},其中共包含了n=55个子分类标签,每个标签都有一个对应的实体和Word2vec训练出来的词向量,并且这些实体都与核心实体“Athleticsports”相连,构成55个三元组。再将这些标签对象作为质心,计算数据集中各个数据点到各个质心的欧式距离,然后根据就近原则,将数据点分配至每个质心所对应的类中,此时,获得了以赛事种类为质心的55个簇,即55个分组数据集,同时语料库W也被分为了55个语料集合;
然后以簇心标签tx=“Association football”以及对应的语料集合wx以为例,进行二次分组,按照第一次分组的步骤获取“Association football”的子分类标签,其子分类标签Tagx包括“competition”、“club”、“player”、“country”、“venues”、“referee”、“manager”,然后为这七个标签构建实体,与“Association football”组合构成三元组,加入三元组集合TP。然后按照第一次分组的步骤,以这些标签对应的词向量为簇心,将以“Association football”为簇心的语料集中的样本以欧氏距离为依据进行再次分组,从而生成新的分簇,及其对应的语料集合,此时,簇心标签为“Association football”的语料集合wx被分为7个簇,即7个分组数据集,同时语料集合wx也被分为了7个语料集合;
3.2.3、结合TF-IDF算法,查找出每个语料集合wij中的关键词,利用关键词对语料集合wij进行再次分组;
3.2.3.1、利用TF-IDF算法,查找出每个语料集合wij中的关键词;
其中,步骤3.2.3中TF-IDF算法是一种用于评估一个词对指定文档的重要性的数值统计方法,词频TF(Term Frequency)指给定词在给定文档中出现的频率,其计算公式为:
nx,y指文档y中术语x出现的次数,∑knk,y指文档y中总的词汇数,逆向文档频率IDF(Inverse Document Frequency)是用于评估单词或术语提供的信息量,即该术语在整个文档中是否常见,其计算公式为:
N指文档的总数,nx指出现术语x的文档数量,文本中每一个词条作为一个文档,最后共同计算TF与IDF的值,获得TF-IDT的公式为:
TF-IDFx,y=TFx,y×IDFx
3.2.3.2、对每个语料集合wij的关键词进行人工筛选,去除与当前语料集合的核心实体相关性低的关键词,保留相关性最高的部分关键词,保留关键词数量与提取出的所有关键词的整体质量相关;
3.2.3.3、将每个语料集合中提取出的并通过筛选的关键词所对应的实体与当前语料集合的核心实体构建三元组,加入三元组集合TP,然后以这些关键词的词向量为簇心,再一次进行欧氏距离计算,对每个语料集合wij及其对应的词向量cubeij进行分组;
3.2.3.4、以这些关键词为每个语料集合wij中的质心,再进行一次集合中的数据点到各个质心的欧氏距离计算,并对数据点进行分类。原语料库此时已经被划分为多个语料集合wz;
上述指导性的预先分组过程中所构建的三元组均加入三元组集合TP中,所获得的每一个词向量簇记为cubez,其对应的语料集合记为wz,其中z为自然数,表示Cube集合中簇的数量及语料集W中语料集合的数量;cubez的簇心记为Centroidz,其对应的实体对象为Entityz;
例如,通过TF-IDF计算查找出每个语料集合中的关键词,例如“Associationfootball”类别下的“competition”分簇所对应的语料集合中,有“score”,“winner″foul”,“pass”,“goal”,“shot”等关键词,但也有些词汇虽然出现频繁但与“competition”的关联性并不强,如“phase″list″year″body″finals”等。所以对于每个语料集合的关键词需要人工介入筛选,去除与当前簇心所对应的实体相关性低的关键词,而保留相关性较高的部分关键词,将每个语料集合中筛选出的关键词所对应的实体,与当前簇心所对应的实体进行组合,构建以后者为头实体的三元组。然后以这些关键词的词向量为簇心,再一次进行欧氏距离计算,对词向量簇和语料集合进行分组;
3.3、在指导性分组的基础上,通过DBSCAN聚类算法对Cube中的每一个词向量簇cubez进行分簇并计算cubez的聚类中心Centroidz,对每一个新生成的词向量簇Ck计算簇心Centroidk,根据词向量对象与实体对象间的映射关系,查找出Centroidz与Centroidk所对应的实体Entityz与Entityk,以Entityz为头实体,Entityk为尾实体,默认实体关联为R,构建三元组(Entityz,R,Entityk),并加入三元组集合中,通过DBSACN聚类算法对每个语料集合自动查找聚类中心,进行分簇,同时构建三元组,流程如下:
3.3.1、通过DBSCAN聚类算法对Cube中的每一个词向量簇cubez进行分簇并计算cubez的聚类中心Centroidz;
其中,步骤3.3.1中的DBSCAN聚类算法的执行流程如下:
3.3.1.1、在cubez中选取任意未访问过的样本p(即数据点p)为圆心,划出半径为ε的圆形邻域(即ε-邻域);
3.3.1.2、若ε-邻域中的样本数不小于minPts(邻域内最小样本数),则为p创建一个新的簇C,并将领域内的样本加入集合N;
3.3.1.3、对集合N内的样本p’重复步骤3.3.1.1和3.3.1.2,每次划分ε-邻域前都对p’的从属进行判断,若p’不属于任何簇,就将p’加入簇C;
3.3.1.4、当N中所有样本都被访问完毕,在cubez中选取另一未访问过的样本,并重复步骤3.3.1.1,直至cubez中的样本均被访问;
3.3.1.5、获得的聚类结果:簇集合;
3.3.2、对每一个新生成的词向量簇Ck计算簇心Centroidk,根据词向量对象与实体对象间的映射关系,查找出Centroidz与Centroidk所对应的实体Entityz与Entityk,以Entityz为头实体,Entityk为尾实体,默认实体关联为R,构建三元组(Entityz,R,Entityk),并加入三元组集合TP;
3.3.3、若聚类结果中最小簇的样本数量大于阈值Z时,将已获得的簇集合ClusDS作为输入,调整并减小(ε,minPts)值后,再次对每个簇进行聚类,执行步骤3.3.1与3.3.2;若聚类结果中最小簇的样本数量不大于阈值Z时,则查询出每个簇中各个样本所对应的实体Entityq,将其与所在簇的簇心所对应的实体EntityQ组合为多个三元组(EntityQ,R,Entityq);
其中,在DBSCAN聚类算法中,ε-邻域和minPts的大小是由cubez中的样本数量决定的,cubez样本数量越大,(ε,minPts)值越大。前期使用较大的邻域范围与邻域内最小样本数能够限制分簇数量,若使用较小的值,产生的大量细分组会导致信息过度分散,提取的簇心对应实体作为上层实体无法展现核心内容。递归调用DBSCAN算法时,按梯度递减调整(ε,minPts)值,减小邻域范围及最小样本数,依次对上一次聚类得到的簇再次进行分簇,缩小每个簇中的样本数量;
至此语料库W中所有的实体都与其他实体建立了关系,它们对应构成的三元组相互组合,从而构成了知识图谱,由于自动聚类所查找出的簇心与分簇情况,有可能会产生相关性较弱的实体关系,因此知识图谱构建完成后需要人工校对筛查,去除相关性低的实体关联,以提高知识图谱的质量;
例如,原竞技体育(Athletic sports)语料库此时已经被划分为多个语料集合,接下来通过DBSCAN聚类算法自动查找聚类中心,进行分簇,同时构建三元组,指定k的大小由语料集合的大小决定,越大的集合k值越大。最后计算得到的质心所对应的实体将与上一层分组时的质心所对应的实体构建三元组。然后将新的分组作为数据集合,再次调用DBSCAN算法,重复上述操作,直至每个分组仅含有小于10个数据点(此时阈值Z=10),最终每个分组中的数据点所对应的实体与当前质心所对应的实体构建三元组,至此竞技体育(Athletic sports)语料库中所有的实体都与其他实体建立了关系,它们对应构成的三元组相互组合,从而构成了知识图谱,但自动聚类所查找出的质心与分簇情况有时可能会产生相关性较弱的实体关联,因此最终还需要人工的校对筛查,去除相关性极低的实体关联;
第四步、构建可视化模型树(VisualModel Tree,简称VT):对可视化框架中各种可视化图形进行分类,归纳总结各类图形的属性和结构特征,通过创建一种可视化模型树(VT),来形式化地表达各类图形信息;
4.1、定义VT包括基础属性(BASICATTRIBUTE)和可视结构(DVSCHEMA)两个部分,形式化定义如(1),其中BASICATTRIBUTE保存了图形标题、副标题及其他文本样式的通用信息;
(1)、VT::=<BASICATTRIBUTE><DVSCHEMA>
4.2、BASICATTRIBUTE包括三个属性:标题(title)、子标题(subtitle)、属性(attributes),形式化定义如(2),title用于保存最终生成的可视化图形的标题,subtitle用于保存最终生成的可视化图形的子标题,attributes用于保存最终生成的可视化图形的位置、颜色组合、字体、字号设置参数;
(2)、BASICATTRIBUTE::=<title><subtitle><attributes>
4.3、BASICATTRIBUTE根据图形所需的数据类型、图形数据结构、图形维度将常见的可视化图形归纳为四种基础类别:一般图形(General)、拓扑图(Topology)、地图(Map)、文本图形(Text),形式化定义如(3);
(3)、DVSCHEMA::=<General><Topology><Map><Text>
4.4、步骤4.3中的四种基础类别下属均分别包含两个属性:图形类型(VType)和图形结构(StructModel),VType保存了该类别所属图形种类,StructModel保存了该类别所属图形的基本可视化结构,形式化定义如(4),“A::B”表示“A包含了属性B”;
(4)、DVSCHEMA::=<General><Topology><Map><Text>::<VType><StructModel>
步骤4.4中,四种基础类别的VType属性的所属图形如下:
4.4.1、General包括柱状图(BarChart)、折线图(LineChart)、饼图(PieChart)、雷达图(RadarChart)、散点图(ScatterChart);
4.4.2、Topology包括网络图(NetworkChart)、树图(TreeMap)、面积树图(TreeMapChart);
4.4.3、Map包括地区地图(AreaMapChart)、国家地图(CountryMapChart)、世界地图(WorldMapChart);
4.4.4、Text包括词云(WorldCloudChart);
4.5、步骤4.4中四种基础类别均有各自的映射关系(Mapping),描述了各类图形的数据结构、数据维度、图形结构关系、数据映射位置信息;根据Mapping信息并结合图形的数据结构,可以抽象出各类图形的基本可视化结构StructModel。
所述4.5中,各类图形的映射关系Mapping及基本可视化结构StructModel定义如下:
4.5.1、General类型中的图形通常用于表示二维数据或三维数据,可用二元组(XAxis,YAxis)或三元组(XAxis,YAxis,ZAxis)来表示信息,此类图形的Mapping结构如(5),其中LegendName表示图例名称,以ARRAY类型来存储各分组信息;根据Mapping结构可抽象出基础StructModel的结构如(6),StructModel的子节点为临时根节点Root,Root包含两个子节点:键值对K_V与图例节点LegendNode;
(5)、Mapping::=<XAxis,YAxis,[ZAxis]><LegendName>
(6)、StructModel::=<Root::<K_V><LegendNode>>
4.5.2、Topology类型中的图形通常用于表示拓扑关系数据,树图与面积树图可用嵌套的键值对{key:value,children:{key:value}}来表示属性结构,Mapping结构如(7);网络图可用节点集合(Nodes)和边集合(Links)来表示图结构,Mapping结构如(8),其中source表示一条边link的起始节点,target表示该条边link的指向节点;根据Mapping结构可抽象出基础StructModel的结构如(9),StructModel有两个子结构,Root1和Root2分别为两个子结构的临时根节点,Root1包含两个子节点:键值对K_V和孩子节点children,children的子结构为键值对K_V;Root2包含两个子节点:节点集合Nodes和边集合Links,节点集合的子节点为关键字key和值value,其中value可以为空,边集合的子节点为起点source和目标target;
(7)、Mapping::=<K_V><children::<K_V>>
(8)、Mapping::=<Nodes::<key,[value]><Links::<source><target>>
(9)、StructModel::=<Root1::<K_V><children::<K_V>>><Root2::<Nodes::<key,[value]>,<Links::<source><target>>>
4.5.3、Map类型中的图形通常用于表示地图信息,用键值对数组[{PlaceName:value}]或三元组数组[{lng,lat,value}]来表示地图信息,此类图形的Mapping结构如(10),其中PlaceName表示地名,lng表示纬度,lat表示经度;根据Mapping结构可抽象出基础StructModel的结构如(11),StructModel有两个子结构,Root1和Root2分别为两个子结构的临时根节点,Root1包含子子节点键值对K_V;Root2包含了三个子节点:经度lat,纬度lng,数值value;
(10)、Mapping::=<Data1::<PlaceName><value>><Data2::<lng><lat><value>>
(11)、StructModel::=<Root1::<K_V>>,<Root2::<lng>,<lat>,<value>>
4.5.4、Text类型中的图形常用二元组(Keyword,frequency)来表示关键字频率,此类图形的Mapping结构如(12),其中Keyword为文本中提取出的词汇,frequency表示该词汇在文本中的出现频率;根据Mapping结构可抽象出基础StructModel的结构如(13),StructModel的子节点为临时根节点Root,Root包含了键值对K_V;
(12)、Mapping::=<Keyword><frequency>
(13)、StructModel::=<Root::<K_V>>
第五步,定义元数据树MDT与MST元结构树,并将REST服务返回的JSON数据转化为MDT;然后,通过剪枝操作对MDT进行批量数据去重,生成MDT’;在MDT’的基础上,进行降维调整进一步抽取基本数据结构生成多个MST;最后,使用基于子图同构匹配算法,将每个元结构树MST与可视化模型树VT中每个的StructModel进行匹配,返回结果是以<M,VTypei>为元素构成的集合,其中M中的是MST中与可视化结构模型StructModeli匹配的数据片段,VTypei是可视化结构模型对应的可生成图形类型的集合;
5.1、定义元数据树MDT,包括根节点TRoot、索引节点INode、数据节点DNode,同时用深度level来表示节点在树结构中的层数,根节点默认为第一层,即level=1;
5.1.1、根节点TRoot,MDT的根节点,即MDT的起始节点,根节点内部包含以下信息:
5.1.1.1、星标isMark:记录JSON数据中最外层结构是否为数组类型,若是用1标记,若否用0标记;isMark形式化定义表述如(14)(15),isMark的数据类型为数字NUMBER,若JSON数据中“键-值”对中的值VALUE为数组ARRAY,则isMark=1,否则isMark=0;“#”为数据类型定义符,“::=”为赋值符,
表示若A符合条件condition,则该式值为B,否则该式值为C;
(14)、“isMark”#<NUMBER>
5.1.1.2、元素数量arrayNum:若当前节点的isMark为1,则记录数组元素个数,若当前节点的isMark为0,则用0标记;arrayNum形式化定义表述如(16)(17),arrayNum属性值为数字NUMBER类型,若JSON数据中“键-值”对中的值VALUE为ARRAY,则arrayNum等于VALUE数组的长度,否则arrayNum=0;
(16)、“arrayNum”#<NUMBER>
5.1.2、索引节点INode:代表JSON数据中每一个关键字KEY,但不包括JSON数据中最内层的“键-值”对的关键字,索引节点为非根节点、非叶子节点。索引节点内部包含以下信息:
5.1.2.1、节点名称name:name的数据类型为字符串STRING,name属性值为JSON数据中“键-值”对中的关键字KEY;name形式化定义表述如(18)(19);
(18)、“name”#<STRING>
(19)、“name”::=<KEY>
5.1.2.2、节点值类型vType:vType是JSON数据中“键-值”对中的值VALUE的数据类型,属性值为对象OBJECT、数组ARRAY、字符串STRING、数字NUMBER、TRUE、FALSE之一;vType形式化定义表述如(20);
(20)、“vType”::=[OBJECT|ARRAY|STRING|NUMBER|TRUE|FALSE]
5.1.2.3、星标(isMark):记录JSON数据中,以当前节点名称name作为关键字的“键-值”对中的值VALUE是否为数组类型,若是用1标记,若否用0标记;isMark形式化定义表述同步骤5.1.1.1中的(14)(15);
5.1.2.4、元素数量arrayNum:若当前节点的isMark为1,则记录“键-值”对中的值VALUE的数组元素个数,若当前节点的isMark为0,则用0标记;arrayNum形式化定义表述同步骤5.1.1.2中的(16)(17)。
5.1.3、数据节点DNode:代表JSON数据中最内层的“键-值”对,存储为叶子节点。数据节点的内部包括以下信息:
5.1.3.1、节点名称name:保存JSON数据中“键-值”对中的关键字KEY,数据类型为字符串STRING;name形式化定义表述同步骤5.1.2.1中的(18)(19);
5.1.3.2、节点值nValue:nValue的数据类型为STRING,属性值为JSON数据中“键-值”对中的值VALUE;nValue形式化定义表述如(21)(22);
(21)、“nValue”#<STRING>
(22)、“nValue”::=<VALUE>
5.1.3.3、节点类型type:保存JSON数据中“键-值”对中的值VALUE的数据类型,为“str”、“num”或NULL,其中“str”代表type的数据类型为STRING,“num”代表type的数据类型为NUMBER,NULL表示type的属性值为空;type形式化定义表述如(23);
(23)、“type”::=[“str”|“num”|NULL]。
5.2、按照步骤5.1元结构树MDT的定义,把REST服务所返回的JSON数据,转化成元数据树MDT。
5.3、对MDT进行剪枝操作批量数据去重生成MDT’,保留Web服务返回JSON数据的基本的数据结构信息,缩小模型体量:-
5.3.1、将MDT的根节点TRoot存入队列Queue;
5.3.2、队列Queue中的第一个节点出队列,记录为V,读取节点V的isMark属性。
5.3.2.1、若节点V的isMark属性值为1,则保留V的第一个子节点,剪除其余的子节点及其子节点的子树结构,跳转至步骤5.3.2.4;
5.3.2.2、若V节点的isMark属性值为0,则不进行任何操作,跳转至步骤5.3.2.4;
5.3.2.3、若V节点为DNode,则不进行任何操作,跳转至步骤5.3.3;
5.3.2.4、将V节点的子节点加入队列Queue,跳转至步骤5.3.3。
5.3.3、队列Queue为空时,停止当前遍历;当队列Queue不为空时,跳转到步骤5.3.2;
5.3.4、输出MDT剪枝后生成的MDT’。
5.4、对减枝生成的MDT’进降维调整,生成原结构树MST:由多层嵌套结构的JSON数据转换为元数据树,经过剪枝后,其中仍然包含许多对于JSON可视化的冗余索引关系,其中,越接近于DNode的INode,其节点关键字信息与DNode中保存的数据信息的相关度越高,因此,需要使用降维操作来减少冗余的索引信息,降维调整的具体流程如下所示:
5.4.1、定义元结构树MST(MetaStructure_Tree)为元数据数MDT’降维调整后的结果,包括有子树根节点STRoot(Subtree_Root),子结构(Substruct),形式化表达如式(24);其中子结构Substruct由引导节点(Guide_Node,简称GNode)和数据节点(Leaf_Node,简称LNode)两部分构成如式(25);根节点STRoot内包含的属性同MDT的TRoot;引导节点GNode内包含的属性同MDT的INode;叶子节点LNode内包含的属性同MDT的DNode;同时也用深度(level)来表示节点在树结构中的层数,STRoot默认为第一层,即level=1;
(24)、MST::=<Subtree_Root><Substruct>
(25)、Substruct::=<Guide_Node><Leaf_Node>
5.4.2、使用降维调整算法,对MDT’进行降维操作生成MST:首先根据宽度优先搜索策略在MDT’中查找星标节点,对批量数据进行定位并将其存入集合。然后按照存入集合的顺序倒序开始查找包含Dnode节点的子树结构,对MDT′进行降维,截取基础数据创建MST,其具体流程如下所示:
5.4.2.1、将MDT′作为降维调整算法的输入数据;
5.4.2.2、对MDT′进行宽度优先搜索,查找星标节点N,并按序将它们存入集合
5.4.2.3、按照节点的存入顺序,在集合S中按倒序遍历节点(集合S中的节点用n表示),查找是否有其它节点与节点n有相同的父节点;
5.4.2.3.1、若不存在这样的节点,则在MDT中,将该节点n及其子结构存储为一颗子树,如式(26),将n作为子树的根节点,将n的子结构作为根节点的子结构,。再创建一个只有STRoot的MST,将子树作为STRoot的子结构存入MST,如式(27),并将对应的子树从MDT′中剪除;
(26)、Subtree(n)::=<subtree_root→n><Substruct→n.Substruct>
(27)、MST::=<Subtree_root><Substruct→Subtree(n)>
5.4.2.3.2、若存在这样的节点,则将这些拥有同一父节点的星标节点(node*)存入集合Q,在集合Q中查找是否存在两个星标节点(node*)符合VT中NetworkChart的结构要求。
5.4.2.3.2.1、若存在,则将这两个节点的父节点及其父节点的子结构一并存储为一个子树,如式(28),并将子树存入一个空的MST,以子树的根节点为MST的STRoot,如式(29),再将对应的子树从MDT′中剪除;
(28)、Subtree(n)::=<subtree_root→n.parent><Substruct→n.parent.Substruct>
(29)、MST::=<Substruct_Root→n.parent><Substruct→Subtree(n).Substruct>
5.4.2.3.2.2、若不存在,则Q中的每个星标节点(node*),按照步骤5.4.2.3.1行操作。
5.4.2.4、对生成的MST进行遍历,将isMark=1且只有一个子节点的INode判断为冗余节点Redundant_Node(RNode),定义如式(30),将这个冗余节点从MST中移除并由其子结构替代它在MST中的位置;
(30)、RNode::=(RNode∈INode)∧(INode::isMark==0)∧(INode::subArray.length==1)
5.4.2.5、输出所有生成的元结构树MST
5.5、基于子图同构的匹配(Match)算法,把步骤5.4中生成的每个MST与可视化模型树(VT)中的StructModeli进行依次比较,查询匹配的数据片段。在匹配过程中,预设了判断条件来判定两个节点的一致性:Fattr用于判断两个节点的isMark、type、arrayNum属性是否一致;Frela用于判断两个节点与各自的父子节点的结构是否一致,基于子图同构匹配(Match)方法的具体流程如下所示:
5.5.1、初始化第一个匹配目标节点s为StructModeli的根节点;
5.5.2、在当前MST中查找与s符合Fattr条件的节点,将存入集合P;
5.5.3、将集合P中的节点依次与s进行Frela条件判断;若节点p与s的结构一致,将p加入集合M;若结构不一致,则继续在P中查找比较,直至P遍历完;
5.5.4、比较集合M构成的数据结构片段与StructModeli的结构是否一致;若两者结构不一致,则将s的子节点设为下一个匹配目标节点,清空集合P,并重复步骤5.5.2)至步骤5.5.4);若两者结构一致则输出集合M与StructModeli所对应的VTypei;
其中,当MST与VT中StructModeli中成功匹配时,将会返回m个匹配结果<M,VTypei>,每个匹配结果包含当前MST中与图形模型StructModeli匹配的数据结构片段集合M与该图形模型StructModeli对应可生成的图形类型的集合VTypei;
第六步、基于网络语料知识图谱的数据可视化优化匹配方法:第五步中对MDT的剪枝操作、降维调整以及原结构树MST与可视化模型树(VT)中的StructModeli的匹配过程中都是以结构匹配为基础。在此基础上,通过第三步中构建的知识图谱中查询匹配出来的数据片段是否存在实际语义关联,根据查询结果优化第五步中的匹配算法,选取有效的维度组合,以提升自动化生成图形的精确率(Precision);
6.1、当MST与VT中的图形模型成功匹配时,每个匹配成功的结果为<M,VTypei>,其中集合M中包含m个符合要求的数据片段(子树结构),每个数据片段中有两个节点分别对应于StructModel子结构中的LegendNode节点和K_V节点,即对应于可视化图形中的一组候选坐标轴/图例的属性组合结果;
6.2、结合构建的网络语料知识图谱吗,根据m个符合条件的数据片段中的属性组合,对匹配结果优化,过程如下:
6.2.1、步骤6.1中每个匹配数据片段中的属性组合以二元组的形式表示:P=(L::name,A::name)。将每个匹配结果Pi=(Li::name,Ai::name),转化为三元组形式Gi=(Li::name,R,Ai::name)放入集合S={G1,G2,...,Gm};
6.2.2、依次将集合S里Gi的三个参数与知识图谱的三元组结构进行如下映射F(Li::name→head,R→relation,Ai::name→tail)映射成三元组(head,relation,tail),在构建语料知识图谱中匹配是否存在当前三元组(head,relation,tail),result为匹配结果为True或False,分别表示为1和0,首先在语料知识图谱中匹配头实体节点head和尾实体节点tail,然后匹配头实体节点和尾实体节点之间的关系relation。当且仅当头实体head,尾实体tail及关系relation都匹配成功,result为1;
6.2.3、集合S中的对象查询完成后,返回集合Q={(Gi,resulti)},并将Q用于判断当前符合条件的二元组是否存在语义关联,作为候选坐标轴/图例的属性组合匹配结果的判定,因此,只有结构匹配并且resulti为1时,才判定匹配成功,由此提高数据属性匹配的准确率,减少无实际意义图像的生成率。