CN102063488A - 一种基于语义的代码搜索方法 - Google Patents

一种基于语义的代码搜索方法 Download PDF

Info

Publication number
CN102063488A
CN102063488A CN2010106121016A CN201010612101A CN102063488A CN 102063488 A CN102063488 A CN 102063488A CN 2010106121016 A CN2010106121016 A CN 2010106121016A CN 201010612101 A CN201010612101 A CN 201010612101A CN 102063488 A CN102063488 A CN 102063488A
Authority
CN
China
Prior art keywords
code
module
search
data
user
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
Application number
CN2010106121016A
Other languages
English (en)
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.)
Nanjing University of Aeronautics and Astronautics
Original Assignee
Nanjing University of Aeronautics and Astronautics
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 Nanjing University of Aeronautics and Astronautics filed Critical Nanjing University of Aeronautics and Astronautics
Priority to CN2010106121016A priority Critical patent/CN102063488A/zh
Publication of CN102063488A publication Critical patent/CN102063488A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于语义的代码搜索方法,其采用的系统分为数据收集、分析、排序、用户交互四大模块;数据收集模块中的爬虫工具JoBo可以在配置文件中预先设定一些网站地址,再从预先设定的论坛和博客上抓取代码源,达到最快最有效的抓取网页;爬虫工具JoBo抓取到的代码源,采用开源工具JDT中的抽象语法树AST框架来进行语义分析;数据排序模块根据用户输入的关键字匹配,分析得到相应的搜索结果后,综合考虑五方面的因素,通过数据排序将搜索结果按照分值从高到底依次排列展现给用户。本发明在利用现有最好搜索引擎的基础上,对语义信息识别、排序做了相应的扩展,通过配置爬虫定义搜索范围,提高了搜索效率和查准精度并可以考虑用户喜好。

Description

一种基于语义的代码搜索方法
技术领域
本发明涉及一种代码搜索方法,尤其涉及一种基于语义的代码搜索方法。
背景技术
目前的代码搜索引擎例如Google code search、Koders主要是对网络中的一些开源项目的文件进行检索,忽略了大型blog或论坛中的代码片段,导致搜索的范围比较狭隘。它们主要采用全文索引技术对公开发布的代码文件进行索引,从而对所搜索的代码进行快速定位,但是他们没有对代码的结构化信息进行识别,不能精确的定位类名、方法名、变量等描述信息,使得搜索结果不够准确。
当前一些主流的搜索引擎存在以下缺陷:1、代码搜索范围小,仅对网络中一些开源项目的文件进行检索;2、搜索结果不准确,因为检索的方式是全文检索,无法利用代码的结构化信息(如类名、方法名、变量名)进行检索。因此现有搜索技术存在着仅依赖关键字、搜索范围局限等不足。
发明内容
为了解决上述问题中的不足之处,本发明提供了一种基于语义的代码搜索方法。
为解决以上技术问题,本发明采用的技术方案是:一种基于语义的代码搜索方法,方法的实现所采用的系统分为数据收集模块、数据分析模块、数据排序模块、用户交互模块;
数据收集模块中的爬虫工具JoBo可以在配置文件中预先设定一些网站地址,爬虫工具JoBo再从预先设定的论坛和博客上抓取代码源,达到最快最有效的抓取网页;
爬虫工具JoBo抓取到的代码源,采用开源工具JDT中的抽象语法树AST框架来进行语义分析;
数据排序模块可以根据用户输入的关键字匹配、分析得到相应的搜索结果后,综合考虑五方面的因素:关键字在代码中出现的次数、注释部分在代码中所占的比例、代码长度是否在上下界之内、是否提供了代码出处的链接、与用户喜好的匹配程度;每一因素的取值乘上相应的权重后求和得出代码的综合评分,通过数据排序将搜索结果按照分值从高到底依次排列展现给用户。
本发明一方面调用主流的代码搜索引擎获得排名靠前的搜索结果,另一方面利用网络爬虫从大型的blog或论坛中抓取代码片段,增加了代码的搜索量,使得搜索结果更加丰富;而对于网络爬虫爬出来的文件应用Java开发工具(JDT)中的抽象语法树(AST)进行解析,给代码标注上了类名、方法名、变量等语义信息,使得用户可以针对这些描述信息进行搜索,提高了搜索结果的查准率;对于最后展现出来的搜索结果用户可以进行投票、添加标签等操作,这将有利于搜索结果排序的优化。
本发明利用了现有最好的Google code、Koders等搜索引擎,并在此基础上做了相应的扩展,如语义信息识别、排序等;通过配置爬虫定义搜索范围,由此提高搜索的效率和查准的精度;考虑用户喜好,依照代码质量若干因素的综合评分对搜索结果进行排序。
附图说明
下面结合附图和具体实施方式对本发明作进一步详细的说明。
图1为本发明的系统结构示意图。
图2为SearchCall类图。
图3为DataAnalysis类图。
图4为ResultItem类图。
图5为JoBo网页爬虫搜索流程图。
ICS:ICodeSearch,代码搜索引擎软件。
JoBo:爬虫程序的一种。
JDT Java:开发工具(Java development tools),用于解析java文件的结构。
Ontology:本体,是共享概念模型的形式化规范说明
具体实施方式
本发明所采用的系统分为四大模块:数据收集模块(Data Collection)、数据分析模块(Data Analysis)、数据排序模块(Data Sort)、用户交互模块(User Interact ion)。
下面分别阐述每一模块的实现方案:
1、数据收集模块
ICS数据源的获取有两个途径:一是调用目前市场主流的代码搜索引擎Google Code Search和Koders,根据用户输入的关键字获取前10页的搜索结果(为了提高搜索效率,在对查准率影响不大的前提下系统截取前十页作为搜索结果);二是利用爬虫工具JoBo,在配置文件中预先设定一些网站地址,例如CSDN、CVS知识库、Subversion知识库等,在系统空闲的时刻爬虫会自动搜寻该网站下的代码源上传至服务器。
搜索调用(SearchCall)部分就是实现了调用主流的搜索引擎获得相应的搜索结果。调用原理是采用java.net.HttpURLConnection对象,根据GoogleCode Search和Koders的搜索链接,获取相应的响应内容(xml格式的数据)。图2是该功能实现的类图:其中两个方法:getResultOfGoogle和getResut1OfKoders分别用于获取两个代码搜索引擎的搜索结果。
爬虫(Crawler)部分是利用爬虫工具JoBo从预先设定的论坛和博客上抓取代码源,Jobo是一个基于Java的开源的爬虫工具,它采用IP搜索策略和深度优先搜索策略进行搜索,以达到最快最有效的抓取网页的效果。
2、数据分析模块
在数据收集模块获取到数据源之后,需要对形式各样、结构不一的数据进行再次处理,统一成同一结构的数据,方便后期的用户查询,这一功能是通过数据分析模块实现的。因为数据源来自两个途径,所以分析过程也分为两个部分,一是对外部搜索引擎搜索结果的分析;二是对爬虫抓取的代码源的分析。
调用外部引擎返回的结果为xml文本文件,我们采用开源工具htmlparser在xml文件中提取系统需要的信息。类org.htmlparser.NodeFilter利用xml中的tag标签,进行文本内容划分,类org.htmlparser.NodeList储存划分后提取到的信息,划分的过程可以进行多次,直至找到满足需要的信息。图3为该功能实现的类图:其中两个方法:getResultItemOfGoogle和getResutlItemOfKoders分别用于对Google、Koders两个代码搜索引擎的搜索结果进行分析,返回我们自定义的ResultItem结构的数据列表。
ResultItem的类图如图4所示,包含文件名称(fileName)、文件链接(fileLink)、预览区域的文本内容(codePreview)、预览文本的链接(codePreviewLink)、代码源的文本内容(codeSource)、代码源的链接(codeSourceLink)、代码源的主域名(codeSourcePage)、代码协议(codeLicense)、代码协议的链接(codeLicenseLink)、代码语言(codeLanguage)等信息。
而对于爬虫工具JoBo抓取到的代码源,我们采用开源工具JDT(JavaDevelopment Tools)中的抽象语法树AST(Abstract Syntax Tree)框架来进行语义分析。AST理解语言元素之间的关系。它可以识别象局部变量、实例变量、表达式以及if语句等六十多种不同的语言元素。我们通过AST可以获取到每一个Java文件中的import列表、方法列表、变量列表、包名、类名、注释信息等等。这些信息都以entity对象的形式存入到数据库中。
3、数据排序模块
根据用户输入的关键字匹配、分析得到相应的搜索结果后,需要以怎么的顺序排列呈现给用户?这部分功能通过数据排序(DataSort)实现,数据排序综合考虑五方面的因素:关键字在代码中出现的次数、注释部分在代码中所占的比例、代码长度是否在上、下界之内、是否提供了代码出处的链接、与用户喜好的匹配程度。每一因素的取值乘上相应的权重后求和就是代码的综合评分,我们将搜索结果按照分值从高到底依次排列展现给用户。
4、用户交互模块
用户交互模块我们提供了注册、登陆、上传代码范例、投票、打标签等功能。
一、Eclipse JDT(Java Development Tools)相关技术介绍
Eclipse平台本身是构建工具和应用程序的基础。插入到平台中的插件提供了特殊的能力,使它适合于开发特定类型的应用程序。这一部分是一个真实工具的案例,Java开发工具(JDT),它向平台添加了Java程序开发的能力。JDT包含在Eclipse SDK中。JDT向Eclipse平台添加了Java IDE的能力。
JDT作为Eclipse的Java开发工具,提供了解析Java源文件,编译为中间代码的AST(Abstract Syntax Tree)的结构,可以在更高层次上修改代码,比如Eclipse中的Refactor就可以高度智能话的修改代码。JDT实际上是将Java代码构建成一个基于DOM结构的抽象语法树AST(Abstract Syntax Tree)。代码中的每个部分都对应一个节点ASTNode,许多的ASTNode就构成了这个抽象的语法树。Java Class一般对应Compilation Unit node,该节点也是AST树上的顶点。我们也可以使用AST动态生成代码或修改代码。
主要过程入下:
(a)得到java源文件或是他对应的compilationUint(CU),然后由AST.setSource()设定,再由AST.create()创建一个AST树,返回根节点,ASTNode.
(b)使用ASTRewrite修改源文件,将结果保存在TextEditor对象中
(c)使用apply()方法实现这些修改。
二、JoBo爬虫技术简介
本发明所采用的技术手段是利用JoBo爬虫。JoBo爬虫是一个用于下载整个Web站点的简单工具。它本质是一个Web Spider。与其它下载工具相比较它的主要优势是能够自动填充form(如:自动登录)和使用cookies来处理session。JoBo还有灵活的下载规则(如:通过网页的URL,大小,MIME类型等)来限制下载。由于JoBo爬虫程序简单、轻量级且易于集成等特征,我们的搜索引擎采用它作为代码搜索的爬虫程序,它是以java实现的。
JoBo网页爬虫采用的搜索策略为IP搜索策略加上深度优先搜索策略的结合策略。具体流程如图5所示。

Claims (1)

1.一种基于语义的代码搜索方法,其特征在于:方法的实现所采用的系统分为数据收集模块、数据分析模块、数据排序模块、用户交互模块;
所述数据收集模块中的爬虫工具JoBo可以在配置文件中预先设定一些网站地址,爬虫工具JoBo再从预先设定的论坛和博客上抓取代码源,达到最快最有效的抓取网页;
所述爬虫工具JoBo抓取到的代码源,采用开源工具JDT中的抽象语法树AST框架来进行语义分析;
所述数据排序模块可以根据用户输入的关键字匹配、分析得到相应的搜索结果后,综合考虑五方面的因素:关键字在代码中出现的次数、注释部分在代码中所占的比例、代码长度是否在上下界之内、是否提供了代码出处的链接、与用户喜好的匹配程度;每一因素的取值乘上相应的权重后求和得出代码的综合评分,通过数据排序将搜索结果按照分值从高到底依次排列展现给用户。
CN2010106121016A 2010-12-29 2010-12-29 一种基于语义的代码搜索方法 Pending CN102063488A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010106121016A CN102063488A (zh) 2010-12-29 2010-12-29 一种基于语义的代码搜索方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010106121016A CN102063488A (zh) 2010-12-29 2010-12-29 一种基于语义的代码搜索方法

Publications (1)

Publication Number Publication Date
CN102063488A true CN102063488A (zh) 2011-05-18

Family

ID=43998763

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010106121016A Pending CN102063488A (zh) 2010-12-29 2010-12-29 一种基于语义的代码搜索方法

Country Status (1)

Country Link
CN (1) CN102063488A (zh)

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102760151A (zh) * 2012-04-05 2012-10-31 中国人民解放军国防科学技术大学 开源软件获取与搜索系统的实现方法
CN102760058A (zh) * 2012-04-05 2012-10-31 中国人民解放军国防科学技术大学 面向大规模协作开发的海量软件项目共享方法
WO2013117147A1 (zh) * 2012-02-09 2013-08-15 腾讯科技(深圳)有限公司 微博排序、搜索、展示方法和系统
CN103389974A (zh) * 2012-05-07 2013-11-13 腾讯科技(深圳)有限公司 进行信息搜索的方法及服务器
GB2506162A (en) * 2012-09-24 2014-03-26 Ibm Searching source code
CN105335402A (zh) * 2014-07-23 2016-02-17 阿里巴巴集团控股有限公司 基于静态Cache的搜索方法、索引数据生成方法以及装置
CN106294786A (zh) * 2016-08-12 2017-01-04 北京创新乐知信息技术有限公司 一种代码搜索方法和系统
CN106294785A (zh) * 2016-08-12 2017-01-04 北京创新乐知信息技术有限公司 内容筛选方法以及系统
CN103823855B (zh) * 2014-02-19 2017-01-18 天津大学 面向语义网的中文百科知识组织与集成方法
KR101727015B1 (ko) * 2016-05-09 2017-04-14 (주)투비소프트 오픈 소스 기반 소스코드 매칭방법 및 장치
CN106681708A (zh) * 2016-11-16 2017-05-17 中国科学院软件研究所 一种基于数据挖掘的源代码注释自动生成方法
CN106991144A (zh) * 2017-03-22 2017-07-28 山东大学 一种定制数据爬取工作流的方法及系统
CN107491534A (zh) * 2017-08-22 2017-12-19 北京百度网讯科技有限公司 信息处理方法和装置
CN110008344A (zh) * 2019-04-16 2019-07-12 中森云链(成都)科技有限责任公司 一种自动给代码打数据结构标签的方法
CN110308931A (zh) * 2019-06-20 2019-10-08 平安科技(深圳)有限公司 一种数据处理方法及相关装置
CN111177312A (zh) * 2019-12-10 2020-05-19 同济大学 一种语法和语义融合的开源代码搜索方法
CN111638901A (zh) * 2020-05-11 2020-09-08 紫光云技术有限公司 一种针对云产品bug自动定位的处理装置及方法
CN112416431A (zh) * 2020-11-23 2021-02-26 南京航空航天大学 一种基于编码序列表示的源代码片段成对比较方法
CN113761163A (zh) * 2021-08-18 2021-12-07 浙江大学 基于代码结构语义信息的深度代码搜索方法、系统及装置
US11481212B2 (en) 2020-09-11 2022-10-25 International Business Machines Corporation Automatic identification of reference data
US11720346B2 (en) 2020-10-02 2023-08-08 International Business Machines Corporation Semantic code retrieval using graph matching

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
刘石: "基于语法与语义分析的代码搜索结果优化", 《计算机科学》 *
牛家浩: "基于抽象语法树的软件度量工具的设计与实现", 《计算机应用》 *

Cited By (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013117147A1 (zh) * 2012-02-09 2013-08-15 腾讯科技(深圳)有限公司 微博排序、搜索、展示方法和系统
US9785677B2 (en) 2012-02-09 2017-10-10 Tencent Technology (Shenzhen) Company Limited Method and system for sorting, searching and presenting micro-blogs
CN102760151B (zh) * 2012-04-05 2015-02-25 中国人民解放军国防科学技术大学 开源软件获取与搜索系统的实现方法
CN102760058A (zh) * 2012-04-05 2012-10-31 中国人民解放军国防科学技术大学 面向大规模协作开发的海量软件项目共享方法
CN102760151A (zh) * 2012-04-05 2012-10-31 中国人民解放军国防科学技术大学 开源软件获取与搜索系统的实现方法
CN102760058B (zh) * 2012-04-05 2015-03-11 中国人民解放军国防科学技术大学 面向大规模协作开发的海量软件项目共享方法
CN103389974A (zh) * 2012-05-07 2013-11-13 腾讯科技(深圳)有限公司 进行信息搜索的方法及服务器
CN103389974B (zh) * 2012-05-07 2017-12-08 深圳市世纪光速信息技术有限公司 进行信息搜索的方法及服务器
US9454613B2 (en) 2012-05-07 2016-09-27 Tencent Technology (Shenzhen) Company Limited Method and server for searching information
WO2013166916A1 (zh) * 2012-05-07 2013-11-14 深圳市世纪光速信息技术有限公司 进行信息搜索的方法及服务器
GB2506162A (en) * 2012-09-24 2014-03-26 Ibm Searching source code
US9268558B2 (en) 2012-09-24 2016-02-23 International Business Machines Corporation Searching source code
CN103823855B (zh) * 2014-02-19 2017-01-18 天津大学 面向语义网的中文百科知识组织与集成方法
CN105335402A (zh) * 2014-07-23 2016-02-17 阿里巴巴集团控股有限公司 基于静态Cache的搜索方法、索引数据生成方法以及装置
CN105335402B (zh) * 2014-07-23 2018-12-04 阿里巴巴集团控股有限公司 基于静态Cache的搜索方法、索引数据生成方法以及装置
KR101727015B1 (ko) * 2016-05-09 2017-04-14 (주)투비소프트 오픈 소스 기반 소스코드 매칭방법 및 장치
CN106294785A (zh) * 2016-08-12 2017-01-04 北京创新乐知信息技术有限公司 内容筛选方法以及系统
CN106294786A (zh) * 2016-08-12 2017-01-04 北京创新乐知信息技术有限公司 一种代码搜索方法和系统
CN106681708A (zh) * 2016-11-16 2017-05-17 中国科学院软件研究所 一种基于数据挖掘的源代码注释自动生成方法
CN106991144A (zh) * 2017-03-22 2017-07-28 山东大学 一种定制数据爬取工作流的方法及系统
CN106991144B (zh) * 2017-03-22 2021-01-29 山东大学 一种定制数据爬取工作流的方法及系统
CN107491534A (zh) * 2017-08-22 2017-12-19 北京百度网讯科技有限公司 信息处理方法和装置
CN110008344A (zh) * 2019-04-16 2019-07-12 中森云链(成都)科技有限责任公司 一种自动给代码打数据结构标签的方法
CN110008344B (zh) * 2019-04-16 2020-09-29 中森云链(成都)科技有限责任公司 一种自动给代码打数据结构标签的方法
CN110308931A (zh) * 2019-06-20 2019-10-08 平安科技(深圳)有限公司 一种数据处理方法及相关装置
CN110308931B (zh) * 2019-06-20 2024-06-07 平安科技(深圳)有限公司 一种数据处理方法及相关装置
CN111177312A (zh) * 2019-12-10 2020-05-19 同济大学 一种语法和语义融合的开源代码搜索方法
CN111638901A (zh) * 2020-05-11 2020-09-08 紫光云技术有限公司 一种针对云产品bug自动定位的处理装置及方法
US11481212B2 (en) 2020-09-11 2022-10-25 International Business Machines Corporation Automatic identification of reference data
US11720346B2 (en) 2020-10-02 2023-08-08 International Business Machines Corporation Semantic code retrieval using graph matching
CN112416431A (zh) * 2020-11-23 2021-02-26 南京航空航天大学 一种基于编码序列表示的源代码片段成对比较方法
CN113761163A (zh) * 2021-08-18 2021-12-07 浙江大学 基于代码结构语义信息的深度代码搜索方法、系统及装置
CN113761163B (zh) * 2021-08-18 2024-02-02 浙江大学 基于代码结构语义信息的深度代码搜索方法、系统及装置

Similar Documents

Publication Publication Date Title
CN102063488A (zh) 一种基于语义的代码搜索方法
US8972372B2 (en) Searching code by specifying its behavior
CN104951539B (zh) 互联网数据中心有害信息监测系统
Kumar et al. Keyword query based focused Web crawler
US9323834B2 (en) Semantic and contextual searching of knowledge repositories
CN107016102B (zh) 一种大数据网络爬虫分页配置方法
CN101231661A (zh) 对象级知识挖掘的方法和系统
CN101655862A (zh) 信息对象搜索的方法和装置
CN102360367A (zh) 一种xbrl数据搜索方法及搜索引擎
Poveda et al. Application of semantic search in Idea Management Systems
Sharma et al. A novel architecture for deep web crawler
CN114117242A (zh) 数据查询方法和装置、计算机设备、存储介质
CN104778232A (zh) 一种基于长查询的搜索结果的优化方法和装置
Meng et al. Data extraction from the web based on pre-defined schema
Dixit et al. Design of an ontology based adaptive crawler for hidden web
Furche et al. How the Minotaur turned into Ariadne: ontologies in Web data extraction
Chang et al. Supporting unified interface to wrapper generator in Integrated Information Retrieval
Saranya et al. A Study on Competent Crawling Algorithm (CCA) for Web Search to Enhance Efficiency of Information Retrieval
Alafif et al. Domain and range identifier module for semantic web search engines
TWI423053B (zh) Domain Interpretation Data Retrieval Method and Its System
Neeli et al. Automated data mining from web servers using perl script
Chen et al. SE4SC: A specific search engine for software components
Milenkovic et al. Enabling knowledge management in complex industrial processes using semantic web technology
de La Cruz-Caicedo et al. Semantic annotation of SOAP web services based on word sense disambiguation techniques
JP5559725B2 (ja) 複数の情報ブロックに区分されたウェブページを用いた情報検索サービス提供方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20110518

RJ01 Rejection of invention patent application after publication