CN109669942A - 一种java代码结构化检索方法 - Google Patents
一种java代码结构化检索方法 Download PDFInfo
- Publication number
- CN109669942A CN109669942A CN201811447656.2A CN201811447656A CN109669942A CN 109669942 A CN109669942 A CN 109669942A CN 201811447656 A CN201811447656 A CN 201811447656A CN 109669942 A CN109669942 A CN 109669942A
- Authority
- CN
- China
- Prior art keywords
- match
- methodname
- classname
- content
- search method
- 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
- 238000000034 method Methods 0.000 title claims abstract description 36
- 239000000203 mixture Substances 0.000 description 2
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种java代码结构化检索方法,包括以下步骤:步骤S01:对程序代码做结构化分析,整理出对应的若干className、methodName及methodBody,将结果保存为索引集合;步骤S02:输入需要寻找的文件的className及methodName中至少一项的部分或全部内容以及methodBody的部分或全部内容,对索引集合中对应内容进行结构化匹配,如匹配失败则进入步骤S03,如匹配成功则跳转至步骤S04;步骤S03:显示错误信息并重新跳转至步骤S02;步骤S04:显示结果报告并弹出包括检索内容的对应文件。本发明以结构化的形式建立数据库,并通过结构化的匹配完成检索,具有更快的检索速度,更高检索精度以及检索效率。
Description
技术领域
本发明涉及一种检索方法,特别涉及一种java代码结构化检索方法。
背景技术
代码检索作为再开发中代码复用的必要环节变得越来越重要。代码检索是在指定的代码库中搜索某代码片段。有效的代码检索能够很大程度上节约研发人员的研发时间,有效提高工作效率。然而随着开源项目数量的与日俱增,代码片段数量呈指数级增长,为研发人员获取相关代码片段带来巨大困难,如何快速高效地查询指定代码片段,得到了信息检索相关研究人员的广泛关注。代码检索任务与通用领域信息检索任务的区别主要体现在检索对象的不同,代码检索所涉及的对象是代码片段,而代码片段许多独有的特点,直接将现有检索技术应用于代码检索并不能得到很好的效果,如果能利用代码自身的特点来优化检索方法,将会大大提高检索效率。
公开号 CN102254026A的发明申请提供了一种程序函数的检索方法。该方法包括以下步骤:确定检索范围;输入目标程序函数的名称,并触发检索事件,则显示所述检索范围内包含目标程序函数的所有文件的绝对路径;选择要查看的包含目标程序函数的文件的绝对路径,则显示该文件的全部内容及其文件信息;触发查看目标程序函数事件,则在所述文件内容中突出显示目标程序函数的程序代码。
该对比文件所提到的检索方法其本质上还是传统的检索形式,初步检索的范围过大,无法快速、精确地检索到目标代码,检索效率较低。
发明内容
针对现有技术检索范围过大,检索效率低的问题,本发明提供了一种java代码结构化检索方法,以结构化分析及结构化匹配的形式提高了检索精确度及效率。
以下是本发明的技术方案。
一种java代码结构化检索方法,包括以下步骤:
步骤S01:对程序代码做结构化分析,整理出对应的若干className、methodName及methodBody,将结果保存为索引集合;
步骤S02:输入需要寻找的文件的className及methodName中至少一项的部分或全部内容以及methodBody的部分或全部内容,对索引集合中对应内容进行结构化匹配,如匹配失败则进入步骤S03,如匹配成功则跳转至步骤S04;
步骤S03:显示错误信息并重新跳转至步骤S02;
步骤S04:显示结果报告并弹出包括检索内容的对应文件。
进一步的,所述步骤S01中,结构化分析的过程为:步骤A1:取源代码集合S的一个元素s,利用java反射技术分析元素s得到若干个className,以及每个className对应的若干个methodName,将每个methodName及其对应的className保存为元素m,若干元素m组成集合M;
步骤A2:从集合M中取出一个元素m,与源代码集合S中对应元素s进行多次匹配,将每次结果标记为mb,汇总结果保存到索引集合MB,所述每个元素mb包括一组className、methodName及methodBody;
步骤A3:重复执行步骤A1及A2,直到源代码集合S中所有元素均完成分析及匹配。
进一步的,所述步骤A2中,匹配过程为:在代码元素s中找到元素m中methodName对应的字符串,将该字符串之后的第一个“{”标记为methodBodyBegin,再将最后一个“}”标记为methodBodyEnd,然后根据methodBodyBegin及methodBodyEnd对源代码文件进行子字符串截取,得到mb。
进一步的,所述最后一个“}”的寻找方法为:创建一个初始值为零的变量i,然后在第一个“{”后依次向下寻找,每寻找到一个“{”便使变量i加一,每寻找到一个“}”便使变量i减一,当变量i的值为零时,寻找到的“}”就是最后一个“}”。
进一步的,所述步骤S02中,结构化匹配过程为:根据输入内容对索引集合中元素的className及methodName进行匹配,筛选出包含对应内容的元素,对包含对应内容的元素的methodBody进行匹配,寻找到具体结果所在的位置,其中该过程任意一次匹配没有成功则认定为匹配失败。
进一步的,所述步骤S03中,错误信息包括:匹配失败时所在的匹配类型。
进一步的,所述步骤S04中,结果报告包括:匹配所用时间及目标文件的目录。
本发明以结构化的形式建立数据库,并通过结构化的匹配完成检索,具有更快的检索速度,更高检索精度以及检索效率。
附图说明
如图1所示为本发明的整体流程图。
具体实施方式
以下结合说明书附图对本技术方案作进一步阐述。
实施例:如图1所示为一种java代码结构化检索方法,包括以下步骤:
步骤S01:对程序代码做结构化分析,整理出对应的若干className、methodName及methodBody,将结果保存为索引集合;
步骤S02:输入需要寻找的文件的className及methodName中至少一项的部分或全部内容以及methodBody的部分或全部内容,对索引集合中对应内容进行结构化匹配,如匹配失败则进入步骤S03,如匹配成功则跳转至步骤S04;
步骤S03:显示错误信息并重新跳转至步骤S02;
步骤S04:显示结果报告并弹出包括检索内容的对应文件。
本实施例中,所述步骤S01中,结构化分析的过程为:步骤A1:取源代码集合S的一个元素s,利用java反射技术分析元素s得到若干个className,以及每个className对应的若干个methodName,将每个methodName及其对应的className保存为元素m,若干元素m组成集合M;
步骤A2:从集合M中取出一个元素m,与源代码集合S中对应元素s进行多次匹配,将每次结果标记为mb,汇总结果保存到索引集合MB,所述每个元素mb包括一组className、methodName及methodBody;
步骤A3:重复执行步骤A1及A2,直到源代码集合S中所有元素均完成分析及匹配。
本实施例中,所述步骤A2中,匹配过程为:在代码元素s中找到元素m中methodName对应的字符串,将该字符串之后的第一个“{”标记为methodBodyBegin,再将最后一个“}”标记为methodBodyEnd,然后根据methodBodyBegin及methodBodyEnd对源代码文件进行子字符串截取,得到mb。
本实施例中,所述最后一个“}”的寻找方法为:创建一个初始值为零的变量i,然后在第一个“{”后依次向下寻找,每寻找到一个“{”便使变量i加一,每寻找到一个“}”便使变量i减一,当变量i的值为零时,寻找到的“}”就是最后一个“}”。
本实施例中,所述步骤S02中,结构化匹配过程为:根据输入内容对索引集合中元素的className及methodName进行匹配,筛选出包含对应内容的元素,对包含对应内容的元素的methodBody进行匹配,寻找到具体结果所在的位置,其中该过程任意一次匹配没有成功则认定为匹配失败。
本实施例中,所述步骤S03中,错误信息包括:匹配失败时所在的匹配类型。
本实施例中,所述步骤S04中,结果报告包括:匹配所用时间及目标文件的目录。
本实施例以结构化的形式建立数据库,并通过结构化的匹配完成检索,具有更快的检索速度,更高检索精度以及检索效率。
应当说明的是,该具体实施例仅用于对技术方案的进一步阐述,不用于限定该技术方案的范围,任何基于此技术方案的修改、等同替换和改进等都应视为在本发明的保护范围内。
Claims (7)
1.一种java代码结构化检索方法,其特征在于,包括以下步骤:
步骤S01:对程序代码做结构化分析,整理出对应的若干className、methodName及methodBody,将结果保存为索引集合;
步骤S02:输入需要寻找的文件的className及methodName中至少一项的部分或全部内容以及methodBody的部分或全部内容,对索引集合中对应内容进行结构化匹配,如匹配失败则进入步骤S03,如匹配成功则跳转至步骤S04;
步骤S03:显示错误信息并重新跳转至步骤S02;
步骤S04:显示结果报告并弹出包括检索内容的对应文件。
2.根据权利要求1所述的一种java代码结构化检索方法,其特征在于,所述步骤S01中,结构化分析的过程为:
步骤A1:取源代码集合S的一个元素s,利用java反射技术分析元素s得到若干个className,以及每个className对应的若干个methodName,将每个methodName及其对应的className保存为元素m,若干元素m组成集合M;
步骤A2:从集合M中取出一个元素m,与源代码集合S中对应元素s进行多次匹配,将每次结果标记为mb,汇总结果保存到索引集合MB,所述每个元素mb包括一组className、methodName及methodBody;
步骤A3:重复执行步骤A1及A2,直到源代码集合S中所有元素均完成分析及匹配。
3.根据权利要求2所述的一种java代码结构化检索方法,其特征在于,所述步骤A2中,匹配过程为:
在代码元素s中找到元素m中methodName对应的字符串,将该字符串之后的第一个“{”标记为methodBodyBegin,再将最后一个“}”标记为methodBodyEnd,然后根据methodBodyBegin及methodBodyEnd对源代码文件进行子字符串截取,得到mb。
4.根据权利要求3所述的一种java代码结构化检索方法,其特征在于,所述最后一个“}”的寻找方法为:创建一个初始值为零的变量i,然后在第一个“{”后依次向下寻找,每寻找到一个“{”便使变量i加一,每寻找到一个“}”便使变量i减一,当变量i的值为零时,寻找到的“}”就是最后一个“}”。
5.根据权利要求1所述的一种java代码结构化检索方法,其特征在于,所述步骤S02中,结构化匹配过程为:根据输入内容对索引集合中元素的className及methodName进行匹配,筛选出包含对应内容的元素,对包含对应内容的元素的methodBody进行匹配,寻找到具体结果所在的位置,其中该过程任意一次匹配没有成功则认定为匹配失败。
6.根据权利要求5所述的一种java代码结构化检索方法,其特征在于,所述步骤S03中,错误信息包括:匹配失败时所在的匹配类型。
7.根据权利要求5所述的一种java代码结构化检索方法,其特征在于,所述步骤S04中,结果报告包括:匹配所用时间及目标文件的目录。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811447656.2A CN109669942A (zh) | 2018-11-29 | 2018-11-29 | 一种java代码结构化检索方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811447656.2A CN109669942A (zh) | 2018-11-29 | 2018-11-29 | 一种java代码结构化检索方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109669942A true CN109669942A (zh) | 2019-04-23 |
Family
ID=66143456
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811447656.2A Pending CN109669942A (zh) | 2018-11-29 | 2018-11-29 | 一种java代码结构化检索方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109669942A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008117280A (ja) * | 2006-11-07 | 2008-05-22 | Matsushita Electric Ind Co Ltd | ソフトウェアソースコードの検索方法及びシステム |
US20120254835A1 (en) * | 2011-03-31 | 2012-10-04 | Infosys Technologies Ltd. | Structural search of source code |
CN107562919A (zh) * | 2017-09-13 | 2018-01-09 | 云南大学 | 一种基于信息检索的多索引集成软件构件检索方法及系统 |
-
2018
- 2018-11-29 CN CN201811447656.2A patent/CN109669942A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008117280A (ja) * | 2006-11-07 | 2008-05-22 | Matsushita Electric Ind Co Ltd | ソフトウェアソースコードの検索方法及びシステム |
US20120254835A1 (en) * | 2011-03-31 | 2012-10-04 | Infosys Technologies Ltd. | Structural search of source code |
CN107562919A (zh) * | 2017-09-13 | 2018-01-09 | 云南大学 | 一种基于信息检索的多索引集成软件构件检索方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111241241B (zh) | 基于知识图谱的案件检索方法、装置、设备及存储介质 | |
CA3033173C (en) | Systems, methods, and data structures for high-speed searching or filtering of large datasets | |
CN110019616B (zh) | 一种poi现势状态获取方法及其设备、存储介质、服务器 | |
US20130226940A1 (en) | Generating Composite Key Relationships Between Database Objects Based on Sampling | |
CN112925995B (zh) | 获取poi状态信息的方法及装置 | |
CN110851738A (zh) | 获取poi状态信息的方法、装置、设备和计算机存储介质 | |
CN107844414A (zh) | 一种基于缺陷报告分析的跨项目、并行化缺陷定位方法 | |
AU2002229734A1 (en) | Database system and query optimiser | |
CN107016018B (zh) | 数据库索引创建方法及装置 | |
CN105740477B (zh) | 针对大规模嵌入式设备固件的函数搜索方法和搜索引擎 | |
CN103559185B (zh) | 试验数据文档解析入库方法 | |
US11568018B2 (en) | Utilizing machine-learning models to generate identifier embeddings and determine digital connections between digital content items | |
EP3679473B1 (en) | A system and method for stream processing | |
CN110188165A (zh) | 合同模板获取方法、装置、存储介质和计算机设备 | |
CN110837568A (zh) | 实体对齐方法及装置、电子设备、存储介质 | |
CN105825356A (zh) | 一种生物样本数据信息管理方法和装置 | |
CN109753517A (zh) | 一种信息查询的方法、装置、计算机存储介质及终端 | |
Bagheri et al. | A comparison of different source code representation methods for vulnerability prediction in python | |
Lo Giudice Cappelli et al. | Size matters: Analyses of benthic foraminiferal assemblages across differing size fractions | |
US9984065B2 (en) | Optimizing generation of a regular expression | |
US9298694B2 (en) | Generating a regular expression for entity extraction | |
CN109669942A (zh) | 一种java代码结构化检索方法 | |
CN113138906A (zh) | 一种调用链数据采集方法、装置、设备及存储介质 | |
CN112016636A (zh) | 一种基于Hadoop框架的作物光谱聚类分析处理方法 | |
Lin et al. | K 2 and K 2*: efficient alignment-free sequence similarity measurement based on Kendall statistics |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190423 |
|
RJ01 | Rejection of invention patent application after publication |