CN106202206A - 一种基于软件聚类的源码功能搜索方法 - Google Patents

一种基于软件聚类的源码功能搜索方法 Download PDF

Info

Publication number
CN106202206A
CN106202206A CN201610487700.7A CN201610487700A CN106202206A CN 106202206 A CN106202206 A CN 106202206A CN 201610487700 A CN201610487700 A CN 201610487700A CN 106202206 A CN106202206 A CN 106202206A
Authority
CN
China
Prior art keywords
source code
distance
feature
class
module
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201610487700.7A
Other languages
English (en)
Other versions
CN106202206B (zh
Inventor
吴艳霞
孙彬
王彦璋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Harbin Engineering University
Original Assignee
Harbin Engineering University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Harbin Engineering University filed Critical Harbin Engineering University
Priority to CN201610487700.7A priority Critical patent/CN106202206B/zh
Publication of CN106202206A publication Critical patent/CN106202206A/zh
Application granted granted Critical
Publication of CN106202206B publication Critical patent/CN106202206B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供的是一种基于软件聚类的源码功能搜索方法。输入源码,对源码进行语法检查和类信息的获取,然后分为两个模块完成搜索过程,所述两个模块为软件聚类模块和功能搜索模块,软件聚类模块从获取的类信息中,筛选实体并且构造实体索引,然后进行提取特征和构造特征向量,再通过层次聚类筛选信息,并将结果存储;功能搜索模块从获取的类信息中,构造输入集且完成主题分析,然后进行索引构造并存储索引。本发明能有效提升软件聚类的结果。在实际的阅读源码、维护系统方面都有很好的指导作用。开发者可以借此方法来指导先期探索,加快理解工程,提升开发效率。进一步的发展,可以借此方法完成功能模块的复用。

Description

一种基于软件聚类的源码功能搜索方法
技术领域
本发明涉及的是一种在源码工程中搜索相应功能的方法。
背景技术
随着互联网和开源软件的欣欣向荣和蓬勃发展,开发者接触到的代码越来越多,同时这些软件的架构也越来越复杂。开源代码的发展越来越好,开源工程也越来越大,理解并在其基础上开发也越来越困难。在这时根据关键词返回功能而不是代码片段能极大的提高开发者的效率。通过阅读相关文献和实验数据分析,发现源码功能定位的主要问题在于搜索和功能确定。
软件聚类是聚类的一种特殊应用。软件聚类由于能分解出其中的结构和模块,由此得到发展的机会。也正因为此,本发明采用软件聚类来得到功能模块,也用以过滤检索结果。正因为其应用场景的特殊性,国内外众多学者在其上也各自发展出了琳琅满目的理论。软件聚类共有三个过程,分别是聚类对象描述、策略以及算法。近几年的发展,在这三个方面都有所进展。以聚类对象描述为例,近几年共提出了三种聚类对象描述方法,分别是形式化描述、非形式化描述以及多视图描述方法。Scanniello针对面向对象语言提出一种多阶段聚类的方法。该方法共分为两个阶段,第一个阶段,使用LSI等字词方法,将聚类对象分成多个组;第二个阶段,使用形式化方法将聚类对象分解成多个簇。由此获取最终的聚类。
在信息检索领域,检索关键词有很多方法。如果针对文本文件,使用正则表达式、VSM或者主题模型都可以完成检索的功能。传统的源码搜索技术通常是根据关键字,查询相似代码片段,如GitHub、Google Code,其得到的都是工程中相似的文本片段或者包含查询关键字的代码片段。
发明内容
本发明的目的在于提供一种能得到较为精确的类结构信息的基于软件聚类的源码功能搜索方法。
本发明的目的是这样实现的:
首先输入源码,对源码进行语法检查和类信息的获取,然后分为两个模块完成搜索过程,即软件聚类模块和功能搜索模块。软件聚类模块从获取的类信息中,筛选实体并且构造实体索引,然后进行提取特征和构造特征向量,然后通过层次聚类筛选信息,并将结果存储。功能搜索模块从获取的类信息中,构造输入集且完成主题分析,然后进行索引构造并存储索引。输入关键词检索,即可得到检索结果,本发明操作流程如附图1所示。功能搜索模块根据输入的查询词定位得到类结构信息;软件聚类模块筛选功能搜索模块得到的类结构信息,得到更加精确的信息。
本发明的还可以包括:
1、所述的针对软件工程的特征包含形式化分析特征和非形式化分析特征,
所述形式化分析特征描述包括:
(1)类泛化关系,
(2)类实现关系,
(3)类依赖关系,
(4)包关系,
(5)文件依赖关系;
所述非形式化分析特征描述包括:
(1)变量名称特征,
(2)文件名称特征;
通过静态分析的方法,包括词法分析和语法分析源码文件,得到形式化特征描述;如果是简单的类关系则通过词法分析,如果涉及到编译时才能却确定的关系,则通过语法分析筛选得到更准确的关系,所述编译时才能却确定的关系包括模板或泛型。
2、构造针对软件工程的特征向量过程使用类继承距离、包距离,
所述类继承距离定义如下:
(1)A类继承B类则继承距离为1,A类继承B类的特征值为1;
(2)继承距离为N,则相应的特征值为1×λinherit N-1
所述包距离的定义如下:
(1)A类中使用了PackageP则包距离为1,其特征值为1;
(2)包距离为N,则相应的特征值为1×∈pppackage N-1
在静态分析提取的特征基础上,计算特征向量,构造特征矩阵。
3、变量名称和文件名称特征,提取后的后续处理包括以下两步:
(1)变量和文件名称拆分,
(2)停用词过滤,
变量和文件名称拆分依照用户自定义的变量命名规则来拆分,所述命名规则包括:驼峰命名法、匈牙利命名法;停用词中共有两部分,一部分是常见的无意义词语,包括of、a或者中文的“是”;另外一部分是源码中的关键字,当涉及到中文时,单独进行分词处理。
4、筛选的过程包括:
(1)搜索只是得到相似度达到阈值的结果;
(2)这些结果经过软件聚类得到的簇筛选,筛选条件是这些结果在簇中占用的比例也达到了阈值;
(3)经过筛选后,调整显示结果,输出类信息。
本发明提出针对Java的软件特征提取方法和特征向量构造方式。构造的特征矩阵作为层次聚类算法的输入,输出相应的簇描述。然后,提出了针对类结构的主题分析方法。该方法不以文件为单位,只针对类结构信息分析。由此搜索得到的将不再是代码片段,而是和功能相关的一系列类结构信息。最终,综合利用软件聚类和主题分析实现了功能搜索技术。
在软件聚类提取构造特征向量时,对于类继承关系,每一个类都作为一个聚类实体,同时每一个类都是一维特征。如果类和类之间有继承关系,则特征值取为1。类直接继承的关系用1来表示外,间接继承也使用1表示。因为如果A类继承于C类,B类也继承于C类,A类还继承与B类,但A类、B类在和C类的关系的强度上是不同的。所以本发明在类继承关系中添加继承距离。直接继承关系继承距离为1,每增加一层继承,继承距离就增加1。而最终的特征值添加一个权值λinherit。其表现形式如下:
(1)A类继承B类则继承距离为1,A类继承B类的特征值为1;
(2)继承距离为N,则特征值为1×λinherit N-1
上述的特征矩阵将根据继承距离做相应的修改。设其中一个类的特征向量为
V=[v0 v1…vn-1]
继承距离向量为
D=V=[d0 d1…dn-1]
则最终的特征向量为:
W = V × D T = v 0 v 1 ... v n - 1 × λ i n h e r i t d 0 - 1 λ i n h e r i t d 1 - 1 ... λ i n h e r i t d n - 1 - 1
在计算最终的特征时,以的方式来表示类继承关系的逐渐减弱。
对于包关系,和类继承关系提取特征向量类似,包距离的定义如下:
(1)A类中使用PackageP则包距离为1,特征值为1;
(2)包距离为N,则特征值为1×∈pppackage N-1
特征向量提取构造完成之后,求解所有实体之间的距离,即构造聚类实体距离矩阵。构造一个N×N的矩阵,其中元素表示N个实体之间的距离。每一个实体都是一个N维向量,表示实体和其他实体的距离。
在聚类过程中,需不断计算各个簇之间的距离,并根据结果合并两个簇来构造新簇。使用凝聚时层次聚类算法完成软件聚类的功能。
在确定聚类实体矩阵和簇间距离之后,使用本发明提出的软件聚类算法,具体步骤为:首先提取源码特征实体,即各个类信息;然后获取源码中各个实体的具体信息,其中包括类间关系、文件关系以及附加关系;然后根据提取的信息构造特征向量;之后使用凝聚时算法完成聚类,然后结合各个实体之间的具体信息,输出可视化聚类结果。
对于针对源码的主题分析方法,使用LSI算法进行主题分析,和传统方法稍有不同的是本发明提出的LSI方法针对的是每一个经过处理后的类信息。
本发明结合源码检索和软件聚类,使用多阶段将更方便。和Scanniello的方法不同,本发明主要目的不是软件聚类,但是可以采用将多阶段聚类方法应用到本发明的技术中去。在其他方法中,忽略了一个重要的因素,那就是聚类过程中应该提取哪些特征、怎么提取以及特征向量、特征矩阵该如何构造等问题。
虽然本发明中的定位和源码搜索中的搜索相关,但由于面向的对象不同,并不适合完全照搬搜索引擎。搜索引擎所关注的是如何找到给定输入的代码或者相关的代码,提供给用户的只是某一段可能符合要求的代码或注释,并不会提供给用户和某一个关键词相关的类结构等信息,也就不能反映该查询词对应的功能模块。源码搜索得到的是大量工程、大量的代码片段,而本发明致力于得到详细的类结构信息。
本发明结合软件聚类,提出的功能搜索技术除能得到相似的代码片段外,还能得到和查询词相关的功能模块。对于面向对象的语言,其输出为类结构信息。经过软件聚类的过滤,部分和功能结构无关的文本信息将被剔除,输出更加精确的结果。软件聚类针对不同的源码,相同的参数将获取不同的结果,为解决该问题,聚类的参数可以相应选择和更改,以满足用户输入不同的项目和不同阶段的阅读。
发明的有益效果为:
本发明提出一种结合软件聚类的功能搜索技术,使用主题分析和软件聚类,该技术能得到较为精确的类结构信息。
本发明提出针对Java的软件特征提取方法和特征向量构造方式。构造的特征矩阵作为层次聚类算法的输入,输出相应的簇描述。在构造特征向量时,本发明使用类继承距离和包距离,可以反映出类之间及包之间的关系,在通过簇间距离计算后,通过凝聚式聚类算法找到相似度最大的两个簇(即距离最小的两个簇)并合并,更准确的完成聚类功能。
本发明提出了针对类结构的主题分析方法。使用针对类结构的主题分析方法。该方法不以文件为单位,只针对类结构信息分析。由此搜索得到的将不再是代码片段,而是和功能相关的一系列类结构信息。使用软件聚类的结果指导主题分析,主题分析的输出经过软件聚类过滤,最终展现给用户更加精确的信息。
本发明综合利用软件聚类和主题分析实现了功能搜索技术。结合软件聚类,提出的功能搜索技术除能得到相似的代码片段外,还能得到和查询词相关的功能模块。对于面向对象的语言,其输出为类结构信息。经过软件聚类的过滤,部分和功能结构无关的文本信息将被剔除,输出更加精确的结果。软件聚类针对不同的源码,相同的参数将获取不同的结果,为解决该问题,聚类的参数可以相应选择和更改,以满足用户输入不同的项目和不同阶段的阅读。如果软件的设计和结构比较差,聚类将会根据功能的不同,和参数不同,得到合适的功能模块划分,这也是软件聚类的一个优势。
经实验验证,本发明所设计的原型系统能按照关键字查询得到功能模块所涉及的类结构。而相对于代码片段的查找,因为经过软件聚类得到的簇筛选,所以能更好地过滤一些无效数据。
附图说明
图1为系统总体框图;
图2为常用实体距离计算函数;
图3为手动添加输出类信息的部分类结构;
图4为本发明系统搜索得到的部分结果;
图5为GitHub搜索SSA得到的结果统计;
图6为和GitHub筛选结果比较;
图7为GitHub搜索SSA得到的测试结果;
图8为GitHub搜索SSA得到的文本文档;
图9为GitHub搜索SSA得到Command模块的结果。
具体实施方式
下面结合附图举例对本发明进行详细说明。
本发明分为软件聚类模块和功能搜索模块。
针对于软件聚类模块中,本发明提出的软件聚类算法具体步骤如下:
步骤1:提取源码特征实体,也就是各个类信息;
步骤2:获取源码中各个实体的具体信息,其中包括类间关系、文件关系以及附加关系;
步骤3:根据提取的信息构造特征向量;
步骤4:使用凝聚式算法聚类;
步骤5:结合第2步提取的信息,输出可视化聚类结果。
提取类信息使用Doxygen。它直接使用Lex解析Java代码,在提取信息之前,需手动编译检查语法无误。语法有错虽能正常解析,但解析得到的结果并不完整。Doxygen的运行其需要读取一个配置文件Doxyfile。Doxyfile中比较有两个比较重要的参数,分别是EXTRACT_ALL=YES和RECURSIVE=YES,这两个参数分别表示解析所有的内容和文件夹递归解析。
Doxygen本身并不带有输出类信息的功能,需要手动在其中添加类信息处理方法。添加新类Features以及相应的方法PrintClassesRelations和PrintClassesInNamespace。部分类结构描述如附图3所示。
特征向量构造使用Python语言完成,读入的是Doxygen输出的各类信息,然后设置相应的参数,构造特征向量。使用列表(list)来存储特征向量。之后使用Python的scipy库,设定参数,使用各类层次聚类算法即可完成所需要的聚类。
在根据提取的信息构造特征向量时,使用类继承距离、包距离。
类继承距离的定义如下:
(1)A类继承B类则继承距离为1,A类继承B类的特征值为1;
(2)继承距离为N,则相应的特征值为1×λinherit N-1
包距离的定义如下:
(1)A类中使用了PackageP则包距离为1,其特征值为1;
(2)包距离为N,则相应的特征值为1×∈pppackage N-1
由于凝聚式层次算法的输入是所有实体之间的距离。所以构造特征向量之后,通过距离函数计算聚类实体距离,并构造实体距离矩阵。假设有两个实体A和B,其中A=[a1a2…an],B=[b1b2…bn],常用的距离计算方法如附图2所示。常见的距离计算方法有欧式距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、标准化欧氏距离、马氏距离、夹角余弦。
然后计算簇间距离。在聚类过程中,需不断计算各个簇之间的距离,并根据结果合并两个簇来构造新簇。首先假设有两个簇,U和V,其中u1,u2,…,un为簇U中的实体,v1,v2,…,v3为簇V中的实体。U是新簇,且由簇S和T组合而成。则每一个新簇U和其他簇V之间的距离为d(U,V)。簇距离的计算有以下几种计算方式:
单连接算法SLA:簇的相似度是两个簇中所有的实体两两之间的最大相似度。也就是取任意实体ui∈U和任意实体vj∈V,计算ui和vj距离的最小值。对于任意的U中的ui和V中的vj,其距离公式如公式1所示。
d(U,V)=min(dist(u[i],v[j])) 公式1
全连接算法CLA:簇的相似度是两个簇中所有实体、两两之间最大相似度。对于任意的i和j,其中ui∈U和vj∈V,其距离计算公式如公式2所示。
d(U,V)=max(dist(u[i],v[j])) 公式2
平均连接算法ULA:计算簇的相似度方式是两个簇中所有实体的相似度的总和的平均值。对于任意的i和j,其中ui∈U和vj∈V,其距离计算公式如公式3所示。
加权平均连接算法WLA:根据组合成新簇的两个簇分别和其他簇之间的距离和的均值计算得到距离。对于簇S和簇T组成新的簇U,其簇U和任意其他簇V之间的相似度计算方式如公式4所示。
质心聚类方法:以两个簇S和簇T的质心之间的欧拉距离作为其相似度,计算公式如公式5所示。当簇S和簇T合并一起的时,将遍历所有簇中的实体,并重新计算新簇的质心。之后得到的相似度是该新簇的质心和森林中其他簇的质心之间的欧拉距离。
d(S,T)=||as-at|| 公式5
离方差平方和法:计算公式如公式6所示。离差平方和的大小反映了分类是否合理。若类间离差平方和较大,而数据点间却较小,则分类效果就比较合理。在使用该方法时,初始输入的特征向量的距离一定是欧拉距离。
相似度计算方法直接影响聚类效率和聚类结果。单连接聚类算法和全连接算法是其中最为简单、最为高效的算法,离方差平方和法虽计算较为复杂,但往往效果较好。针对不同的应用场景需要选择不同的计算方法。
然后根据凝聚式层次聚类算法完成实体的聚类功能。凝聚式聚类算法的一般步骤如下:
步骤0:构造有N个待聚类的实体;
步骤1:将每一个待聚类的实体归为一簇,共有N簇;
步骤2:如果只有一个簇,结束;否则,计算簇两两之间的距离;
步骤3:找到相似度最大的两个簇,也就是距离最小的两个簇,假设为s和t,合并s和t为u;
步骤4:重新计算新的簇u和其他簇(不包括s、t和u)之间的距离;
步骤5:回到步骤2。
而针对于功能搜索模块中,本发明在Doxygen基础上,实现静态分析工具用于提取类信息,本发明使用LSI(浅层语义索引)算法完成主题分析的功能。功能搜索模块中需要使用主题分析方法构造针对软件工程源码的索引。使用步骤如下:
步骤1:文本预处理;
步骤2:构建词袋(Bag-of-Words);
步骤3:转化为文档向量;
步骤4:训练TF-IDF模型;
步骤5:训练LSI模型;
步骤6:创建索引;
步骤7:查询词余弦相似度。
作为输入的文本文件是由一定的语言编写而成,如杂志、书籍等自然语言编写而成的,或者是某些结构化语言编写而成,如HTML、C语言等。在本发明中,以提取出的类信息作为输入。如果直接处理这些输入,将得到不准确的结果。如HTML中语言的标签会扰乱模型的构建、自然语言中的一些语气词、停用词等都会影响最终模型的建立,Java语言中的关键字也同样回有影响。因为这些标签或者词组对理解文档并没有什么作用,它们在其中只是起到了强调、转接词句或者提示作用。所以预处理阶段就需要过滤这些词组。针对源码主要有两种类型的词语要过滤:
(1)英文中的停用词;
(2)源码中的标识符。
本发明所涉及的系统针对的是Java语言,所以其过滤的关键字符有:
网络上自然语言中的停用词有多个版本是,大致相同,挑选一个即可。预处理常见内容有小写化、tokenize、stemming以及低频词的过滤。在源码中,还包括:
(1)组合单词过滤
(2)根据命名规则,去掉无意义词语。
不同的软件工程中有不同的变量命名规则,在Java中通常采用的命名规则是方法名用动词,若是由多个动词组成,则每一个动词都首字母都大写;变量用名词,多用小写字母开始,若有多个名词,则除第一个单词外,后续的单词首字母都是大写等等。根据这些命名规则,在一定程度上可以过滤掉这些内容。我们需要做的是根据规则,分解这些命名,然后以此过程过滤掉停用词,因为根据系统功能不同,停用词列表也不同,用户因此可以配置哪些能过滤,哪些不能过滤。
词袋(Bag-of-Words)是指所有文件出现的所有单词。对于中文的文档,需要先进行分词,分词之后的数据才能进一步放入词袋。构建词袋的同时,需要将所有的出现的词(token)映射为相应的ID。不同的词有不同的ID,通过ID即可表示为该词组。同样的,所有的文档也可以像词袋的token-id映射一样,用ID映射到对应的文档。使用映射后ID就可以采用向量化的表示方式表示文档了。
在向量化表示文档后开始训练TF-IDF模型。训练结束后,每一个文档都会被表示为TF-IDF向量。训练的好坏一方面看预处理的结果,另外一方面看输入的文档。这也是为什么前面的预处理如此重要的原因。TF-IDF表示的文档向量作为输入即可训练LSI模型。训练过程中需指定训练主题数,其对应SVD分解时需要指定的维数,通过软件聚类才可确定。
为了能正常查询关键字或者比较几个不同的类之间的相似度,需要构建所有文档的索引。对于输入的查询词,只要将其映射到主题空间,通过余弦相似度即可查找和其最相似的文档。最终按照相似度排序,输出达到阈值的结果。
整体实验验证
使用Android Dx工具,输入查询词“ssa”,得到的结果如附图4所示(由于查询结果太多,只展示部分结果),展示本发明系统搜索得到的部分结果。
使用GitHub在相同的工程中搜索同样的关键字,得到和Java源码相关的55个结果。结果顺序是按照关键字的匹配程度显示的,其中一条结果如附图5所示。本发明设计的原型系统结果与之比较如附图6所示,其中的数字代表结果数量。查询结果总数为查询关键字后得到的所有结果的数量。从这点来看,GitHub和未经软件筛选的查询结果数量接近。
而之所以在数量上有细微差别,其中一个原因是GitHub只能针对全工程搜索,而本发明所设计的原型系统中不仅可以指定目录搜索,还可以先排除掉部分目录不搜索。所以GitHub中包含了一部分和源码无关的内容,使得结果数相对较多,如附图7所示的测试代码在本发明中就不再包含。另外一个原因是GitHub搜索了非源码文件,如文本文档,本发明设计的系统在LSI阶段就排除附图8所示的文本文档。相应的,对应的无关源码数就为0。
不论是GitHub还是本发明系统,搜索得到的50个结果都包含部分无效数据,因为源码注释中不可避免地包含了一部分的噪声。和GitHub不同的是,经过聚类筛选后,排除了绝大多数的无效数据,其中只包含4个无效数据。GitHub由于只是关键字匹配以及输出匹配的代码片段,统计所得包含了27个无效的数据。这些无效数据只能由人工筛选出符合要求的结果。如附图9所示,Main函数虽然有ssa的字样,但是该模块完成的功能是参数选项过滤,所以不应该在搜索得到的功能模块中。
综上所述,本发明所设计的原型系统能按照关键字查询得到功能模块所涉及的类结构。而相对于代码片段的查找,因为经过软件聚类得到的簇筛选,所以能更好地过滤一些无效数据。

Claims (5)

1.一种基于软件聚类的源码功能搜索方法,其特征是:输入源码,对源码进行语法检查和类信息的获取,然后分为两个模块完成搜索过程,所述两个模块为软件聚类模块和功能搜索模块,软件聚类模块从获取的类信息中,筛选实体并且构造实体索引,然后进行提取特征和构造特征向量,再通过层次聚类筛选信息,并将结果存储;功能搜索模块从获取的类信息中,构造输入集且完成主题分析,然后进行索引构造并存储索引。
2.根据权利要求1所述的基于软件聚类的源码功能搜索方法,其特征是:所述进行提取特征的特征包含形式化分析特征和非形式化分析特征,所述形式化分析特征描述包括(1)类泛化关系、(2)类实现关系、(3)类依赖关系、(4)包关系、(5)文件依赖关系;所述非形式化分析特征描述包括(1)变量名称特征、(2)文件名称特征;
通过静态分析的方法,包括词法分析和语法分析源码文件,得到形式化特征描述;如果是简单的类关系则通过词法分析,如果涉及到编译时才能却确定的关系,则通过语法分析筛选得到更准确的关系,所述编译时才能却确定的关系包括模板或泛型。
3.根据权利要求1所述的基于软件聚类的源码功能搜索方法,其特征是:构造特征向量过程使用类继承距离、包距离,
所述类继承距离定义如下:
(1)A类继承B类则继承距离为1,A类继承B类的特征值为1;
(2)继承距离为N,则相应的特征值为1×λinherit N-1
所述包距离的定义如下:
(1)A类中使用了PackageP则包距离为1,其特征值为1;
(2)包距离为N,则相应的特征值为1×∈pppackage N-1
在静态分析提取的特征基础上,计算特征向量,构造特征矩阵。
4.根据权利要求2所述的基于软件聚类的源码功能搜索方法,其特征是:变量名称和文件名称特征提取后的后续处理包括以下两步:
(1)变量和文件名称拆分,
(2)停用词过滤,
变量和文件名称拆分依照用户自定义的变量命名规则来拆分,所述命名规则包括:驼峰命名法、匈牙利命名法;停用词中共有两部分,一部分是常见的无意义词语,包括of、a或者中文的“是”;另外一部分是源码中的关键字,当涉及到中文时,单独进行分词处理。
5.根据权利要求1至4任何一项所述的基于软件聚类的源码功能搜索方法,其特征是:筛选的过程包括:
(1)搜索只是得到相似度达到阈值的结果;
(2)这些结果经过软件聚类得到的簇筛选,筛选条件是这些结果在簇中占用的比例也达到了阈值;
(3)经过筛选后,调整显示结果,输出类信息。
CN201610487700.7A 2016-06-28 2016-06-28 一种基于软件聚类的源码功能搜索方法 Active CN106202206B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610487700.7A CN106202206B (zh) 2016-06-28 2016-06-28 一种基于软件聚类的源码功能搜索方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610487700.7A CN106202206B (zh) 2016-06-28 2016-06-28 一种基于软件聚类的源码功能搜索方法

Publications (2)

Publication Number Publication Date
CN106202206A true CN106202206A (zh) 2016-12-07
CN106202206B CN106202206B (zh) 2020-02-14

Family

ID=57461674

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610487700.7A Active CN106202206B (zh) 2016-06-28 2016-06-28 一种基于软件聚类的源码功能搜索方法

Country Status (1)

Country Link
CN (1) CN106202206B (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018103033A1 (en) * 2016-12-08 2018-06-14 Hewlett Packard Enterprise Development Lp Software classification
CN108304174A (zh) * 2017-08-22 2018-07-20 北京智行鸿远汽车有限公司 一种基于numpy的高精度C语言算法验证方法
CN110716749A (zh) * 2019-09-03 2020-01-21 东南大学 一种基于功能相似度匹配的代码搜索方法
CN107562919B (zh) * 2017-09-13 2020-07-17 云南大学 一种基于信息检索的多索引集成软件构件检索方法及系统
CN112507065A (zh) * 2020-11-18 2021-03-16 电子科技大学 一种基于注释语义信息的代码搜索方法
CN113869378A (zh) * 2021-09-13 2021-12-31 四川大学 一种基于聚类与标签传播的软件系统模块划分方法
CN114510257A (zh) * 2021-12-09 2022-05-17 西安邮电大学 一种基于层次聚类组合的软件架构恢复方法
CN114547316A (zh) * 2022-04-27 2022-05-27 深圳市网联安瑞网络科技有限公司 凝聚型层次聚类算法优化系统、方法、设备、介质及终端

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101751438A (zh) * 2008-12-17 2010-06-23 中国科学院自动化研究所 自适应语义驱动的主题网页过滤系统
US20110179017A1 (en) * 2010-01-20 2011-07-21 Microsoft Corporation Detecting spiking queries
CN102141919A (zh) * 2010-01-28 2011-08-03 北京邮电大学 模块化java应用软件在线更新系统及方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101751438A (zh) * 2008-12-17 2010-06-23 中国科学院自动化研究所 自适应语义驱动的主题网页过滤系统
US20110179017A1 (en) * 2010-01-20 2011-07-21 Microsoft Corporation Detecting spiking queries
CN102141919A (zh) * 2010-01-28 2011-08-03 北京邮电大学 模块化java应用软件在线更新系统及方法

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
刘宝艳: "基于改进编辑距离和依存文法的汉语句子相似度计算", 《计算机应用与软件》 *
刘文远: "IRP中基于聚类分析的主题数据库划分研究", 《情报杂志》 *
史斌: "面向语义网的语义搜索引擎关键技术研究", 《中国博士学位论文全文数据 信息科技辑》 *
曹宇: "面向开源软件的聚类搜索系统设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *
李彬: "基于语义依存的汉语句子相似度计算", 《计算机应用研究》 *

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018103033A1 (en) * 2016-12-08 2018-06-14 Hewlett Packard Enterprise Development Lp Software classification
CN108304174A (zh) * 2017-08-22 2018-07-20 北京智行鸿远汽车有限公司 一种基于numpy的高精度C语言算法验证方法
CN107562919B (zh) * 2017-09-13 2020-07-17 云南大学 一种基于信息检索的多索引集成软件构件检索方法及系统
CN110716749A (zh) * 2019-09-03 2020-01-21 东南大学 一种基于功能相似度匹配的代码搜索方法
CN110716749B (zh) * 2019-09-03 2023-08-04 东南大学 一种基于功能相似度匹配的代码搜索方法
CN112507065A (zh) * 2020-11-18 2021-03-16 电子科技大学 一种基于注释语义信息的代码搜索方法
CN112507065B (zh) * 2020-11-18 2022-07-12 电子科技大学 一种基于注释语义信息的代码搜索方法
CN113869378A (zh) * 2021-09-13 2021-12-31 四川大学 一种基于聚类与标签传播的软件系统模块划分方法
CN113869378B (zh) * 2021-09-13 2023-04-07 四川大学 一种基于聚类与标签传播的软件系统模块划分方法
CN114510257A (zh) * 2021-12-09 2022-05-17 西安邮电大学 一种基于层次聚类组合的软件架构恢复方法
CN114510257B (zh) * 2021-12-09 2024-10-01 西安邮电大学 一种基于层次聚类组合的软件架构恢复方法
CN114547316A (zh) * 2022-04-27 2022-05-27 深圳市网联安瑞网络科技有限公司 凝聚型层次聚类算法优化系统、方法、设备、介质及终端

Also Published As

Publication number Publication date
CN106202206B (zh) 2020-02-14

Similar Documents

Publication Publication Date Title
CN106202206A (zh) 一种基于软件聚类的源码功能搜索方法
Bruni et al. Multimodal distributional semantics
Meng et al. Semi-supervised heterogeneous fusion for multimedia data co-clustering
CN106250412B (zh) 基于多源实体融合的知识图谱构建方法
Bilenko et al. Adaptive blocking: Learning to scale up record linkage
Bruni et al. Distributional semantics with eyes: Using image analysis to improve computational representations of word meaning
CN109408811B (zh) 一种数据处理方法及服务器
Nhi et al. A model of semantic-based image retrieval using C-tree and neighbor graph
RU2646386C1 (ru) Извлечение информации с использованием альтернативных вариантов семантико-синтаксического разбора
CN111221944A (zh) 文本意图识别方法、装置、设备和存储介质
CN108228758A (zh) 一种文本分类方法及装置
CN111737997A (zh) 一种文本相似度确定方法、设备及储存介质
RU2640718C1 (ru) Верификация атрибутов информационных объектов
CN106294733A (zh) 基于文本分析的网页检测方法
Sharaff et al. Analysing fuzzy based approach for extractive text summarization
CN106599072A (zh) 一种文本聚类方法及装置
CN113434684A (zh) 自监督学习的谣言检测方法、系统、设备及存储介质
CN106203508A (zh) 一种基于Hadoop平台的图像分类方法
He et al. Automatic labeling of topic models using graph-based ranking
Yuan et al. CSCIM_FS: Cosine similarity coefficient and information measurement criterion-based feature selection method for high-dimensional data
Allani et al. Pattern graph-based image retrieval system combining semantic and visual features
Chen et al. A probabilistic topic-connection model for automatic image annotation
Benedetti et al. Context semantic analysis: a knowledge-based technique for computing inter-document similarity
Ramachandran et al. Document Clustering Using Keyword Extraction
Sharmila et al. Non-Class Element based Iterative Text Clustering Algorithm for Improved Clustering Accuracy using Semantic Ontology

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant