CN106681708A - 一种基于数据挖掘的源代码注释自动生成方法 - Google Patents

一种基于数据挖掘的源代码注释自动生成方法 Download PDF

Info

Publication number
CN106681708A
CN106681708A CN201611022571.0A CN201611022571A CN106681708A CN 106681708 A CN106681708 A CN 106681708A CN 201611022571 A CN201611022571 A CN 201611022571A CN 106681708 A CN106681708 A CN 106681708A
Authority
CN
China
Prior art keywords
function
annotation
linux kernel
commit
log
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
CN201611022571.0A
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.)
Institute of Software of CAS
Original Assignee
Institute of Software of CAS
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 Institute of Software of CAS filed Critical Institute of Software of CAS
Priority to CN201611022571.0A priority Critical patent/CN106681708A/zh
Publication of CN106681708A publication Critical patent/CN106681708A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/33Querying
    • G06F16/335Filtering based on additional data, e.g. user or group profiles
    • 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/95Retrieval from the web
    • G06F16/951Indexing; Web crawling techniques
    • 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/95Retrieval from the web
    • G06F16/955Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/258Heading extraction; Automatic titling; Numbering

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Artificial Intelligence (AREA)
  • Library & Information Science (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明涉及一种基于数据挖掘的源代码注释自动生成方法。该方法首先从三种数据源中提取包含所需注释的文本;然后结合数据源各自的特性形成三种过滤规则剔除无关的噪声信息,并利用文本处理技术进行字符格式等预处理;最后概括形成描述函数注释关键特性的两种提取规则,依据两种提取规则结合三种数据源的特点,自动生成函数整体注释。本发明提取的注释能够丰富传统函数注释,提供多维度的信息且支持版本的更迭;该方法针对linux内核注释生成进行定制且实现简单,能够以相对较小的代价提供可读性好且相对较可靠的函数注释信息;有效填补了linux内核函数自动注释的空白,为学习和开发提供更丰富的参考信息,有效降低了开发的工作量和难度。

Description

一种基于数据挖掘的源代码注释自动生成方法
技术领域
本发明涉及函数注释自动生成技术,特别涉及文本处理技术和数据挖掘中信息采集领域的web数据爬取技术,提出了一种基于数据挖掘的源代码注释自动生成方法。
背景技术
注释是为了提高源码可读性而编写的对应源代码的自然语言文本描述,主要目的是为了辅助程序员进行代码理解,提高软件系统的可维护性。优秀的软件项目需要有高质量的代码和准确、全面的注释及文档。由于目前大部分开源项目软件周期短,例如Linux内核作为优秀的开源项目,其应用和影响都非常广泛,但其注释的覆盖程度远不能满足学习及初级开发人员的需求。同时目前大部分开源软件版本更新迅速,而且版本更新有越来越快的趋势,对应的注释不能随版本更迭及时更新。因此,开源软件的代码和注释之间存在注释覆盖低等数量方面的问题,同时也存在由于版本更新导致注释信息更新滞后而不准确、不完整等质量方面的问题。然而互联网上相关开源软件的开发和维护的公开信息庞大且繁杂、良莠不齐、难于区分,对于学习和开发辅助作用有限且资料的搜集和甄别工作量较大。
源代码注释一般由有经验的程序员手工编写,人工注释的困难促进了自动注释方法的研究。目前自动注释技术的研究多致力于利用源码语义自动生成自然语言注释,其多数针对面向对象语言,涉及语法分析、语义分析等十分复杂的技术,还有一些技术致力于构建复杂的模型,技术难度大,实现困难。
发明内容
针对上述问题,本发明的目的在于提供一种基于数据挖掘的源代码注释自动生成方法。通过这种方法可以快捷的自动生成Linux内核函数的整体注释,注释涉及函数功能、设计场景、使用方式、或针对不同版本的特性。所述方法填补了linux内核自动注释技术的空白,为Linux内核学习和开发人员提供更多的参考信息,有效降低初级开发人员的工作量和难度。
为了实现上述目的,本发明采用以下技术方案:
一种基于数据挖掘的源代码注释自动生成方法,包括以下步骤:
1)分别从三种数据源中爬取与Linux内核函数相关的描述信息,所述三种数据源为Stack Overflow网站、Linux kernel邮件和Linuxkernel Commit-log;
2)对步骤1)中得到的描述信息进行预处理,获取可能作为注释的文本,所述预处理包括文本格式处理及剔除无关Linux内核描述的噪声信息;
3)概括函数注释自然文本关键的特性作为提取规则,对步骤2)预处理后获取到的文本进行提取,自动生成函数整体注释。
进一步地,步骤1)中使用数据挖掘信息采集领域的web数据爬取技术分别从三种数据源中爬取与Linux内核函数相关的描述信息。web数据爬取指根据URL下载网页内容,针对不同网页的HTML结构特征,利用正则表达式或者其他的方式进行文本分析,提取所需的目标文本。
进一步地,步骤1)包括:从Stack Overflow网站获取编程人员对指定函数讨论的信息、从Linux kernel邮件获取内核开发人员的开发过程邮件信息、从Linux kernelCommit-log获取开发人员提交代码的Commit-log信息,将全部数据分类存储于数据库。
进一步地,从Stack Overflow网站获取编程人员对指定函数讨论的信息的具体步骤如下:
1-1-1)在Stack Overflow网站的搜索页面输入“Linux+目标函数名称”搜索,得到目标函数话题列表的URL,爬取此页的HTML文件内容;
1-1-2)对步骤1-1-1)爬取的HTML文件内容进行解析,获取该网页中多个问题的URL链接并爬取其子HTML文件内容;
1-1-3)对步骤1-1-2)爬取的多个问题的子HTML文件内容,提取出网页中的问题标题、问题标号、投票数、问题描述和答案分类存储于数据库中。
进一步地,按照时间段分隔的邮件服务器http://lkml.iu.edu/hypermail/linux/kernel进行邮件的爬取,从Linux kernel邮件获取内核开发人员的开发过程邮件信息,具体步骤如下:
1-2-1)选取某一时间段为目标,得到的该时间段邮件列表的URL,爬取此页的HTML文件;
1-2-2)对步骤1-2-1)爬取的HTML文件进行解析,获取该时间段内的所有邮件的URL链接并爬取其HTML文件;
1-2-3)对步骤1-2-2)爬取的所有邮件的HTML文件,提取出网页中邮件的标题和正文(即Body-of-Message标签中的内容)存储于数据库中。
进一步地,从Linux kernel Commit-log获取开发人员提交代码的Commit-log信息的具体步骤如下:
1-3-1)根据用户指定的起始版本获取第一个要爬取的show页面的URL;
1-3-2)爬取show页面的HTML文档,解析HTML文档获取commit log正文与标题存入数据库,并拼接next页面的URL;
1-3-3)在标题中查找终止版本的标识,如果找到则结束爬取,否则返回步骤1-3-2)继续next页面。
进一步地,步骤2)中所述文本格式处理包括:将从三种数据源中爬取的描述信息以空行为分隔符,将文本分成备选注释段落并去除HTML标签。
进一步地,步骤2)中分别针对三种数据源形成三种对应的过滤规则,从步骤1)中得到的描述信息中剔除无关Linux内核描述的噪声信息。
进一步地,针对Stack Overflow网站形成的过滤规则为:如果问题的投票小于1,删除问题及对应答案的所有段落;如果问题的投票大于1,删除对应答案中小于1的答案的所有段落;针对Linux kernel邮件形成的过滤规则为:以关键字"+"、"WARING"、"ERROR"、"#good"、"#bad"为条件剔除邮件中包含调用栈信息、告警、错误、补丁等的段落;针对Linuxkernel Commit-log形成的过滤规则为:对于Commit-log正文以关键字"==="、"Fix"、"Signed-off-by"为条件剔除commit-log特有的无关函数注释的内容。
进一步地,从步骤1)中得到的描述信息中剔除无关Linux内核描述的噪声信息包括:按照针对Stack Overflow网站形成的过滤规则,剔除从Stack Overflow网站爬取的描述信息中投票小于1的段落;按照针对Linux kernel邮件形成的过滤规则,剔除邮件特有的不适注释的段落;按照针对Linux kernel Commit-log形成的过滤规则剔除Commit-log特有的不适注释的段落。
进一步地,步骤3)中所述提取规则具体包括:
提取规则1:对函数进行注释说明的文字,通常包含如下关键字中的一个或几个:
"函数名字+()"、"function"、"methord"、"return"、"call"、"execute"、"invoke";
提取规则2:对于函数的描述性语言中包含如下关键字的句子,一般不能作为函数的注释性文本:
no,not,error,bug,difficult,difficulty,problem,problems,fix,shouldn’t,doesn’t,can’t,couldn’t,don’t,isn’t,aren’t,wouldn’t,fail,why,what,null,bad,wrong,missing,lack,probably,likely,perhaps,think,may,maybe,unfortunately,unluckily。
进一步地,步骤3)具体包括:
3-1)按提取规则1提取段落。
3-2)将提取得到的段落分成句子。
3-3)按提取规则2过滤句子,如有剩余,自动生成的函数注释。
本发明提出的新方法涉及从三种各具特色的数据源提取文本,自动生成Linux内核函数注释,同理也可扩展形成其他开源软件的注释自动生成方法。所述方法以三种不同特性的资源:Stack Overflow网站、Linux kernel邮件、Linux kernel Commit-log为数据源(下文简称三种资源)自动生成注释。其中,StackOverflow是知名的编程问题问答网站,从中获取的信息能够在函数功能、设计场景、使用方式等多维度对函数进行注释说明;Linux内核邮件数据量巨大,每天可以达到200至400封,并且能够提供可靠、权威的信息;Linux内核Commit-log以版本的更迭为组织方式,其信息具有版本特性。注释自动生成的方式采取在研究大量注释的基础上,总结函数注释一般规则进行提取。以这三种数据为源提取的注释能够丰富传统函数注释,提供多维度的信息且关注版本的更迭,能够以相对小的代价提供可读性好且相对可靠的函数注释信息。为学习和开发者提供更多的参考信息,提升学习和开发效率。所述方法不需要进行代价较高的源码分析、复杂的模型构建,即可快速实现函数注释的自动生成,并支持持续的linux内核版本的更新中增量注释的自动生成。
附图说明
图1是基于数据挖掘的的源代码注释自动生成方法的整体流程图。
图2是数据获取与存储的流程图。
图3是数据预处理的流程图。
图4是按规则生成注释的流程图。
具体实施方式
本发明的基于数据挖掘的的源代码注释自动生成方法,包括三部分。如图1所示,第一部分是数据获取与存储,第二部分是数据预处理,第三部分按规则生成注释。具体描述如下:
1)数据的获取与存储
对于三种资源的不同数据特征,为获取所需目标文本,需要根据各自的特性制定不同的爬取策略。
1a)问答网站Stack Overflow
Stack Overflow是针对编程问题的专业问答网站,用户可以在网站提交问题、浏览问题、搜索相关问答内容。问题的内容涉及广泛,常包括函数的用法、设计背景等多个方面。本方法以Linux内核函数为关键字进行搜索,可以得到关于函数的功能、设计场景、使用等不同方面的问题和答案。这些问题和答案将作为生成注释的原材料存入数据库中。具体步骤如下:
i.在Stack Overflow网站的搜索页面输入“Linux+目标函数名称”搜索,得到目标函数话题列表的URL,爬取此页的HTML文件内容;
ii.对i步骤获取的HTML页面进行解析,获取该网页中多个问题的URL链接并爬取子HTML文件内容;
iii.对ii步骤爬取的多个问题的HTML页面,提取出网页中的问题标题、问题标号、投票数、问题描述和答案分类存于数据库中。
1b)Linux kernel邮件
Linux开发过程中的邮件按照不同的方式存于多个不同的服务器中,Linuxkernel邮件是Linux内核开发人员的官方交流平台,邮件内容常包括补丁的提交、审查、版本发布、技术交流等内容,每日的数据量非常庞大。本方法选取按照时间段分隔的邮件服务器http://lkml.iu.edu/hypermail/linux/kernel进行邮件的爬取。具体步骤如下:
i.选取某一时间段为目标,得到的该时间段邮件列表的URL,爬取此页的HTML文件;
ii.对i步骤获取的HTML进行解析,获取该时间段内的所有邮件的URL链接并爬取HTML文件;
iii.对ii步骤爬取的邮件HTML页面,提取出网页中邮件正文即Body-of-Message标签中的内容存于数据库中。
1c)Linux kernel Commit-log
Linux kernel Commit-log是记录Linux内核开发人员每一次对内核代码提交的日志,通常包括两类补丁代码和对应的新特性代码说明、Bug修复代码说明等,其内容随内核版本的演进在持续的同步更新。存放于代码库中的Commit-log信息对应于不同的版本,本方法爬取任意两个版本之间的Commit-log信息为生成对应版本的函数注释提供原材料。具体步骤如下:
i.根据起始版本获取第一个要爬取show页面URL;
ii.爬取show页面HTML,解析HTML文档获取commit log正文与标题存入数据库,并拼接next页面的URL;
iii.在标题中查找终止版本的标识,如果找到则结束爬取,否则返回步骤ii继续next页面。
2)数据预处理
不同的数据源包含不同样式的信息和不同的组织形式,所述方法首先将三种资源爬取的数据库内容文本以空行为分隔符,将文本分成备选注释段落并去除HTML标签。然后在研究各数据源特性的基础上,对Stack Overflow网站数据、Linux kernel邮件数据和Linux kernel Commit-log数据制定特有的三种过滤规则,利用过滤规则剔除无关Linux内核函数描述的噪声信息。
2a)Stack Overflow网站数据
过滤规则1:如果问题的投票小于1,删除问题及对应答案的所有段落;如果问题的投票大于1,删除对应答案中小于1的答案的所有段落。
2b)Linux kernel邮件数据
过滤规则2:以关键字"+"、"WARING"、"ERROR"、"#good"、"#bad"为条件剔除邮件中常包含的调用栈信息、告警、错误、补丁等段落。
2c)Linux kernel Commit-log数据
过滤规则3:对于Commit-log正文以关键字"==="、"Fix"、"Signed-off-by"为条件剔除commit-log特有的无关函数注释的内容;
3)按规则生成注释
所述方法在研究大量函数注释的基础上,概括人工函数注释自然文本关键的特性,以此特性制定生成函数注释的两种提取规则。具体包括:
3a)提取规则1:对函数进行注释说明的文字,通常包含如下关键字中的一个或几个:
"函数名字+()"、"function"、"methord"、"return"、"call"、"execute"、"invoke";
3b)提取规则2:对于函数的描述性语言中包含如下关键字的句子,一般不能作为函数的注释性文本:
no,not,error,bug,difficult,difficulty,problem,problems,fix,shouldn’t,doesn’t,can’t,couldn’t,don’t,isn’t,aren’t,wouldn’t,fail,why,what,null,bad,wrong,missing,lack,probably,likely,perhaps,think,may,maybe,unfortunately,unluckily。
本发明方案的具体的步骤如下:
1)数据获取与存储,图2是数据获取与存储流程图,包括:
1a)进入注释自动生成系统,选择生成注释的数据源。
1b)如果选择Stack Overflow,则进入1c);选择Linux kernel邮件,则进入1d);选择Linux kernle Commit-log则进入1e)。
1c)按照对问答网站Stack Overflow制定的爬取策略,爬取指定函数讨论的信息并存储,进入1f)。
1d)按照对Linux kernel邮件制定的爬取策略,爬取邮件信息并存储,进入1f)。
1e)按照对Linux kernel Commit-log制定的爬取策略,爬取Commit-log信息并存储,进入1f)。
1f)进行数据预处理。
2)数据预处理,图3是数据预处理流程图,包括:
2a)进入数据预处理,以空行为分隔将数据分成段落,进入2b)。
2b)剔除数据中的HTML标签,进入2c)。
2c)判断数据源类型,如果是Stack Overflow网站数据源,则进入2d);如果是Linux kernel邮件数据源,则进入2e);如果是Linux kernle Commit-log数据源,则进入2f)。
2d)按照过滤规则1,剔除Stack Overflow数据中投票小于1的段落,进入2g)。
2e)按照过滤规则2,剔除邮件特有的不适注释的段落,进入2g)。
2f)按照过滤规则3,剔除Commit-log特有的不适注释的段落,进入2g)。
2g)进行注释提取。
3)按规则生成注释,图4是按规则生成注释流程图,包括:
3a)进入注释提取,按提取规则1提取段落,如果能提取出段落,进入3b),否则进入3e)。
3b)将段落分成句子,则进入3c)。
3c)按提取规则2过滤句子。如果剩余句子,进入3d),否则进入3e)。
3d)展示自动生成的函数注释并存储,进入3e)。
3e)结束。
下面通过实施例对本发明作进一步的说明,但不以任何方式限制本发明的范围。
实施例1
本实施例设定如下使用场景:
使用Stack Overflow网站数据源,应用本方法自动生成对fork()函数的注释。
1)进入注释自动生成系统,选取Stack Overflow数据源,对关键字"linux fork()"进行搜索,爬取所得网页的内容,获取15个话题的对应文本。其中一个话题内容如下:
问题标号:12881111
问题标题:Output offock()calls
问题描述:
What would be the output offollowing fork()call?
fork(){
fork();
fork();
fork()&&fork()||fork();
fork();
Print(“Saikacollection\n”);
Can anyone help me in getting the answer to this code as well as someexplanations as i am newto OS?I have found several questions on fork()on SO,but couldn’t figure out.
问题投票数:1
回答1:On succeed execution of a fork()call,new child is created.Theprocess creating the child is called parent process.Fork()call returns pid(process identifier)ofthe child to parent.Fork()returns 0to the childprocess.
回答1投票:16
回答2:If you want new process to be more independent,you might take alook at exec-*family of funcitons(POSIX)-so you can fork,and then immediatelyreplace the fork process(you can do it,since newly forked process iscontrolled by you);Or possibly have a look at popen()as well.
回答2投票:0
2)对爬取的数据进行预处理,删除投票小于一的回答段落,得到文本如下:
文本1:What would be the output offollowing fork()call?
fork(){
fork();
fork();
fork()&&fork()||fork();
fork();
Print(“Saikacollection\n”);
Can anyone help me in getting the answer to this code as well as someexplanations as i am newto OS?I have found several questions on fork()on SO,but couldn’t figure out.
文本2:On succeed execution of a fork()call,new child is created.Theprocess creating the child is called parent process.Fork()call returns pid(process identifier)ofthe child to parent.Fork()returns 0to the childprocess.
3)经过规则1的应用,上述步骤中的两段文本将被提取出来作为注释的备选段落;经过规则2的应用,文本1中的句子将被滤除,生成注释如下:
On succeed execution of a fork()call,new child is created.The processcreating the child is called parent process.Fork()call returns pid(processidentifier)of the child to parent.Fork()returns 0to the child process.
该注释对fork函数的功能、返回值进行了比较全面的描述。
实施例2
本实施例设定如下使用场景:
使用Linux内核邮件为数据源,选取2016年7月16至7月23一段时间的邮件,应用本方法自动生成函数注释。
1)进入注释自动生成系统,选取Linux内核邮件为数据源,爬取该段时间内4493封邮邮件。其中一封标题和正文文本如下:
标题:timer_list:print_tickdevice():calculate->min_delta_nsdynamically
正文:print_tickdevice(),assembling the per-tick device sections in/proc/timer_list,is the last user ofstruct clock_event_device's->min_delta_nsmember.
In order to make this one fully obsolete while retaining userspaceABI,calculate the displayed value of'min_delta_ns'on the fly from->min_delta_ticks_adjusted.
Signed-off-by:Nicolai Stange<nicstange@xxxxxxxxx>
---
kernel/time/timer_list.c|5+++--
1file changed,3insertions(+),2deletions(-)
...
2)其中一封邮件经过预处理后得到两段文本,如下:
文本1:print_tickdevice(),assembling the per-tick device sections in/proc/timer_list,is the last user of struct clock_event_device's->min_delta_nsmember.
文本2:In order to make this one fully obsolete while retaininguserspace ABI,calculate the displayed value of'min_delta_ns'on the fly from->min_delta_ticks_adjusted.
3)经过规则1的应用,上述步骤中的文本1将被提取出来作为注释的备选段落;经过规则2的应用,生成的自动注释如下:
print_tickdevice(),assembling the per-tick device sections in/proc/timer_list,is the last user of struct clock_event_device's->min_delta_nsmember.
该注释说明了print_tickdevice()函数的功能和该函数使用了何种数据。
实施例3
本实施例设定如下使用场景:
使用Linux内核Commit-log作为数据源,选取v4.8-rc3与v4.8-rc2两个版本之间的log信息,应用本方自动生成函数注释。
1)进入注释自动生成系统,选取Linux kernel Commit-log为数据源,共爬取136个Commit-log信息。其中一个Commit-log标题和正文的文本如下:
标题:dm raid:enhance attempt_restore_of_faulty_devices()to supportmore devices
正文:dm raid:enhance attempt_restore_of_faulty_devices()to supportmore devices
attempt_restore_of_faulty_devices()is limited to 64when it shouldsupport the new maximum of 253when identifying any failed devices.It clearsany revivable devices via an MD personality hot remove and add cylce to allowfor their recovery.
Address by using existing functions to retrieve and update all faileddevices'bitfield members in the dm raid superblocks on all RAID devices andcheck for any devices to clear in it.
Whilst on it,don't call attempt_restore_of_faulty_devices()for any MDpersonality not providing disk hot add/remove methods(i.e.raid0now),becausesuch personalities don't support reviving offailed disks.
Signed-off-by:Heinz Mauelshagen<heinzm@redhat.com>
Signed-off-by:Mike Snitzer<snitzer@redhat.com>
...
2)上述Commit-log预处理后得到四段文本:
文本1:dmraid:enhance attempt_restore_of_faulty_devices()to supportmore devices
文本2:attempt_restore_of_faulty_devices()is limited to 64when itshould support the new maximum of 253when identifying any failed devices.Itclears any revivable devices via an MD personality hot remove and add cylceto allow for their recovery.
文本3:Address by using existing functions to retrieve and update allfailed devices'bitfield members in the dm raid superblocks on allRAID devicesand check for any devices to clear in it.
文本:4:Whilst on it,don't call attempt_restore_of_faulty_devices()forany MD personality not providing disk hot add/remove methods(i.e.raid0now),because such personalities don't support reviving offailed disks.
3)经过规则1的应用,上述步骤中的文本1、2、3、4将被提取出来作为注释的备选段落;经过规则2的应用,文本4中的句子将被滤除,生成的自动注释如下:
dm raid:enhance attempt_restore_of_faulty_devices()to support moredevices
attempt_restore_of_faulty_devices()is limited to 64when it shouldsupport the new maximum of 253when identifying any failed devices.It clearsany revivable devices via an MD personality hot remove and add cylce to allowfor their recovery.
Address by using existing functions to retrieve and update all faileddevices'bitfield members in the dm raid superblocks on all RAID devices andcheck for any devices to clear in it.
该注释说明了attempt_restore_of_faulty_devices()函数在v4.8-rc2升级到v4.8-rc3与版本之后会支持更多的设备。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求所述为准。

Claims (10)

1.一种基于数据挖掘的源代码注释自动生成方法,包括以下步骤:
1)分别从三种数据源中爬取与Linux内核函数相关的描述信息,所述三种数据源为Stack Overflow网站、Linux kernel邮件和Linux kernel Commit-log;
2)对步骤1)中得到的描述信息进行预处理,获取可能作为注释的文本,所述预处理包括文本格式处理及剔除无关Linux内核描述的噪声信息;
3)概括函数注释自然文本关键的特性作为提取规则,对步骤2)预处理后获取到的文本进行提取,自动生成函数整体注释。
2.如权利要求1所述的一种基于数据挖掘的源代码注释自动生成方法,其特征在于,步骤1)包括:从Stack Overflow网站获取编程人员对指定函数讨论的信息,从Linux kernel邮件获取内核开发人员的开发过程邮件信息,从Linux kernel Commit-log获取开发人员提交代码的Commit-log信息,将全部数据分类存储于数据库。
3.如权利要求2所述的一种基于数据挖掘的源代码注释自动生成方法,其特征在于,从Stack Overflow网站获取编程人员对指定函数讨论的信息的具体步骤如下:
1-1-1)在Stack Overflow网站的搜索页面输入“Linux+目标函数名称”搜索,得到目标函数话题列表的URL,爬取此页的HTML文件内容;
1-1-2)对步骤1-1-1)爬取的HTML文件内容进行解析,获取该网页中多个问题的URL链接并爬取其子HTML文件内容;
1-1-3)对步骤1-1-2)爬取的多个问题的子HTML文件内容,提取出网页中的问题标题、问题标号、投票数、问题描述和答案分类存储于数据库中。
4.如权利要求2所述的一种基于数据挖掘的源代码注释自动生成方法,其特征在于,按照时间段分隔的邮件服务器http://lkml.iu.edu/hypermail/linux/kernel进行邮件的爬取,从Linux kernel邮件获取内核开发人员的开发过程邮件信息,具体步骤如下:
1-2-1)选取某一时间段为目标,得到的该时间段邮件列表的URL,爬取此页的HTML文件;
1-2-2)对步骤1-2-1)爬取的HTML文件进行解析,获取该时间段内的所有邮件的URL链接并爬取其HTML文件;
1-2-3)对步骤1-2-2)爬取的所有邮件的HTML文件,提取出网页中邮件的标题和正文存储于数据库中。
5.如权利要求2所述的一种基于数据挖掘的源代码注释自动生成方法,其特征在于,从Linux kernel Commit-log获取开发人员提交代码的Commit-log信息的具体步骤如下:
1-3-1)根据用户指定的起始版本获取第一个要爬取的show页面的URL;
1-3-2)爬取show页面的HTML文档,解析HTML文档获取commit log正文与标题存入数据库,并拼接next页面的URL;
1-3-3)在标题中查找终止版本的标识,如果找到则结束爬取,否则返回步骤1-3-2)继续next页面。
6.如权利要求1所述的一种基于数据挖掘的源代码注释自动生成方法,其特征在于,步骤2)中所述文本格式处理包括:将从三种数据源中爬取的描述信息以空行为分隔符,将文本分成备选注释段落并去除HTML标签。
7.如权利要求1所述的一种基于数据挖掘的源代码注释自动生成方法,其特征在于,步骤2)中分别针对三种数据源形成三种对应的过滤规则,从步骤1)中得到的描述信息中剔除无关Linux内核描述的噪声信息;针对Stack Overflow网站形成的过滤规则为:如果问题的投票小于1,删除问题及对应答案的所有段落;如果问题的投票大于1,删除对应答案中小于1的答案的所有段落;针对Linux kernel邮件形成的过滤规则为:以关键字"+"、"WARING"、"ERROR"、"#good"、"#bad"为条件剔除邮件中包含调用栈信息、告警、错误、补丁的段落;针对Linux kernel Commit-log形成的过滤规则为:对于Commit-log正文以关键字"==="、"Fix"、"Signed-off-by"为条件剔除commit-log特有的无关函数注释的内容。
8.如权利要求7所述的一种基于数据挖掘的源代码注释自动生成方法,其特征在于,从步骤1)中得到的描述信息中剔除无关Linux内核描述的噪声信息包括:按照针对StackOverflow网站形成的过滤规则,剔除从Stack Overflow网站爬取的描述信息中投票小于1的段落;按照针对Linux kernel邮件形成的过滤规则,剔除邮件特有的不适注释的段落;按照针对Linux kernel Commit-log形成的过滤规则剔除Commit-log特有的不适注释的段落。
9.如权利要求1所述的一种基于数据挖掘的源代码注释自动生成方法,其特征在于,步骤3)中所述提取规则具体包括:
提取规则1:对函数进行注释说明的文字,包含如下关键字中的一个或几个:
"函数名字+()"、"function"、"methord"、"return"、"call"、"execute"、"invoke";
提取规则2:对于函数的描述性语言中包含如下关键字的句子,不能作为函数的注释性文本:
no,not,error,bug,difficult,difficulty,problem,problems,fix,shouldn’t,doesn’t,can’t,couldn’t,don’t,isn’t,aren’t,wouldn’t,fail,why,what,null,bad,wrong,missing,lack,probably,likely,perhaps,think,may,maybe,unfortunately,unluckily。
10.如权利要求9所述的一种基于数据挖掘的源代码注释自动生成方法,其特征在于,步骤3)具体包括:
3-1)按提取规则1提取段落;
3-2)将提取得到的段落分成句子;
3-3)按提取规则2过滤所述句子,如有剩余,自动生成函数注释。
CN201611022571.0A 2016-11-16 2016-11-16 一种基于数据挖掘的源代码注释自动生成方法 Pending CN106681708A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611022571.0A CN106681708A (zh) 2016-11-16 2016-11-16 一种基于数据挖掘的源代码注释自动生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611022571.0A CN106681708A (zh) 2016-11-16 2016-11-16 一种基于数据挖掘的源代码注释自动生成方法

Publications (1)

Publication Number Publication Date
CN106681708A true CN106681708A (zh) 2017-05-17

Family

ID=58867603

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611022571.0A Pending CN106681708A (zh) 2016-11-16 2016-11-16 一种基于数据挖掘的源代码注释自动生成方法

Country Status (1)

Country Link
CN (1) CN106681708A (zh)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107341014A (zh) * 2017-06-27 2017-11-10 乐视致新电子科技(天津)有限公司 电子设备、技术文档的生成方法及装置
CN108196877A (zh) * 2018-01-16 2018-06-22 北京三快在线科技有限公司 组件发布管理的方法和装置以及计算设备
CN108319467A (zh) * 2018-01-03 2018-07-24 武汉斗鱼网络科技有限公司 一种注释填充方法
CN108345457A (zh) * 2018-01-24 2018-07-31 上海交通大学 一种对程序源代码自动生成功能描述性注释的方法
CN108491459A (zh) * 2018-03-05 2018-09-04 中国人民解放军国防科技大学 一种软件代码摘要自动生成模型的优化方法
CN109799990A (zh) * 2017-11-16 2019-05-24 中标软件有限公司 源代码注释自动生成方法及系统
CN110825376A (zh) * 2018-08-07 2020-02-21 深圳Tcl数字技术有限公司 一种解析带注释json文件的方法、存储介质及装置
CN111090460A (zh) * 2019-10-12 2020-05-01 浙江大学 一种基于最近邻算法的代码变更日志自动生成方法
CN111813443A (zh) * 2020-07-28 2020-10-23 南京大学 一种用JavaFX进行代码样例自动填充的方法和工具
CN112836477A (zh) * 2021-01-15 2021-05-25 亿企赢网络科技有限公司 代码注释文档的生成方法、装置、电子设备及存储介质
CN113176878A (zh) * 2021-06-30 2021-07-27 深圳市维度数据科技股份有限公司 自动查询方法、装置和设备
US11237824B2 (en) 2020-02-07 2022-02-01 Red Hat, Inc. Tracking related changes with code annotations
CN114840250A (zh) * 2022-07-04 2022-08-02 金现代信息产业股份有限公司 一种代码冲突合并方法、系统、电子设备及可读存储介质
US11556335B1 (en) 2021-09-14 2023-01-17 International Business Machines Corporation Annotating program code

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009193335A (ja) * 2008-02-14 2009-08-27 Nec Corp 静的検証ツールのアノテーション自動挿入方法
CN102063488A (zh) * 2010-12-29 2011-05-18 南京航空航天大学 一种基于语义的代码搜索方法
CN102129365A (zh) * 2010-01-20 2011-07-20 阿里巴巴集团控股有限公司 一种生成代码说明文档的方法及装置
CN102567016A (zh) * 2011-12-07 2012-07-11 北京北大软件工程发展有限公司 应用程序编程接口使用示例提取方法及装置
CN103336760A (zh) * 2013-07-11 2013-10-02 北京信息科技大学 一种基于逆向工程自动生成软件文档的方法及装置
US20130326326A1 (en) * 2012-05-31 2013-12-05 International Business Machines Corporation Annotating a generator output stream
CN106021410A (zh) * 2016-05-12 2016-10-12 中国科学院软件研究所 一种基于机器学习的源代码注释质量评估方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009193335A (ja) * 2008-02-14 2009-08-27 Nec Corp 静的検証ツールのアノテーション自動挿入方法
CN102129365A (zh) * 2010-01-20 2011-07-20 阿里巴巴集团控股有限公司 一种生成代码说明文档的方法及装置
CN102063488A (zh) * 2010-12-29 2011-05-18 南京航空航天大学 一种基于语义的代码搜索方法
CN102567016A (zh) * 2011-12-07 2012-07-11 北京北大软件工程发展有限公司 应用程序编程接口使用示例提取方法及装置
US20130326326A1 (en) * 2012-05-31 2013-12-05 International Business Machines Corporation Annotating a generator output stream
CN103336760A (zh) * 2013-07-11 2013-10-02 北京信息科技大学 一种基于逆向工程自动生成软件文档的方法及装置
CN106021410A (zh) * 2016-05-12 2016-10-12 中国科学院软件研究所 一种基于机器学习的源代码注释质量评估方法

Cited By (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107341014A (zh) * 2017-06-27 2017-11-10 乐视致新电子科技(天津)有限公司 电子设备、技术文档的生成方法及装置
CN109799990A (zh) * 2017-11-16 2019-05-24 中标软件有限公司 源代码注释自动生成方法及系统
CN109799990B (zh) * 2017-11-16 2022-02-11 中标软件有限公司 源代码注释自动生成方法及系统
CN108319467A (zh) * 2018-01-03 2018-07-24 武汉斗鱼网络科技有限公司 一种注释填充方法
CN108196877A (zh) * 2018-01-16 2018-06-22 北京三快在线科技有限公司 组件发布管理的方法和装置以及计算设备
CN108345457A (zh) * 2018-01-24 2018-07-31 上海交通大学 一种对程序源代码自动生成功能描述性注释的方法
CN108345457B (zh) * 2018-01-24 2021-03-09 上海交通大学 一种对程序源代码自动生成功能描述性注释的方法
CN108491459B (zh) * 2018-03-05 2021-10-26 中国人民解放军国防科技大学 一种软件代码摘要自动生成模型的优化方法
CN108491459A (zh) * 2018-03-05 2018-09-04 中国人民解放军国防科技大学 一种软件代码摘要自动生成模型的优化方法
CN110825376A (zh) * 2018-08-07 2020-02-21 深圳Tcl数字技术有限公司 一种解析带注释json文件的方法、存储介质及装置
CN110825376B (zh) * 2018-08-07 2024-03-12 深圳Tcl数字技术有限公司 一种解析带注释json文件的方法、存储介质及装置
CN111090460B (zh) * 2019-10-12 2021-05-04 浙江大学 一种基于最近邻算法的代码变更日志自动生成方法
CN111090460A (zh) * 2019-10-12 2020-05-01 浙江大学 一种基于最近邻算法的代码变更日志自动生成方法
US11237824B2 (en) 2020-02-07 2022-02-01 Red Hat, Inc. Tracking related changes with code annotations
CN111813443A (zh) * 2020-07-28 2020-10-23 南京大学 一种用JavaFX进行代码样例自动填充的方法和工具
CN111813443B (zh) * 2020-07-28 2023-07-18 南京大学 一种用JavaFX进行代码样例自动填充的方法和工具
CN112836477A (zh) * 2021-01-15 2021-05-25 亿企赢网络科技有限公司 代码注释文档的生成方法、装置、电子设备及存储介质
CN112836477B (zh) * 2021-01-15 2024-02-09 亿企赢网络科技有限公司 代码注释文档的生成方法、装置、电子设备及存储介质
CN113176878A (zh) * 2021-06-30 2021-07-27 深圳市维度数据科技股份有限公司 自动查询方法、装置和设备
CN113176878B (zh) * 2021-06-30 2021-10-08 深圳市维度数据科技股份有限公司 自动查询方法、装置和设备
US11556335B1 (en) 2021-09-14 2023-01-17 International Business Machines Corporation Annotating program code
CN114840250A (zh) * 2022-07-04 2022-08-02 金现代信息产业股份有限公司 一种代码冲突合并方法、系统、电子设备及可读存储介质
CN114840250B (zh) * 2022-07-04 2022-10-04 金现代信息产业股份有限公司 一种代码冲突合并方法、系统、电子设备及可读存储介质

Similar Documents

Publication Publication Date Title
CN106681708A (zh) 一种基于数据挖掘的源代码注释自动生成方法
Ferrucci et al. Building an example application with the unstructured information management architecture
Bird et al. Seven dimensions of portability for language documentation and description
Corcoglioniti et al. Frame-based ontology population with PIKES
Greenbacker Towards a framework for abstractive summarization of multimodal documents
CN104516949B (zh) 网页数据处理方法和装置、查询处理方法及问答系统
CA2807494C (en) Method and system for integrating web-based systems with local document processing applications
Huynh et al. Enabling web browsers to augment web sites' filtering and sorting functionalities
EP2162833A1 (en) A method, system and computer program for intelligent text annotation
Palmirani Legislative change management with Akoma-Ntoso
Richards et al. The Archaeology Data Service and the Archaeotools project: faceted classification and natural language processing
Schneider et al. Towards semantic story telling with digital curation technologies
Arora et al. Web‐Based News Straining and Summarization Using Machine Learning Enabled Communication Techniques for Large‐Scale 5G Networks
Hoskinson Creating the ultimate research assistant
Azzopardi et al. Fusion of news reports using surface-based methods
Altamirano et al. IRASubcat, a highly parametrizable, language independent tool for the acquisition of verbal subcategorization information from corpus
Vargas-Vera et al. MnM: semi-automatic ontology population from text
Sudo Unsupervised discovery of extraction patterns for information extraction
Kumar et al. FSA and NLP based un-supervised non template Web data extraction in the construction of dynamic ontology
Samzelius Lexeme Extraction for Wikidata: A proof of concept study for Swedish lexeme extraction
KR20230000008A (ko) 빅데이터 기반의 컨텐츠 퍼블리싱 자동화 시스템
Suchan Semantics Detection in Partially Structured Sources
Issac Yet another web crawler
Chen Parallel text mining for cross-language information retrieval using a statistical translation model
Palacios et al. Ontologies evaluation for a conceptual retrieval system of metadata schemes: case study

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: 20170517

RJ01 Rejection of invention patent application after publication