CN104991909A - 一种针对具体软件历史代码库的词库自动构建方法 - Google Patents
一种针对具体软件历史代码库的词库自动构建方法 Download PDFInfo
- Publication number
- CN104991909A CN104991909A CN201510345253.7A CN201510345253A CN104991909A CN 104991909 A CN104991909 A CN 104991909A CN 201510345253 A CN201510345253 A CN 201510345253A CN 104991909 A CN104991909 A CN 104991909A
- Authority
- CN
- China
- Prior art keywords
- word
- phrase
- storehouse
- relation
- code
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/40—Information retrieval; Database structures therefor; File system structures therefor of multimedia data, e.g. slideshows comprising image and additional audio data
- G06F16/43—Querying
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Machine Translation (AREA)
Abstract
本发明提出了一种针对具体软件历史代码库的词库自动构建方法。本发明的方法是使用知识库构建的想法。对本软件系统所有历史代码库中做一个精炼,提炼出一个属于本软件系统的词库(知识库),以此获得高效的了解一个软件系统的代码构建过程。主要用于代码搜索过程中更准确地进行代码搜索。本发明有利于软件维护人员以及系统开发人员了解本系统在过去版本中使用的单词或词组,以及使用单词之间存在的一定的关系,更有效的开发与维护本系统,促进软件代码中词语使用的一致性。
Description
技术领域
本发明提出了一种针对具体软件历史代码库的词库自动构建方法。主要用于在软件开发与维护过程中了解系统过去所有版本的代码库中所使用的元素以及他们之间的关系,属于软件理解领域。
背景技术
随着软件项目的开发,其复杂程度不断提高,对其维护和理解的难度也不断加大。开发者和维护者的注意力需要多次的去了解过去的系统版本,他们经常面临这样一些问题:在过去的系统版本中过去的开发者定义了哪些元素以及这些元素之间存在着什么样的关系。对于另外一些开发类似系统的人员来说,他们可能搜索与自己即将开发的系统有类似功能的系统,去模仿类似系统的开发,他们需要对类似的系统做一个全面的了解。而且在软件版本的不断更新中,很难也没有大量的时间去了解所有版本的详细代码过程。另外,对已有代码进行理解或者维护时,需要使用代码搜索技术搜寻感兴趣的代码,但是不知道代码中使用什么词语进行标识符的定义的,这个时候有这样的一个词库参考就非常有帮助。但考虑到软件历史库过于庞大,靠人工的方法去理解软件随时间的变化过程相当的费时费力,甚至有时是不可能完成的任务。
目前用于代码搜索推荐相关词组的软件领域的词库构建的方法有很多。典型的的词库是WordNet(Princeton University,2012),但是存在很多不足之处,典型的不足时许多软件领域的有关系单词在WordNet大多不存在我们想要的关系。就促进了许多软件领域的专家在研究软件领域的词库构建。比如说加拿大滑铁卢大学的JinqiuYang.Lin Tan在2013年提出的SWordNet(Yang et al,2012)构建方法,是基于软件上下文推断语义相关词汇的方法。还有Yuan Tian,David Lo等人在2014年提出的WordSim,利用的StackOverFlow中的问答帖提炼出有关词组。是对WordNet的一个很好的补充。以上两种较好的方法都是横向的做出相关词组的推荐,是对整个软件领域的知识库的构建;但是在我们针对具体的软件系统进行代码搜索或者代码维护的时候,应用这些知识库缺乏针对性,还是会造成准确度不高的结果。
发明内容
技术问题:本发明的目的是提供一种针对具体软件历史代码库的词库自动构建方法。主要用于在代码搜索过程中更准确地进行代码搜索。使项目的相关人员可以更方便、更高效的对软件系统有个了解。
技术方案:本发明的方法是使用知识库构建的想法。对本软件系统所有历史代码库中做一个精炼,提炼出一个属于本软件系统的词库(知识库),以此获得高效的了解一个软件系统的代码构建过程。
本发明提出的针对具体软件历史代码库的词库自动构建方法具体步骤如下:
步骤1)提取出软件系统主要为java语言开发的软件系统的历史版本库中的代码和注释生成独立的文档语料库,并将该语料库分为纯代码文档库和纯注释文档库;
步骤2)对语料库中的纯代码文档进行预处理,包括托肯化、去停用词,提取元素,得到单词和词组以及它们在代码中的支持度(Code-TF);在托肯化的过程中,利用java中的“<子类名>+extends+<父类名>”的语法,基于中间单词“extends”分析出类与类之间的的继承关系(kind-of),利用java中的“<类名>+implements+<接口>”的语法,基于中间单词“implements”分析出类与接口的关系(realize-of),得到纯代码语料库中的词、词组关系库(W\WG-Code);
步骤3)对纯注释文档进行词性标注,然后进行预处理,包括托肯化、去停用词,提取出纯代码文档中的单词或词组以及它们在纯注释中的支持度(Comment-TF),利用注释匹配分析出缩略关系,得到纯注释中的词、词组关系库(W\WG-Comment);
步骤4)将纯代码语料库中词、词组关系库与纯注释语料库中词、词组关系库进行整合,去除相同或多余的单词和词组,得到整合后的词、词组关系库(W\WG关系库);
步骤5)先将步骤4)生成的词、词组关系库中的词组关系提取出来,得到词组关系库;其次对词、词组关系进行拆分、词干化得到纯单词文档;再对得到的单词进行词性标注,分析出词组关系、同义关系、缩略关系、得到单词关系库;最后将词组关系库和单词关系库整理出本系统的完整系统词库。
进一步,步骤1)所述的提取是指分别提取纯代码、纯注释文档:利用注释标识符,包括“/*........*/”、“//”、“/**.....*/”,提取出代码中的注释块,生成独立的纯代码语料库和纯注释语料库。
进一步,步骤2)所述元素包括标识符、类名、方法名、变量名
进一步,步骤2)中所述的托肯化是指去除标点符号,比如“”,“?”;去除数字,比如“1”,“23”;提取出单词和词组,并且记录单词和词组的支持度,支持度就是在代码和注释中单词或词组出现的次数;标识单词或词组的成份,成份是指该单词是类名、方法名or变量名;继承关系分析“<子类名>+extends+<父类名>”,类与接口关系分析“<类名>+implements+<接口>”等。
进一步,步骤2)中所述的去停用词是指指去除英文停用词,比如介词“for”,“to”;代词“it”,“he”;冠词“a”,“an”,“the”;一些只由一个单词所构成的标识符。
进一步,步骤3)中所述的是对注释语句块进行词性标注、托肯化、去停用词等处理,提取出单词或词组记录相应的注释中的支持度,利用注释匹配提取单词的缩略关系。
进一步,步骤3)中所述的去除停用词是指去除英文停用词,比如介词“for”,“to”;代词“it”,“he”;冠词“a”,“an”,“the”;一些只由一个单词所构成的标识符。
进一步,步骤5)中所述词组拆分是指在词组拆分之间进行词组关系标注,词组是指代码中的元素是由几个单词组成的,对一些按照驼峰规则和有下划短线相连的组合词进行分词。
进一步,步骤5)中所述词干化是将每个单词转化为它的原型,然后利用WordNet进行同义关系分析。
进一步,步骤5)中所述系统词库包括以下内容:单词、词组、词性、成份、代码中的支持度、注释中的支持度、总的支持度、继承关系、词组关系、接口的实现关系、同义关系、缩略关系。
有益效果:本发明提出一种针对具体软件系统历史代码库的词库构建方法,可以直接观察到本系统从诞生到目前版本所有版本中使用的元素以及元素之间的关系。主要有以下一些优点:
(1)本发明提出的一个具体软件系统的词库(知识库)构建,有利于辅助推荐系统,推荐给用户在软件领域相关的一些单词或词组。
(2)本发明也有利于系统的新维护者和演化者更方便的对本系统所有过去版本做一个快速、高效的理解。
(3)本发明词库的构建有助于对WordNet进行一个扩充,扩充软件领域常用词或词组。
(4)本发明也有助于软件领域本体库的构建,可以做一个辅助的元素提取、元素关系构建推荐。
(5)与普通的词库相比,具体软件历史代码库的词库自动构建方法针对的是具体软件系统,是对代码库的一个精炼,不是简单的词库。所以针对具体的软件系统的演化或则维护,本方法能够快速的精炼出该软件系统的历史版本库的词库。
附图说明
图1是本发明的总体流程图。
图2是元素分类图。
图3是纯代码语料库中的词、词组关系库示例图。
图4是纯注释中的词、词组关系库示例图。
图5是词、词组关系库示例图。
图6是单词关系库示例图。
图7是本系统的完整系统词库示例图。
具体实施方式
下面结合附图对本发明的技术方案进行详细说明:
步骤1).提取出软件系统(本实例选用java语言开发的软件系统)的历史版本库中的代码和注释生成独立的文档语料库,并将该语料库分为纯代码文档库和纯注释文档库。
步骤2).对语料库中的纯代码文档进行预处理,包括托肯化、去停用词,提取元素(如图2包括标识符、类名、方法名、变量名),得到单词和词组以及它们在代码中的支持度(Code-TF)。另外,在托肯化的过程中,利用java中的“<子类名>+extends+<父类名>”的语法,基于中间单词“extends”分析出类与类之间的的继承关系(kind-of)。利用java中的“<类名>+implements+<接口>”的语法,基于中间单词“implements”分析出类与接口的关系(realize-of),得到W\WG-Code(纯代码语料库中的词、词组关系库)库。如图3,是从纯代码语料库中提取出元素构成的一个词库,包括词、词组、代码中的支持度、词组关系、继承关系、接口关系。
步骤3).对纯注释文档进行词性标注,然后进行预处理,包括托肯化、去停用词,提取出纯代码文档中的单词或词组以及它们在纯注释中的支持度(Comment-TF),利用注释匹配分析出缩略关系。得到W\WG-Comment(纯注释中的词、词组关系库)库。如图4,是从纯注释语料库中提取出元素构成的一个词库,包括词、词组、词性、注释中的支持度。
步骤4).将纯代码中和纯注释中提取出来的单词或词组合并在一起,得到W\WG(词、词组关系库)库。如图5,是将步骤2)和步骤3)得到的两个词库整合成的一个新的词库,包括词、词组、成份、词性、代码中的支持度、注释中的支持度。继续进行预处理,包括词词组拆分、词干化得到纯单词文档。再对得到的单词进行词性标注,分析出词组(word-group)关系,同义词(synonym-of)关系,缩略词(abbreviation-of)关系,得到Word(单词关系库)库。如图6,是经过组拆分后得到的词库,包括以上提取出的的所有单词以及它们之间存在的关系。
步骤5).整理出本系统的完整系统词库。系统词库包括以下内容:Word(单词)、WordGroup(词组)、词性(part of speech)、成份(element)、Code-TF(代码中的支持度)、Comment-TF(注释中的支持度)、TF(总的支持度)、kind-of(继承关系)、group-of(词组关系)、realize-of(接口的实现关系)、synonym-of(同义关系)、abbreviation-of(缩略关系)。如图7,是得到的最终的具体软件系统的词库,在确定词组关系之后已经将词组拆分,词库中不再包含词组只包含单词以及单词之间存在的关系。
Claims (10)
1.一种针对具体软件历史代码库的词库自动构建方法,其特征在于如下步骤:
步骤1)提取出软件系统主要为java语言开发的软件系统的历史版本库中的代码和注释生成独立的文档语料库,并将该语料库分为纯代码文档库和纯注释文档库;
步骤2)对语料库中的纯代码文档进行预处理,包括托肯化、去停用词,提取元素,得到单词和词组以及它们在代码中的支持度;在托肯化的过程中,利用java中的“<子类名>+extends+<父类名>”的语法,基于中间单词“extends”分析出类与类之间的的继承关系,利用java中的“<类名>+implements+<接口>”的语法,基于中间单词“implements”分析出类与接口的关系,得到纯代码语料库中的词、词组关系库;
步骤3)对纯注释文档进行词性标注,然后进行预处理,包括托肯化、去停用词,提取出纯代码文档中的单词或词组以及它们在纯注释中的支持度,利用注释匹配分析出缩略关系,得到纯注释中的词、词组关系库;
步骤4)将纯代码语料库中词、词组关系库与纯注释语料库中词、词组关系库进行整合,去除相同或多余的单词和词组,得到整合后的词、词组关系库;
步骤5)先将步骤4)生成的词、词组关系库中的词组关系提取出来,得到词组关系库;其次对词、词组关系进行拆分、词干化得到纯单词文档;再对得到的单词进行词性标注,分析出词组关系、同义关系、缩略关系、得到单词关系库;最后将词组关系库和单词关系库整理出本系统的完整系统词库。
2.根据权利要求1所述的针对具体软件历史代码库的词库自动构建方法,其特征在于,步骤1)所述的提取是指分别提取纯代码、纯注释文档:利用注释标识符,包括“/*........*/”、“//”、“/**.....*/”,提取出代码中的注释块,生成独立的纯代码语料库和纯注释语料库。
3.根据权利要求1所述的针对具体软件历史代码库的词库自动构建方法,其特征在于,步骤2)所述元素包括标识符、类名、方法名、变量名。
4.根据权利要求1所述的针对具体软件历史代码库的词库自动构建方法,其特征在于,步骤2)中所述的托肯化是指去除标点符号,比如“”,“?”;去除数字,比如“1”,“23”;提取出单词和词组,并且记录单词和词组的支持度,支持度就是在代码和注释中单词或词组出现的次数;标识单词或词组的成份,成份是指该单词是类名、方法名or变量名;继承关系分析“<子类名>+extends+<父类名>”,类与接口关系分析“<类名>+implements+<接口>”等。
5.根据权利要求1所述的针对具体软件历史代码库的词库自动构建方法,其特征在于,步骤2)中所述的去停用词是指指去除英文停用词。
6.根据权利要求1所述的针对具体软件历史代码库的词库自动构建方法,其特征在于,步骤3)中所述的是对注释语句块进行词性标注、托肯化、去停用词等处理,提取出单词或词组记录相应的注释中的支持度,利用注释匹配提取单词的缩略关系。
7.根据权利要求1所述的针对具体软件历史代码库的词库自动构建方法,其特征在于,步骤3)中所述的去除停用词是指去除英文停用词。
8.根据权利要求1所述的针对具体软件历史代码库的词库自动构建方法,其特征在于,步骤5)中所述词组拆分是指在词组拆分之间进行词组关系标注,词组是指代码中的元素是由几个单词组成的,对一些按照驼峰规则和有下划短线相连的组合词进行分词。
9.根据根据权利要求1所述的针对具体软件历史代码库的词库自动构建方法,其特征在于,步骤5)中所述词干化是将每个单词转化为它的原型,然后利用WordNet进行同义关系分析。
10.根据根据权利要求1所述的针对具体软件历史代码库的词库自动构建方法,其特征在于,步骤5)中所述系统词库包括以下内容:单词、词组、词性、成份、代码中的支持度、注释中的支持度、总的支持度、继承关系、词组关系、接口的实现关系、同义关系、缩略关系。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510345253.7A CN104991909B (zh) | 2015-06-19 | 2015-06-19 | 一种针对具体软件历史代码库的词库自动构建方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510345253.7A CN104991909B (zh) | 2015-06-19 | 2015-06-19 | 一种针对具体软件历史代码库的词库自动构建方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104991909A true CN104991909A (zh) | 2015-10-21 |
CN104991909B CN104991909B (zh) | 2018-02-27 |
Family
ID=54303725
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510345253.7A Active CN104991909B (zh) | 2015-06-19 | 2015-06-19 | 一种针对具体软件历史代码库的词库自动构建方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104991909B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106227509A (zh) * | 2016-06-30 | 2016-12-14 | 扬州大学 | 一种面向Java代码的类使用示例生成方法 |
CN109271392A (zh) * | 2018-10-30 | 2019-01-25 | 长威信息科技发展股份有限公司 | 快速判别和抽取关系型数据库实体及属性的方法及设备 |
CN110308931A (zh) * | 2019-06-20 | 2019-10-08 | 平安科技(深圳)有限公司 | 一种数据处理方法及相关装置 |
CN111159045A (zh) * | 2019-12-31 | 2020-05-15 | 中国银行股份有限公司 | 一种兼容性问题检测方法、装置及存储介质 |
WO2020228183A1 (zh) * | 2019-05-13 | 2020-11-19 | 平安科技(深圳)有限公司 | 代码处理方法、装置、计算机设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030067481A1 (en) * | 2001-03-31 | 2003-04-10 | Christopher Chedgey | System and method for computer-aided graph-based dependency analysis with integrated documentation |
CN102193859A (zh) * | 2010-03-03 | 2011-09-21 | 腾讯科技(深圳)有限公司 | 一种代码分析方法及系统 |
-
2015
- 2015-06-19 CN CN201510345253.7A patent/CN104991909B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030067481A1 (en) * | 2001-03-31 | 2003-04-10 | Christopher Chedgey | System and method for computer-aided graph-based dependency analysis with integrated documentation |
CN102193859A (zh) * | 2010-03-03 | 2011-09-21 | 腾讯科技(深圳)有限公司 | 一种代码分析方法及系统 |
Non-Patent Citations (1)
Title |
---|
孙伟松 等: "软件历史代码库词库自动构建技术及实现", 《中国科学技术大学学报》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106227509A (zh) * | 2016-06-30 | 2016-12-14 | 扬州大学 | 一种面向Java代码的类使用示例生成方法 |
CN106227509B (zh) * | 2016-06-30 | 2019-03-19 | 扬州大学 | 一种面向Java代码的类使用示例生成方法 |
CN109271392A (zh) * | 2018-10-30 | 2019-01-25 | 长威信息科技发展股份有限公司 | 快速判别和抽取关系型数据库实体及属性的方法及设备 |
WO2020228183A1 (zh) * | 2019-05-13 | 2020-11-19 | 平安科技(深圳)有限公司 | 代码处理方法、装置、计算机设备和存储介质 |
CN110308931A (zh) * | 2019-06-20 | 2019-10-08 | 平安科技(深圳)有限公司 | 一种数据处理方法及相关装置 |
CN110308931B (zh) * | 2019-06-20 | 2024-06-07 | 平安科技(深圳)有限公司 | 一种数据处理方法及相关装置 |
CN111159045A (zh) * | 2019-12-31 | 2020-05-15 | 中国银行股份有限公司 | 一种兼容性问题检测方法、装置及存储介质 |
CN111159045B (zh) * | 2019-12-31 | 2024-04-19 | 中国银行股份有限公司 | 一种兼容性问题检测方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104991909B (zh) | 2018-02-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107797991B (zh) | 一种基于依存句法树的知识图谱扩充方法及系统 | |
Riza et al. | Introduction of the asian language treebank | |
CN104991909A (zh) | 一种针对具体软件历史代码库的词库自动构建方法 | |
KR102491172B1 (ko) | 자연어 질의응답 시스템 및 그 학습 방법 | |
Garg et al. | Rule based Hindi part of speech tagger | |
CN102681983A (zh) | 一种文本数据的对齐方法和装置 | |
Bond et al. | The combined wordnet bahasa | |
CN105630770A (zh) | 一种基于sc文法的分词标音连写方法及装置 | |
Vidra et al. | DeriNet 2.0: towards an all-in-one word-formation resource | |
CN106202039B (zh) | 基于条件随机场的越南语组合词消歧方法 | |
CN111966792A (zh) | 一种文本处理方法、装置、电子设备及可读存储介质 | |
Parameswarappa et al. | Kannada word sense disambiguation using decision list | |
Azpeitia et al. | Nerc-fr: supervised named entity recognition for french | |
CN103927179A (zh) | 一种基于WordNet的程序可读性分析方法 | |
Hu et al. | BIM oriented intelligent data mining and representation | |
CN103927176A (zh) | 一种基于层次主题模型的程序特征树的生成方法 | |
Sarkar | Part-of-speech tagging for code-mixed indian social media text at icon 2015 | |
Wang et al. | Semi-supervised chinese open entity relation extraction | |
Anju et al. | Malayalam to English machine translation: An EBMT system | |
Ezhilarasi et al. | Designing the neural model for POS tag classification and prediction of words from ancient stone inscription script | |
CN104281695A (zh) | 基于组合理论的类自然语言的语义信息抽取方法及其系统 | |
Shrawankar et al. | Construction of news headline from detailed news article | |
Jaafar et al. | Benchmark of Arabic morphological analyzers challenges and solutions | |
Moran et al. | Lemon-aid: using lemon to aid quantitative historical linguistic analysis | |
Mongiovì et al. | Semantic reconciliation of knowledge extracted from text through a novel machine reader |
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 |