CN107943514A - 一种软件文档中核心代码元素的挖掘方法及系统 - Google Patents
一种软件文档中核心代码元素的挖掘方法及系统 Download PDFInfo
- Publication number
- CN107943514A CN107943514A CN201711059029.7A CN201711059029A CN107943514A CN 107943514 A CN107943514 A CN 107943514A CN 201711059029 A CN201711059029 A CN 201711059029A CN 107943514 A CN107943514 A CN 107943514A
- Authority
- CN
- China
- Prior art keywords
- document
- code
- software
- code element
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
Abstract
本发明涉及一种软件文档中核心代码元素的挖掘方法及系统。该方法包括:1)对待处理软件项目的软件文档和源代码进行收集,并解析所述软件文档和源代码,得到候选的文档‑代码关联关系集合;2)从候选文档‑代码关联关系的相关软件文档与软件代码中抽取文本和代码特征,并组织所述特征以构建软件文档中候选代码元素的特征向量;3)利用带有标注核心代码元素的训练数据的特征向量,通过调优模型参数得到分类学习模型,通过分类学习模型识别软件文档中的核心代码元素。该系统包括:软件文档与软件代码预处理模块、特征抽取模块、分类学习算法模块。本发明能够追踪并度量软件文档与软件代码间的关联关系,区分核心关联和噪音关联。
Description
技术领域
本发明涉及软件文档-代码关联关系追踪领域,尤其涉及一种软件文档中核心代码元素的挖掘方法及系统。
背景技术
长期以来,软件可追踪性研究一直受到广泛的关注。研究者们试图通过挖掘软件代码与各类自然语言文档之间潜在的关联关系,建立软件文档与软件代码的可追踪性关联。这对于程序理解、需求工程、软件维护等多个方面均有重要意义。
现有的软件文档与软件代码关联关系挖掘方法可以分为两类:
一、基于信息检索的方法。该方法基本思想是把软件代码作为查询条件在候选软件文档中进行信息检索,根据相似度排序在满足一定要求(例如相似度阈值或相关程度排名)的软件文档与软件代码之间建立关联。
二、基于程序分析技术的方法。该方法通过识别软件文档中出现的代码元素(例如类名、方法名等),判断其所属的代码单元,并在软件文档和代码单元间建立可追踪性关联。如何基于上下文判断代码元素所属的代码单元(消歧)是该方法的重点。
上述软件文档与软件代码关联关系挖掘方法存在以下问题:
(1)第一类方法受限于软件代码中标识符的命名应该是自解释的,或存在足够的代码注释,对一些软件项目来说效果不能令人满意。一方面是因为这类方法将软件代码当作普通文本处理,在将其转化为特征向量的过程中,损失了大量软件代码特有的结构语义信息;另一方面是因为软件文档和代码中每个特征(代码元素)的重要程度与出现次数基本无关,而信息检索的基础是进行关键字匹配。如果软件文档中没有出现该关键字或关键词的词频不高,则可能导致检索效果不佳。此外,软件文档中更多可能使用同义词、近义词或缩写词,这也对信息检索方法的效果造成了比较大的挑战。
(2)第二类方法目前重点关注于识别文档中代码元素所属的代码单元,并没有对这些关联的强弱/真假做出区分和判断。事实上,软件文档可能存在多个代码元素,但文档内容其实是围绕其中一个代码元素来进行阐述的,称为核心代码元素。因此,在软件文档-代码关联过程中,需要识别和建立软件文档与其核心代码元素之间的关联(强关联/真关联);而那些仅仅用于背景或补充描述出现在文档中的其他代码元素,与软件文档并没有太大关系,对软件文档-代码关联追踪来说即是噪音(噪音关联/假关联)。噪音关联会极大影响软件文档与软件代码间关联关系追踪的准确性。
由于现有技术中并不存在一个能够度量软件文档与软件代码间关联关系并挖掘文档核心代码元素的方法。因此,研究一种更好的软件文档与软件代码间关联关系追踪方法十分必要。
发明内容
本发明的目的是提供一种软件文档中核心代码元素的挖掘方法及系统,以改进软件文档-代码之间的关联关系追踪的效果。该方法及系统能够追踪并度量软件文档与软件代码间的关联关系,区分核心关联和噪音关联。
一种软件文档中核心代码元素的挖掘方法,其步骤包括:
1)对待处理软件项目的软件文档和源代码进行收集,并解析所述软件文档和源代码,得到候选的文档-代码关联关系集合;
2)从候选文档-代码关联关系的相关软件文档与软件代码中抽取文本特征和代码特征,并组织所述特征以构建软件文档中候选代码元素的特征向量;
3)将已标注核心代码元素的软件文档作为训练数据,构建特征向量,通过调优模型参数得到分类学习模型,通过分类学习模型识别待识别的软件文档中的核心代码元素。
进一步地,步骤1)包括以下子步骤:
1-1)对获取的软件文档进行解析:根据XML标签抽取软件文档中有意义的文本部分(如问答文档中问题的题目、描述信息),构建软件文档对应的文档实体;对文档内容进行分段(分段依据为文档中的自然段和空白行),并识别和标明文档中的代码片段和超链接;根据文档内容中存在的“<code>”和“</code>”识别文档中的代码片段;
1-2)对获取的软件源代码进行解析:基于所获取的源代码,利用工具JDT,生成抽象语法树;遍历抽象语法树,获取软件项目的代码元素列表,基于代码元素之间的关联关系并构建代码结构图。
1-3)基于程序语法规则和命名规则构建正则表达式,根据正则表达式从步骤1-1)中的软件文档实体中抽取近似代码元素,并将其和步骤1-2)中获取的代码元素列表进行匹配,若近似代码元素和某个代码元素相同,则建立相应文档实体与代码元素间的关联关系,得到候选文档-代码关联关系集合。
进一步地,步骤2)包括以下子步骤:
2-1)从文档中提取的特征包括:词频特征(TF-IDF)、代码元素在文档中的位置特征(Location)、文档中的特定句法(Expwords)、文档与代码元素注释的文本相似度(DocSimilarity)、关联文档中代码元素的词频特征(R-TF-IDF);
2-2)从代码中提取的特征包括:代码元素的类型(Type)、代码元素间的关联(Relation)以及代码元素间的距离(Distance)。
2-3)基于上述特征,按照libSVM格式等构建用于度量软件文档与软件代码间关联关系的特征向量。
进一步地,步骤3)包括以下子步骤:
3-1)对每个标注好核心代码元素的文档,抽取上述文档和代码特征构建特征向量,输入基于决策树的分类模型进行学习,调优参数,得到分类学习模型;
3-2)基于上述分类学习模型识别一个软件文档的核心代码元素。当文档中某代码元素获取的度量值的排名超过阈值时,该代码元素为该文档的核心代码元素。
一种软件文档中核心代码元素的挖掘系统,包括软件文档与软件代码预处理模块、特征抽取模块和分类学习算法模块;
所述软件文档与软件代码预处理模块用于对待处理软件项目的软件文档和源代码进行收集、解析和预处理,识别软件文档中的所有代码元素,得到候选的文档-代码关联关系集合;
所述特征抽取模块用于从上述候选文档-代码关联关系的相关软件文档与软件代码中抽取文本和代码特征,并组织所述特征以构建软件文档中候选代码元素的特征向量;
所述分类学习算法模块用于将已标注核心代码元素的软件文档作为训练数据,构建特征向量,通过调优模型参数得到学习模型,通过所述学习模型识别待识别的软件文档中的核心代码元素。
进一步地,所述软件文档与软件代码预处理模块包括文档和源代码收集模块、文档和源代码解析模块和软件文档中代码元素识别模块;其中所述文档和源代码收集模块包括文档收集模块和源代码收集模块;所述文档和源代码解析模块包括文档预处理模块、文档解析模块和源代码解析模块;所述软件文档中代码元素识别模块包括近似代码元素抽取模块、代码元素匹配模块和清洗去歧模块;
所述文档收集模块用于收集待处理软件项目中软件文档的源数据;
所述源代码收集模块用于收集待处理软件项目的源代码;
所述文档预处理模块用于解析上述源数据中的文档信息;
所述文档解析模块用于划分文档段落并对文档段落进行分类,识别文档中的超链接并对文档内容进行过滤清洗;
所述源代码解析模块用于解析上述源代码,得到待处理软件项目的代码元素列表;所述代码元素包括类(class)、方法(method)、接口(interface);
所述近似代码元素抽取模块用于基于程序语法规则和命名规则构建正则表达式,并根据正则表达式从待处理软件项目的软件文档中抽取近似代码元素;
所述代码元素匹配模块用于对近似代码元素和上述源代码解析模块解析出的代码元素进行匹配,若近似代码元素和代码元素相同,则建立文档与代码间的关联关系;
所述清洗去歧模块用于清洗无法建立匹配的近似代码元素,并对存在多个匹配的近似代码元素去歧以确定匹配对象,得到候选文档-代码关联关系集合。
进一步地,所述特征抽取模块包括多维特征抽取模块和特征向量构造模块;
所述多维特征抽取模块用于从上述候选文档-代码关联关系的相关软件文档与软件代码中抽取文本和代码特征。所述特征抽取模块抽取的特征包括词频特征(TF-IDF)、位置特征(Location)、特定句法(Expwords)、文档与代码元素注释的文本相似度(DocSimilarity)、关联文档中代码元素的词频特征(R-TF-IDF)、代码元素的类型(Type)、代码元素间的关联(Relation)、代码元素间的距离(Distance);
所述特征向量构造模块用于对上述抽取的特征进行组织,按照libSVM格式,从软件文档的内容、上下文以及源代码内部挖掘并量化特征信息以构造特征向量。
进一步地,所述分类学习算法模块包括模型学习模块和度量分类模块;
所述模型学习模块用于利用已标注好核心代码元素的训练数据,通过调优模型参数得到学习模型;所述训练数据都已经抽取并构造相应的特征向量;
所述度量分类模块用于根据上述学习模型得到文档中不同代码元素的度量值,并基于度量值得到软件文档中的核心代码元素。每个度量值的大小在实数域[0,1]中。当代码元素获取的度量值的排名超过阈值时,该代码元素为核心代码元素。
进一步地,建立软件文档与其核心代码元素之间的可追踪关联关系。
本发明提供一种软件文档中核心软件代码元素的挖掘方法及系统,用以识别和过滤软件文档和软件代码之间较弱的关联关系,提高软件文档与软件代码关联关系追踪的质量。本发明的优点和有益效果包括:
1、发现并分析了软件文档与软件代码之间关联程度不同的基本现象;
2、提出了一种结合文档内容和源代码结构语义的、基于机器学习的软件文档中核心代码元素的挖掘方法;
3、本方法提出了8个维度的特征进行文档建模,包括:词频特征(TF-IDF)、位置特征(Location)、特定句法(Expwords)、文档与代码元素注释的文本相似度(DocSimilarity)、关联文档中代码元素的词频特征(R-TF-IDF)、代码元素的类型(Type)、代码元素间的关联(Relation)和代码元素间的距离(Distance);
4、基于本方法,在软件文档与软件代码关联关系追踪过程中能够过滤其中28.8%~80.8%的弱关联关系,大幅度提升了关联关系追踪的质量;
5、本发明方法扩展性强,可适用范围广。
附图说明
图1为本发明提供的一种软件文档中核心代码元素的挖掘系统框架图。
图2为本发明软件文档与软件代码预处理模块框架图。
图3为本发明特征抽取模块框架图。
图4为本发明分类学习算法模块框架图。
具体实施方式
为使本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合所附图作详细说明如下。
本发明提供一种软件文档中核心代码元素的挖掘系统,如图1所示,该系统包括软件文档与软件代码预处理模块、特征抽取模块和分类学习算法模块。
其中软件文档与软件代码预处理模块针对所获取的软件文档和软件源代码进行预处理,抽取后续过程所需的数据,获取候选文档-代码关联关系集合;
特征抽取模块根据软件文档与软件代码预处理模块中获取的数据,抽取文档和代码中的8类相关特征进行数据建模;
分类学习算法模块根据已标注的数据集进行机器学习,对分类模型进行训练,进而通过学习模型识别待识别的软件文档中的核心代码元素。
所述软件文档与软件代码预处理模块包括文档和源代码收集模块、文档和源代码解析模块和软件文档中代码元素识别模块。
所述文档和源代码收集模块用于对待处理软件项目的软件文档和源代码进行收集和存储。所述文档和源代码收集模块又包括文档收集模块和源代码收集模块。所述文档收集模块用于从互联网中收集待处理软件项目中软件文档的源数据,并将收集的软件文档的源数据进行存储;所述源代码收集模块用于从互联网中收集待处理软件项目的源代码,并将收集的的源代码进行存储。
所述文档和源代码解析模块用于对收集的软件文档和源代码进行预处理和解析。所述文档和源代码解析模块又包括文档预处理模块、文档解析模块和源代码解析模块:
a)所述文档预处理模块用于解析源数据中的文档信息,所述文档信息包括无效文本或字符的剔除(如网页中的标签)、有效文本类别的区分(其有效文本类别包括文字描述文本和代码片段)。
b)所述文档解析模块用于对获取的软件文档进行解析:根据XML标签抽取软件文档中有意义的文本部分(如问答文档中问题的题目、描述信息),构建软件文档对应的文档实体;对文档内容进行分段(分段依据为文档中的自然段和空白行),并识别和标明文档中的代码片段和超链接;根据文档内容中存在的“<code>”和“</code>”识别文档中的代码片段;
c)所述源代码解析模块用于对获取的软件源代码进行解析:基于所获取的源代码生成抽象语法树;遍历抽象语法树,获取软件项目的代码元素列表,基于代码元素之间的关联关系并构建代码结构图。所述代码元素的种类包括类、方法、接口;所述代码元素之间存在的关联关系包括继承、包含、调用、依赖、返回。
所述软件文档中代码元素识别模块用于软件文档中代码元素的识别与候选文档-代码关联关系的建立。基于程序语法规则和命名规则构建正则表达式,根据正则表达式从上述文档解析后的软件文档实体中抽取近似代码元素,并将其和软件源代码中获取的代码元素列表进行匹配,若近似代码元素和软件源代码中某个代码元素相同,则建立相应文档实体与代码元素间的关联关系,得到候选文档-代码关联关系集合。
软件文档与软件代码预处理的基本过程如图2所示,在该实施例中所述待处理软件项目为Lucene,待收集的软件文档为Stackoverflow问答数据,其实现方法包括以下步骤:
步骤1,搜集软件文档。配置项目特定站点地址,即将Lucene相关的Stackoverflow问答数据URL地址写入配置文件,将本地存储地址写入配置文件。启动文档收集模块,自动爬取相关软件文档的源数据。
步骤2:收集软件源代码。将Lucene源代码的URL地址写入配置文件,将本地存储地址写入配置文件。启动源代码收集模块,并对源代码进行多线程收集。
步骤3:进行文档预处理。在获取的Lucene问答文档中,数据存储格式为XML,并且问答文档中对应的问题、回答和评论记录,均对应XML文件的一条记录,同时同一个问题中的问题、回答和评论记录共同构成了一条会话信息。因此根据XML标签构建文档实体(Post实体),建立文档间关联,并将文档组织成会话形式。
步骤4:进行文档解析。划分文档段落并对文档段落进行分类,识别文档中的超链接并对文档内容进行过滤清洗。基于HTML标签和程序关键字将段落分为自然语言文本和代码片段,并识别自然语言文本的超链接;清洗文档中的HTML标签和停用词。由于文档中会出现用于排版、无意义的HTML标签,因此需要剔除,减少噪音。
步骤5:进行源代码解析。首先使用Eclipse的JDT工具构建源代码的抽象语法树,得到软件项目的代码元素列表;其次遍历抽象语法树,挖掘其中的代码元素节点和代码元素之间的关联关系;基于代码元素列表和关联关系组织成代码结构图,并存储在图数据库中。
步骤6:识别软件文档中的代码元素。具体步骤又包括:
6.1)近似代码元素抽取:基于程序语法规则(如变量声明)和命名规则(如驼峰命名法)构建一系列正则表达式。遍历问答文档,根据上述正则表达式匹配各文档中的近似代码元素(如IndexReader、IWriter),生成近似代码元素列表;
6.2)代码元素匹配:对源代码的代码元素列表与近似代码元素列表进行匹配,对名字相同的近似代码元素建立连接。如果近似代码元素在源代码的代码元素列表中出现(如IndexReader),则匹配成功;
6.3)清洗去歧:清洗无法建立匹配的近似代码元素,并对存在多个匹配的近似代码元素去歧确定匹配对象,以得到候选文档-代码关联关系集合。因为存在不同的包名下含有相同的代码元素的情况,即同一个近似代码元素和多个代码元素匹配成功,因此,根据代码元素在项目中出现的上下文(注释、变量名等)计算和近似代码元素上下文的相似度,进行去歧。
所述特征抽取模块包括多维特征抽取模块和特征向量构造模块。
所述多维特征抽取模块用于抽取并量化可能影响核心代码元素抽取的各类特征。如图3所示,本方法主要抽取并使用了以下8类文档和代码特征:
1)词频特征(TF-IDF):指统计分析的软件文档中各代码元素的词频TF和逆向文件频率IDF。其中TF是指代码元素在当前软件文档中的出现次数,IDF是指代码元素在软件文档集中的出现次数的倒数。其计算公式如下所示,其中DFt表示代码元素t在软件文档集中出现的软件文档个数;TFt,r表示当前软件文档中代码元素t在当前软件文档r中的词频;N为软件文档的个数。
2)位置特征(Location):指代码元素在软件文档中出现的位置。代码元素可能出现在软件文档的自然语言文本中,也可能出现在软件文档的代码片段中。由此可以将代码元素的位置量化为3个取值:在自然语言文本中出现、在代码片段中出现和两处都出现。
3)特定句法(Expwords):指代码元素上下文中包含强指示性关键词的数量。软件文档中某个代码元素的上下文往往包含一些指示性很强的关键词(如implement、use、choose等)以及带有正向色彩的描述词(如useful、available等)。这些特殊词(即关键词和描述词等)往往表达着该软件文档正在围绕该代码元素讨论,对评估核心代码元素起着重要作用。
4)文档与代码元素注释的文本相似度(DocSimilarity):指代码元素在源代码中的注释文本和软件文档中的自然语言文本之间的余弦相似度。
5)关联文档中代码元素的词频特征(R-TF-IDF):指统计分析的软件文档中各代码元素在关联文档中的词频TF和逆向文件频率IDF。如前所述,软件问答文档被组织成会话形式。即使一个回答文档中没有出现任何代码元素,其相关问题中代码元素的出现情况往往对该软件文档核心代码元素的识别也起着重要作用。因而本发明还考虑了软件文档的关联文档中代码元素的词频特征R-TF-IDF。计算方法和TF-IDF大体一致。
6)代码元素的类型(Type):指代码元素的不同类型。不同类型的代码元素在应用中具有不同的作用。以Java代码为例,当软件文档中同时包含了一个类和这个类中声明的方法时,更有可能认为这个方法是该软件文档的核心代码元素,而类名只是作为讨论这个方法时的辅助说明。本发明按照类、方法、接口将代码元素分为3类。
7)代码元素间的关联(Relation):指软件文档中的近似代码元素在源代码结构图中的关联。代码元素间往往在源代码中存在调用、继承等多种关联关系。相对而言,核心代码元素与其它代码元素之间具有较多、较密切的关联,因此本发明将近似代码元素相关的关联数量也作为一项重要的指标。
8)代码元素间的距离(Distance):除了关联数量之外,两个在相同/相似上下文和调用序列中出现的代码元素在语义上应该比较接近。由此,本方法基于代码结构图,通过代码嵌入(Code Embedding)将每个代码元素映射为一个200维的向量表示,将每个软件文档中所有代码元素的平均向量作为软件文档语义中心,计算每个代码元素到该软件文档语义中心的欧拉距离(Distance),并将这个距离作为评估软件文档中核心代码元素的一个特征。
所述特征向量构造模块用于将抽取出的特征组织在一起,生成LibSVM格式的特征向量,并存储至数据库中。
所述分类学习算法模块包括模型学习模块和度量分类模块。如图4所示,其实现方法包括以下步骤:
步骤1:选择部分软件文档的源数据进行人工标注,标注每个文档的核心代码元素;
步骤2:将对每个标注好核心代码元素的文档,抽取上述文档和代码特征构建特征向量,分为训练集和测试集用于训练和优化分类模型,基于分类效果,不断地调优模型参数,得到分类学习模型;如图4所示,可以采用GBDT(Gradient Boosting Decision Tree)等学习模型。
步骤3:基于上述分类学习模型构建分类器,该分类器综合了“基于阈值分类”和“基于排名分类”两种方式,将文档中某代码元素获取的度量值进行归一化后进行排名,当某个代码元素的度量值的排名超过阈值时,该代码元素为该文档的核心代码元素。
为了验证本发明的有效性,针对开源软件项目Lucene进行了实验。在该实验中,爬取了Lucene相关的源代码以及StackOverflow中的问答文档,针对问答文档中出现的代码元素进行了识别、抽取,并基于上述描述的相关特征向量,进行了分类。结果表明,当度量值的大小设置为0.6时,识别的核心代码元素的准确率为72.7%。
以上实施仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。
Claims (9)
1.一种软件文档中核心代码元素的挖掘方法,其特征在于,包括以下步骤:
1)对待处理软件项目的软件文档和源代码进行收集,并解析所述软件文档和源代码,得到候选的文档-代码关联关系集合;
2)从候选文档-代码关联关系的相关软件文档与软件代码中抽取文本特征和代码特征,并组织所述特征以构建软件文档中候选代码元素的特征向量;
3)将已标注核心代码元素的软件文档作为训练数据,构建特征向量,通过调优模型参数得到分类学习模型,通过分类学习模型识别待识别的软件文档中的核心代码元素。
2.如权利要求1所述的方法,其特征在于,步骤1)包括以下子步骤:
1-1)对获取的软件文档进行解析:根据XML标签抽取软件文档中有意义的文本部分,构建软件文档对应的文档实体;对文档内容进行分段,并识别和标明文档中的代码片段和超链接;根据文档内容中存在的“<code>”和“</code>”识别文档中的代码片段;
1-2)对获取的软件源代码进行解析:基于所获取的源代码,利用工具JDT,生成抽象语法树;遍历抽象语法树,获取软件项目的代码元素列表,基于代码元素之间的关联关系并构建代码结构图;
1-3)基于程序语法规则和命名规则构建正则表达式,根据正则表达式从步骤1-1)中的软件文档实体中抽取近似代码元素,并将其和步骤1-2)中获取的代码元素列表进行匹配,若近似代码元素和某个代码元素相同,则建立相应文档实体与代码元素间的关联关系,得到候选文档-代码关联关系集合。
3.如权利要求1所述的方法,其特征在于,步骤2)包括以下子步骤:
2-1)从文档中提取特征,提取的特征包括:词频特征、代码元素在文档中的位置特征、文档中的特定句法、文档与代码元素注释的文本相似度、关联文档中代码元素的词频特征;
2-2)从代码中提取特征,提取的特征包括:代码元素的类型、代码元素间的关联以及代码元素间的距离;
2-3)基于从文档和代码中提取的特征,按照libSVM格式构建用于度量软件文档与软件代码间关联关系的特征向量。
4.如权利要求1所述的方法,其特征在于,步骤3)包括以下子步骤:
3-1)对每个标注好核心代码元素的文档,抽取文档和代码特征构建特征向量,输入基于决策树的分类模型进行学习,通过调优参数得到分类学习模型;
3-2)基于分类学习模型识别软件文档的核心代码元素,当文档中某代码元素获取的度量值的排名超过阈值时,该代码元素为该文档的核心代码元素。
5.一种软件文档中核心代码元素的挖掘系统,其特征在于,包括:
软件文档与软件代码预处理模块,用于对待处理软件项目的软件文档和源代码进行收集,并解析所述软件文档和源代码,得到候选的文档-代码关联关系集合;
特征抽取模块,用于从候选文档-代码关联关系的相关软件文档与软件代码中抽取文本特征和代码特征,并组织所述特征以构建软件文档中候选代码元素的特征向量;
分类学习算法模块,用于将已标注核心代码元素的软件文档作为训练数据,构建特征向量,通过调优模型参数得到分类学习模型,通过分类学习模型识别待识别的软件文档中的核心代码元素。
6.如权利要求5所述的系统,其特征在于,所述软件文档与软件代码预处理模块包括文档和源代码收集模块、文档和源代码解析模块和软件文档中代码元素识别模块;所述文档和源代码收集模块包括文档收集模块和源代码收集模块;所述文档和源代码解析模块包括文档预处理模块、文档解析模块和源代码解析模块;所述软件文档中代码元素识别模块包括近似代码元素抽取模块、代码元素匹配模块和清洗去歧模块;
所述文档收集模块用于收集待处理软件项目中软件文档的源数据;
所述源代码收集模块用于收集待处理软件项目的源代码;
所述文档预处理模块用于解析软件文档源数据中的文档信息;
所述文档解析模块用于划分文档段落并对文档段落进行分类,识别文档中的超链接并对文档内容进行过滤清洗;
所述源代码解析模块用于解析上述源代码,得到待处理软件项目的代码元素列表;所述代码元素包括类、方法和接口;
所述近似代码元素抽取模块用于基于程序语法规则和命名规则构建正则表达式,并根据正则表达式从待处理软件项目的软件文档中抽取近似代码元素;
所述代码元素匹配模块用于对近似代码元素和上述源代码解析模块解析出的代码元素进行匹配,若近似代码元素和代码元素相同,则建立文档与代码间的关联关系;
所述清洗去歧模块用于清洗无法建立匹配的近似代码元素,并对存在多个匹配的近似代码元素去歧以确定匹配对象,得到候选文档-代码关联关系集合。
7.如权利要求5所述的系统,其特征在于,所述特征抽取模块包括多维特征抽取模块和特征向量构造模块;所述多维特征抽取模块用于从候选文档-代码关联关系的相关软件文档与软件代码中抽取文本和代码特征;所述特征向量构造模块用于对抽取的特征进行组织,按照libSVM格式构建用于度量软件文档与软件代码间关联关系的特征向量。
8.如权利要求7所述的系统,其特征在于,所述特征抽取模块抽取的特征包括词频特征、位置特征、特定句法、文档与代码元素注释的文本相似度、关联文档中代码元素的词频特征、代码元素的类型、代码元素间的关联、代码元素间的距离。
9.如权利要求5所述的系统,其特征在于,所述分类学习算法模块包括模型学习模块和度量分类模块;所述模型学习模块用于利用已标注好核心代码元素的训练数据,通过调优模型参数得到学习模型;所述度量分类模块用于根据学习模型得到文档中不同代码元素的度量值,并基于度量值得到软件文档中的核心代码元素。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711059029.7A CN107943514A (zh) | 2017-11-01 | 2017-11-01 | 一种软件文档中核心代码元素的挖掘方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711059029.7A CN107943514A (zh) | 2017-11-01 | 2017-11-01 | 一种软件文档中核心代码元素的挖掘方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107943514A true CN107943514A (zh) | 2018-04-20 |
Family
ID=61933202
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711059029.7A Pending CN107943514A (zh) | 2017-11-01 | 2017-11-01 | 一种软件文档中核心代码元素的挖掘方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107943514A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108628631A (zh) * | 2018-05-14 | 2018-10-09 | 北京理工大学 | 一种对参数中的缩写词进行自动扩展的方法 |
CN108804919A (zh) * | 2018-05-03 | 2018-11-13 | 上海交通大学 | 基于深度学习的恶意代码同源判定方法 |
CN109753286A (zh) * | 2018-12-28 | 2019-05-14 | 四川新网银行股份有限公司 | 一种基于功能标签的代码方法统计其调用次数的方法 |
CN110795077A (zh) * | 2019-09-26 | 2020-02-14 | 北京你财富计算机科技有限公司 | 一种基于人工智能的软件开发方法、装置及电子设备 |
CN112541344A (zh) * | 2019-09-23 | 2021-03-23 | 北京国双科技有限公司 | 目标段落的确定方法、装置、存储介质及设备 |
US11132512B2 (en) | 2019-11-08 | 2021-09-28 | International Business Machines Corporation | Multi-perspective, multi-task neural network model for matching text to program code |
CN113971216A (zh) * | 2021-10-22 | 2022-01-25 | 北京百度网讯科技有限公司 | 数据处理方法、装置、电子设备和存储器 |
WO2022121146A1 (zh) * | 2020-12-07 | 2022-06-16 | 中山大学 | 一种代码片段重要性的判断方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103235723A (zh) * | 2013-04-23 | 2013-08-07 | 浙江天正思维信息技术有限公司 | 基于抽象语法树和软件产品特征的应用软件代码提取方法 |
CN106649557A (zh) * | 2016-11-09 | 2017-05-10 | 北京大学(天津滨海)新代信息技术研究院 | 一种缺陷报告与邮件列表语义关联挖掘方法 |
-
2017
- 2017-11-01 CN CN201711059029.7A patent/CN107943514A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103235723A (zh) * | 2013-04-23 | 2013-08-07 | 浙江天正思维信息技术有限公司 | 基于抽象语法树和软件产品特征的应用软件代码提取方法 |
CN106649557A (zh) * | 2016-11-09 | 2017-05-10 | 北京大学(天津滨海)新代信息技术研究院 | 一种缺陷报告与邮件列表语义关联挖掘方法 |
Non-Patent Citations (2)
Title |
---|
CAO Y等: "Refining Traceability Links between Code and Software Documents", 《PROCEEDINGS OF THE 9TH ASIA-PACIFIC SYMPOSIUM ON INTERNETWARE》 * |
叶挺等: "基于自然语言的软件信息检索工具", 《计算机科学》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108804919A (zh) * | 2018-05-03 | 2018-11-13 | 上海交通大学 | 基于深度学习的恶意代码同源判定方法 |
CN108628631A (zh) * | 2018-05-14 | 2018-10-09 | 北京理工大学 | 一种对参数中的缩写词进行自动扩展的方法 |
CN109753286A (zh) * | 2018-12-28 | 2019-05-14 | 四川新网银行股份有限公司 | 一种基于功能标签的代码方法统计其调用次数的方法 |
CN112541344A (zh) * | 2019-09-23 | 2021-03-23 | 北京国双科技有限公司 | 目标段落的确定方法、装置、存储介质及设备 |
CN110795077A (zh) * | 2019-09-26 | 2020-02-14 | 北京你财富计算机科技有限公司 | 一种基于人工智能的软件开发方法、装置及电子设备 |
US11132512B2 (en) | 2019-11-08 | 2021-09-28 | International Business Machines Corporation | Multi-perspective, multi-task neural network model for matching text to program code |
WO2022121146A1 (zh) * | 2020-12-07 | 2022-06-16 | 中山大学 | 一种代码片段重要性的判断方法和装置 |
CN113971216A (zh) * | 2021-10-22 | 2022-01-25 | 北京百度网讯科技有限公司 | 数据处理方法、装置、电子设备和存储器 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107943514A (zh) | 一种软件文档中核心代码元素的挖掘方法及系统 | |
CN110765257B (zh) | 一种知识图谱驱动型的法律智能咨询系统 | |
CN106776711B (zh) | 一种基于深度学习的中文医学知识图谱构建方法 | |
Srihari | Automatic indexing and content-based retrieval of captioned images | |
CN103544255B (zh) | 基于文本语义相关的网络舆情信息分析方法 | |
RU2686000C1 (ru) | Извлечение информационных объектов с использованием комбинации классификаторов, анализирующих локальные и нелокальные признаки | |
CN103313248B (zh) | 一种识别垃圾信息的方法和装置 | |
CN107729468A (zh) | 基于深度学习的答案抽取方法及系统 | |
CN105718585B (zh) | 文档与标签词语义关联方法及其装置 | |
KR101335540B1 (ko) | 온톨로지 기반의 문서 분류 방법 및 장치 | |
CN106126619A (zh) | 一种基于视频内容的视频检索方法及系统 | |
CN108345686A (zh) | 一种基于搜索引擎技术的数据分析方法及系统 | |
CN110287292B (zh) | 一种裁判量刑偏离度预测方法及装置 | |
CN112559684A (zh) | 一种关键词提取及信息检索方法 | |
CN113505586A (zh) | 一种融合语义分类与知识图谱的坐席辅助问答方法与系统 | |
CN106202285A (zh) | 搜索结果展示方法和装置 | |
CN110889786A (zh) | 一种基于lstm技术的法律诉讼被告人保全用审判服务方法 | |
CN110737821B (zh) | 相似事件查询的方法、装置、存储介质和终端设备 | |
CN104298683B (zh) | 主题挖掘方法和设备、以及查询扩展方法和设备 | |
CN110472203B (zh) | 一种文章的查重检测方法、装置、设备及存储介质 | |
CN109918648B (zh) | 一种基于动态滑动窗口特征评分的谣言深度检测方法 | |
CN111444353A (zh) | 一种警情知识图谱的构建及使用方法 | |
CN108536664A (zh) | 商品领域的知识融合方法 | |
CN107526721A (zh) | 一种对电商产品评论词汇的歧义消除方法及装置 | |
CN113849597A (zh) | 基于命名实体识别的违法广告词检测方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20180420 |
|
WD01 | Invention patent application deemed withdrawn after publication |