一种基于本体概念相似度的软件构件检索方法技术领域
本发明属于软件工程技术领域,涉及一种基于本体的软件构件检索方法,特别是
一种基于本体概念相似度的软件构件检索方法。
背景技术
随着软件工程技术的快速发展,面向构件和服务的软件开发方法已经成为广大软
件开发人员的开发主流。而面向构件的软件开发方法的最大依赖对象为构件库。对软件构
件的表示和查询的方法很多。目前主流的构件库系统对构件的描述都采用基于特征或者
XML的刻面描述方法。
于文静、赵海燕、张伟、金芝在“基于特征模型的软件产品自动导出方法综述[J].
软件学报,2016,1:002”中提到一种利用特征模型和分类框架自动导出软件构件的方法,为
自动导出软件产品提供了支持。但基于特征的方法缺乏对特征模型组织框架的细致研究和
说明,在一定程度上导致了特征模型在表现形式上的冗余性和混乱性,也使得领域分析人
员在实践中很难有效地进行领域建模活动。Wang Y,Wang B等在“A Component Retrieval
Tree Matching Algorithm Based on a Faceted Classification Scheme[J]
.Cybernetics and Information Technologies,2015,15(1):14-23”中提到一种刻面分类
的软件构件检索方法的框架与理论,可以查询某种特定领域的构件,提高了查询的效率和
准确性。但是,在语义网的条件下,采用刻面的构件描述方法无法描述领域构件的上下文语
义,而基于关键字或者刻面描述的查询方法的查全率和查准率十分有限,不能满足软件开
发人员的查询需求。
随着软件种类大幅增加和软件规模的扩大,在语义上相似而在语法不同的构件也
随之增多,而已有的方法很难利用语义相似度精确的发现目标构件,增加构件的复用率,提
高软件开发的效率。本发明正是基于本体、利用语义相似度查询目标构件,提高构件的查准
率,进而缩短软件的开发周期。
发明内容
本发明的目的是为克服上述现有技术的不足而提供一种基于本体概念相似度的
软件构件检索方法,该方法通过使用本体web语言(OWL)描述构件,并将其转化为本体树进
行模糊匹配,然后对失配的构件进行重组,并使用KMP算法对查询本体树的相似概念进行修
改以提高构件检索的查准率,提高软件开发的效率。
为了解决现有技术的上述问题,本发明采用以下技术方案。
本发明的一种基于本体概念相似度的软件构件检索方法,包括以下步骤:
步骤一、用户根据需求向软件构件库发出构件检索请求,软件构件库收到用户的
请求后,根据用户的构件需求构建相应的语义本体树;
步骤二、所述的软件构件库根据用户的需求,粗粒度地从构件的OWL描述文档库中
检索出对应的构件描述本体树;
步骤三、将所述的构件描述本体树与用户需求本体树进行模糊匹配;
步骤四、如果所述的构件描述本体树与用户需求本体树的匹配不成功,则对失配
的构件进行构件重组;并使用KMP算法对查询本体树的相似概念进行修改重匹配;
步骤五、根据构件的OWL描述文档与相对应构件的自动映射,使用户从构件库中检
索到相应的构件。
在所述的步骤二中,所述的从构件的OWL描述文档库中检索出对应的构件描述本
体树,包括以下过程:
(21)对每一个领域构件采用OWL进行描述从而形成构件的OWL描述文档,然后利用
XPath提取其中的本体概念;但对于本体中的对象概念的基本属性进行忽略,所述的基本属
性包括:作者,日期;
(22)将XPath提取出的本体概念进行分层分类形成一棵本体树;所述的构件描述
文档对应有一棵描述本体树;为了更好地实现本体概念相似度的映射,将上述的描述本体
树转化为描述二叉树。
在所述的步骤三中,所述的构件描述本体树与用户需求本体树进行模糊匹配,是
指:
通过计算两棵构件描述本体树与用户需求本体树中节点之间的相似度和树中节
点的个数,即匹配长度,来计算所述两棵本体树之间的匹配价值;并根据其匹配价值实现两
棵本体树之间的模糊匹配映射,在这一过程存在两种情况;
第一种情况,两树本体树之间存在模糊匹配:
设T=(V,E,root(T))为任意的一棵本体树对应的二叉树,则二叉树T的匹配价值H
(M)为:
其中:表示树中所有节点的本体概念相
似度和;︱v︱表示匹配长度,即为树中节点的个数;
设Q=(V,E,root(Q))为查询本体树对应的二叉树,D=(V,E,root(D))为描述本体
树对应的二叉树,其中:
若:
则称两棵本体树为模糊匹配;其中,≈
是指在某个阀值范围内成立;
第二种情况,如果两棵本体树不存在模糊匹配,则将查询本体树的二叉树D中的节
点Node和连同节点的叶子一起划分成︱Node︱棵子树;同理也将查询本体树的二叉树Q也划
分为若干棵子树;然后将上述划分出的每棵子树对进行模糊匹配;
采用下列算法提取查询本体树的二叉树D中节点Node:
p=com→lchild;
while(p→rchild!=null){p=p→rchild;printf(″p″);}
由此,分解得出节点系列;然后得到相应的子树系列,同时,依照同样的分解规则
将查询本体树的二叉树Q分解成子树;
在第二种情况下,对查询本体树的二叉树D的子树和查询本体树的二叉树Q的子树
进行映射,设T1=(V1,E1,root(T1)),T2=(V2,E2,root(T2))分别为查询本体树二叉树D的子
树和查询本体树二叉树Q的子树,一个从T1到T1的映射M定义为:并对所有的(V1′,
V2′),(V1″,V2″)∈M满足以下条件:
(1)表示两棵子树中的节点是一一对应的;
(2)表示映射间保持祖先后代关系;
映射的定义域为:
映射的值域为:
对于一棵本体树,允许对树中的节点进行插入、删除和改变节点的概念这3种编辑
操作;因此,对于其对应的二叉树的子树也可以进行此3类操作。
所述的步骤四,包括以下具体步骤:
(41)通过步骤三所述的模糊匹配以及子树之间的映射,获取语义相同或相似、但
语法不一致的节点,对其进行重组,并计算出相应的重组代价;
设Q=(V,E,root(Q)),D=(V,E,root(D))为所述的两棵本体树对应的二叉树的子
树,M为从Q到D的映射,则定义M的重组代价S(M)为:
所述的组代价包括三个部分:第一部分为由于label(v)≈label(w)而修改查询本
体树子树的概念的代价;第二部分为描述本体树子树中没有此节点,而删除查询本体树子
树中节点的代价;第三部分为描述本体树子树中有此节点,而在查询子树中添加此节点的
代价。
(42)根据所述的重组代价对所述的查询本体树、描述本体树两棵本体树进行重
组,并利用KMP算法对相似概念进行修改;
根据重组代价的定义可知,当查询本体树上的某个节点的概念与描述本体树中对
应的概念不匹配时,从相似概念库中提取与查询本体树中此概念对应的相似概念集如果相
似,则替换查询本体树中的此概念;
假设概念集所组成的字符串为:′S1,S2,S3...Sn′,简称概念集串;查询本体树的概
念所对应的字符串为:′P1,P2,P3...Pn′,简称查询子串;假若,此时应与查询子串中第k(k<
j)字符继续比较,则查询子串中前k-1个字符的子串必须满足下列关系式满足'p1,p2,
...pk-1'='si-k+1,si-k+2,…si-1',且不可能存在k′>k;
根据已经得到的“部分匹配”的结果'pj-k+1,pj-k+2,...pj-1'='si-k+1,si-k+2,…si-1',
可以得到'p1,p2,...pk-1'='pj-k+1,pj-k+2,...pj-1';
同时,将不匹配的概念进行修改,以使得概念子串与查询子串一致。
与现有技术相比,本发明包括以下优点和有益效果:
本发明可以利用语义相似度精确地发现目标构件,有效地提高构件的查询效率和
复用率,缩短软件的开发周期。
附图说明
图1是本发明的一种实施例的方法流程图。
图2是本发明的一种实施例的描述文档对应的描述本体树与描述本体树的二叉树
的示意图。
图3是本发明的一种实施例的模糊匹配与子树系列的示意图。
图4是本发明的一种实施例的构件查询框架的示意图。
具体实施方式
下面结合附图对本发明做进一步详细说明。
图1是本发明的一种实施例的方法流程图。本发明实施例方法包括以下步骤:
步骤一、用户根据需求向软件构件库发出构件检索请求,软件构件库收到用户的
请求后,根据用户的构件需求构建相应的语义本体树;
步骤二、所述的软件构件库根据用户的需求,粗粒度地从构件的OWL(本体web语
言)描述文档库中检索出对应的构件描述本体树,包括以下过程:
(21)对每一个领域构件采用OWL进行描述从而形成构件的OWL描述文档,然后利用
XPath提取其中的本体概念;但对于本体中的对象概念的基本属性进行忽略,所述的基本属
性包括:作者,日期等。构件的OWL描述文档如表1所示。
(22)将XPath提取出的本体概念进行分层分类形成一棵本体树;所述的构件描述
文档对应有一棵描述本体树;下表1中的构件描述文档对应的描述本体树如图2所示,为了
更好地实现本体概念相似度的映射,将上述的描述本体树转化为描述二叉树。如图3为图2
中Com1构件表示转化为的二叉树。
步骤三、将所述的构件描述本体树与用户需求本体树进行模糊匹配,其过程是:
通过计算两棵构件描述本体树与用户需求本体树中节点之间的相似度和树中节
点的个数,即匹配长度,来计算所述两棵本体树之间的匹配价值;并根据其匹配价值实现两
棵本体树之间的模糊匹配映射,在这一过程存在两种情况;
第一种情况,两树本体树之间存在模糊匹配:
设T=(V,E,root(T))为任意的一棵本体树对应的二叉树,则二叉树T的匹配价值H
(M)为:
其中:表示树中所有节点的本体概念相
似度和;︱v︱表示匹配长度,即为树中节点的个数;
设Q=(V,E,root(Q))为查询本体树对应的二叉树,D=(V,E,root(D))为描述本体
树对应的二叉树,其中:
若:
则称两棵本体树为模糊匹配;其中,≈
是指在某个阀值范围内成立;图4为模糊匹配图。
第二种情况,如果两棵本体树不存在模糊匹配,则将查询本体树的二叉树D中的节
点Node和连同节点的叶子一起划分成︱Node︱棵子树;同理也将查询本体树的二叉树Q也划
分为若干棵子树;然后将上述划分出的每棵子树对进行模糊匹配;
采用下列算法提取查询本体树的二叉树D中节点Node:
p=com→lchild;
while(p→rchild!=null){p=p→rchild;printf(″p″);}
由此,分解得出节点系列;然后得到相应的子树系列。同时,依照同样的分解规则
将查询本体树的二叉树Q分解成子树;如图1所示。
在第二种情况下,对查询本体树的二叉树D的子树和查询本体树的二叉树Q的子树
进行映射,设T1=(V1,E1,root(T1)),T2=(V2,E2,root(T2))分别为查询本体树二叉树D的子
树和查询本体树二叉树Q的子树,一个从T1到T1的映射M定义为:并对所有的(V1′,
V2′),(V1″,V2″)∈M满足以下条件:
(1)表示两棵子树中的节点是一一对应的;
(2)表示映射间保持祖先后代关系;
映射的定义域为:
映射的值域为:
对于一棵本体树,允许对树中的节点进行插入、删除和改变节点的概念这3种编辑
操作;因此,对于其对应的二叉树的子树也可以进行此3类操作。
步骤四、如果所述的构件描述本体树与用户需求本体树的匹配不成功,则对失配
的构件进行构件重组;并使用KMP算法对查询本体树的相似概念进行修改重匹配;
步骤五、根据构件的OWL描述文档与相对应构件的自动映射,使用户从构件库中检
索到相应的构件。
本发明实施例的步骤四,包括以下过程:
(41)通过步骤三所述的模糊匹配以及子树之间的映射,获取语义相同或相似、但
语法不一致的节点,对其进行重组,并计算出相应的重组代价;
设Q=(V,E,root(Q)),D=(V,E,root(D))为所述的两棵本体树对应的二叉树的子
树,M为从Q到D的映射,则定义M的重组代价S(M)为:
所述的组代价包括三个部分:第一部分为由于label(v)≈label(w)而修改查询本
体树子树的概念的代价;第二部分为描述本体树子树中没有此节点,而删除查询本体树子树
中节点的代价;第三部分为描述本体树子树中有此节点,而在查询子树中添加此节点的代价。
(42)根据所述的重组代价对所述的查询本体树、描述本体树两棵本体树进行重
组,并利用KMP算法对相似概念进行修改;
根据重组代价的定义可知,当查询本体树上的某个节点的概念与描述本体树中对
应的概念不匹配时,从相似概念库中提取与查询本体树中此概念对应的相似概念集如果相
似,则替换查询本体树中的此概念;
假设概念集所组成的字符串为:′S1,S2,S3...Sn′,简称概念集串;查询本体树的概
念所对应的字符串为:′P1,P2,P3...Pn′,简称查询子串;假若,此时应与查询子串中第k(k<
j)字符继续比较,则查询子串中前k-1个字符的子串必须满足下列关系式满足'p1,p2,
...pk-1'='si-k+1,si-k+2,…si-1',且不可能存在k′>k;
根据已经得到的“部分匹配”的结果'pj-k+1,pj-k+2,...pj-1'='si-k+1,si-k+2,…si-1',
可以得到'p1,p2,...pk-1'='pj-k+1,pj-k+2,...pj-1';
同时,将不匹配的概念进行修改,以使得概念子串与查询子串一致。
否则:
①当是第一次匹配时(即当n=1时),按节点(Node)进行分解成︱Node︱棵子树,然
后再进行匹配,如果匹配成功,结束。
②当有两次以上的匹配时(即当n≥2时),根据重组代价进行重组,并利用KMP算法
进行相似概念的修改,直到所有的子树匹配结束。
为检验本发明所述方法的效果,做实验验证如下:
使用Eclipse开发了一个基于本体的构件查询原型,采用Protégé本体建模工具构
建了领域构件本体。实验中共采用120个构件,存放在构件库中,其中大部分构件是从上海
政府构件库中提取的自由构件。并对每个构件分别使用OWL和刻面描述方式进行描述。
实验结果以查准率和查全率作为对比参数,分别采用基于关键字的检索方法、基
于刻面的检索方法和基于本体相似度的检索方法进行比较分析。
通过实验数据可知,基于本体的构件查询方法在查准率和查全率上明显高于基于
关键字的查询方法和基于刻面的查询方法。在查准率方面高于基于刻面的23.4%,高于基
于关键字的47.5%;在查全率方面高于基于刻面的31.2%,高于基于关键字的51.9%。
因此,本发明提出了基于本体概念相似度的构件检索算法,将构件的OWL描述文档
转化为本体树并进行模糊匹配。然后,对失配的构件进行重组。在此基础上,使用KMP算法对
查询本体树的相似概念进行修改,从而得到满足用户需求的构件集,提高了软件开发的效率。
表1、构件的OWL描述文档:
。