首页> 中国专利> 一种基于本体概念相似度的软件构件检索方法

一种基于本体概念相似度的软件构件检索方法

摘要

本发明公开了一种基于本体概念相似度的软件构件检索方法,包括:用户根据需求向软件构件库发出构件检索请求,软件构件库根据用户的构件需求构建相应的语义本体树;所述的软件构件库根据用户的需求,从构件的OWL描述文档库中检索出对应的构件描述本体树;将所述的构件描述本体树与用户需求本体树进行模糊匹配;如果所述的构件描述本体树与用户需求本体树的匹配不成功,则对失配的构件进行构件重组;并使用KMP算法对查询本体树的相似概念进行修改重匹配;根据构件的OWL描述文档与相对应构件的自动映射,使用户从构件库中检索到相应的构件。本发明可以利用语义相似度精确地发现目标构件,有效地提高构件的查询效率和复用率,缩短软件的开发周期。

著录项

  • 公开/公告号CN106570187A

    专利类型发明专利

  • 公开/公告日2017-04-19

    原文格式PDF

  • 申请/专利权人 南京邮电大学;

    申请/专利号CN201611001249.X

  • 发明设计人 柯昌博;肖甫;王少辉;

    申请日2016-11-14

  • 分类号G06F17/30;G06F9/44;

  • 代理机构南京经纬专利商标代理有限公司;

  • 代理人许方

  • 地址 210023 江苏省南京市栖霞区文苑路9号

  • 入库时间 2023-06-19 01:56:43

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-04-21

    授权

    授权

  • 2017-05-17

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20161114

    实质审查的生效

  • 2017-04-19

    公开

    公开

说明书

技术领域

本发明属于软件工程技术领域,涉及一种基于本体的软件构件检索方法,特别是一种基于本体概念相似度的软件构件检索方法。

背景技术

随着软件工程技术的快速发展,面向构件和服务的软件开发方法已经成为广大软件开发人员的开发主流。而面向构件的软件开发方法的最大依赖对象为构件库。对软件构件的表示和查询的方法很多。目前主流的构件库系统对构件的描述都采用基于特征或者XML的刻面描述方法。

于文静、赵海燕、张伟、金芝在“基于特征模型的软件产品自动导出方法综述[J].软件学报,2016,1:002”中提到一种利用特征模型和分类框架自动导出软件构件的方法,为自动导出软件产品提供了支持。但基于特征的方法缺乏对特征模型组织框架的细致研究和说明,在一定程度上导致了特征模型在表现形式上的冗余性和混乱性,也使得领域分析人员在实践中很难有效地进行领域建模活动。Wang Y,Wang B等在“A Component RetrievalTree 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描述文档:

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号