CN104750484B - 一种基于最大熵模型的代码摘要生成方法 - Google Patents

一种基于最大熵模型的代码摘要生成方法 Download PDF

Info

Publication number
CN104750484B
CN104750484B CN201510127501.0A CN201510127501A CN104750484B CN 104750484 B CN104750484 B CN 104750484B CN 201510127501 A CN201510127501 A CN 201510127501A CN 104750484 B CN104750484 B CN 104750484B
Authority
CN
China
Prior art keywords
code
lexical item
maximum entropy
entropy model
abstract
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.)
Expired - Fee Related
Application number
CN201510127501.0A
Other languages
English (en)
Other versions
CN104750484A (zh
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.)
Fujian University of Technology
Original Assignee
Fujian University of Technology
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 Fujian University of Technology filed Critical Fujian University of Technology
Priority to CN201510127501.0A priority Critical patent/CN104750484B/zh
Publication of CN104750484A publication Critical patent/CN104750484A/zh
Application granted granted Critical
Publication of CN104750484B publication Critical patent/CN104750484B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Machine Translation (AREA)

Abstract

本发明提供一种基于最大熵模型的代码摘要生成方法,根据限定的样本模板采集训练样本;根据训练样本构建基于最大熵模型的代码元素分类器;将待分析的源代码输入到分类器,以识别其中的代码元素,并获取各代码元素所包含的词项;将获取到的词项进行降噪;根据词项所属的代码元素类型,并指定各个词项的权重;根据权重和出现次数,评估词项的重要性;根据重要性评估结果以及用户指定的摘要约束,生成代码摘要,使得得到的代码摘要更加的准确。

Description

一种基于最大熵模型的代码摘要生成方法
技术领域
本发明涉及一种基于最大熵模型的代码摘要生成方法。
背景技术
在软件生命周期的各个阶段,开发人员需要花费大量的时间阅读程序代码。在此期间,开发人员倾向于避免去理解整个系统,而选择仅关注代码中与任务相关的某个片断。为了实现这一目标,开发人员通常会略读代码(例如仅阅读方法签名)。当通过略读获取的知识不足于理解代码片断时,他们就不得不花费精力去阅读代码的具体信息(例如方法体中的内容)。前一种方式的效率虽高,但容易丢失代码中的有效信息,而后一种方式则过于耗时,并且,通过略读代码获得的知识难于与其他开发人员共享。
作为略读的一种常见替代方案,开发人员往往还会通过阅读代码摘要以理解代码,代码摘要包含一些能够描述代码特性或功能的关键词或简短的语句,例如“draw bluerectangle”或“modify config file”。
现有绝大多数的代码摘要都是手工创建,不仅创建摘要时需要占用开发人员的大量精力而且其维护成本非常高昂,虽然学术界和工业界也提出了一些基于词频的代码摘要生成技术,但是这些技术往往仅考虑了不同词项出现的次数和频率,而忽略了词所处的位置。大量的研究表明,代码中不同词的重要性与其所属代码元素的类型(类、方法、变量等)密切相关;例如:相对于出现在注释中的词项,那些位于类名的词项的重要性往往要高得多;并且,在现有的技术方案中,开发人员无法指定某些他们需要着重关注或忽略的词项,例如:在一些年代较久的遗留代码中,代码中的注释有可能早已失去了与代码的一致性,而现有的技术仍然会将注释视为与代码一样重要,并可能将从注释中抽取过时的词而成为代码摘要的一部份。最近似的实现方案是美国韦恩州立大学的Haiduc等学者提出的基于词频的代码摘要技术,但是该技术方案只关注词出现的次数与频率,而忽略了词所处位置所产生的影响,导致其代码摘要不准确。
发明内容
本发明要解决的技术问题,在于提供一种基于最大熵模型的代码摘要生成方法,得到更加准确的代码摘要。
本发明是这样实现的:一种基于最大熵模型的代码摘要生成方法,包括如下步骤:
步骤1、根据限定的样本模板,采集训练样本;
步骤2、根据训练样本构建基于最大熵模型的代码元素分类器;
步骤3、将源代码输入到分类器,识别其中的代码元素,并获取各代码元素所包含的词项,以及各个词项的出现次数;
步骤4、将获取到的词项进行降噪;
步骤5、根据降噪后的词项所属的代码元素类型,分配其权重;
步骤6、根据降噪后的词项的权重和出现次数,评估词项的重要性;
步骤7、根据重要性评估结果以及用户限定的摘要约束,生成代码摘要。
进一步地,所述步骤1进一步具体为:根据限定的样本模板,用抽象语法树解析代码,根据限定的模板采集训练样本。
进一步地,步骤2进一步具体为:根据训练样本,用广义迭代缩放算法来构建代码元素分类器。
进一步地,所述步骤4进一步具体为:去除获取到的词项中的保留字,并对剩余的词项进行分词和词干化处理。
进一步地,所述步骤6进一步具体为:根据降噪后的词项的权重和出现次数,用TF-IDF算法对降噪后的词项进行重要性评估。
进一步地,所述步骤7进一步具体为:根据指定代码摘要中包含的最大词项数、重要性评估以及限定的排序方式,生成代码摘要。
本发明具有如下优点:本发明一种基于最大熵模型的代码摘要生成方法,能够根据用户指定的训练样本生成基于最大熵模型的代码元素类型分类器,以识别用户所关注的代码元素,并从中抽取最可能刻画代码功能和特性的关键词,以自动生成代码摘要,从而极大地减少开发人员创建和维护代码摘要的工作量,有效地利用代码中的代码元素类型信息,从而有效地识别代码中的关键词,而不再仅关注代码中不同词出现的频次,提供良好的扩展性,开发人员可以根据具体的需要生成不同的代码元素识别模型,从而能够有针对性地识别出不同软件系统所关注的关键词,从而最终得到更加个性化和更符合具体要求的代码摘要。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1为本发明方法执行流程图。
具体实施方式
如图1所示,本发明基于最大熵模型的代码摘要生成方法,包括如下步骤:
步骤1、根据限定的样本模板,用抽象语法树解析代码,采集训练样本;
步骤2、根据训练样本,用通用迭代算法来构建代码元素分类器;
对于分类问题,用A表示所有可能的代码元素类型,B是代码元素所在上下文信息构成的集合,则可定义一个{0,1}域上的一个二值函数来表示特征:
其中如果(a,b)∈(A,B),且满足限定条件,则f(a,b)=1;否则,f(a,b)=0;
若将判定代码元素的类型a∈A看为一个事件,该代码元素的上下文信息看作该事件发生的条件b∈B,那么建立最大熵模型的目的就是计算判定代码元素类型a的条件概率p(a|b),即利用最大熵模型选择条件概率p(a|b)最大的候选结果作为最终判定结果:
式中,P是指所建模型中所有与已知样本中的概率分布相吻合的概率分布集合。因为所建模型的概率分布p(b)必须符合已知训练样本中的概率分布所以可将式(2)写为:
如果存在某个特征fj(a,b),它在训练样本中关于经验概率分布的数学期望为:
假设存在k个特征fj(j=1,2,3...,k),则一个合理的概率分布模型p属于约束所产生的如下模型集P:
式中,是特征fj在样本中的期望值,Ep(fj)是特征fj概率分布p下的期望值。由此,代码元素的分类问题就变成了满足式(5)表示的约束条件下求解目标函数(3)的最优解。可证,满足上述条件的最优解具有如下形式:
为归一化因子,使l=k+1,λj为特征fj的权重。
为了构建基于最大熵模型的代码元素分类器,步骤2还可进一步具体为:
[1]初始化:λ[1...l]=0;
[2]根据公式(4)计算每个特征函数fj的训练样本期望值:
[3]执行如下循环,迭代计算特征函数的模型期望值Ep(fj);
[4]利用公式(6)和公式(7)计算概率
[5]若满足终止条件,则结束迭代;否则修正λ:
其中,n为循环迭代次数,迭代终止条件可以是事先设定的迭代次数(如100),也可以是变化值小于某个事先设定阈值ε(如0.0001)。。
[6]确定λ,计算每个
步骤3、将源代码输入到分类器,获取源代码中的词项,以及各个词项的出现次数;
步骤4、除去获取到的词项中的保留字,并对剩余的词项进行分词和词干化处理;
步骤5、根据词项所属的代码元素类型,分配各个词项的权重;
步骤6、根据降噪后的词项的权重和出现次数,用TF-IDF算法对降噪后的词项进行重要性评估;其中,方法调用语句的权重<方法名的权重<类名的权重<包名的权重;
步骤7、根据指定代码摘要中包含的最大词项数、重要性评估以及限定的排序方式,生成代码摘要。
其中一种具体实施方式如下所示:
在该技术中,开发人员可以根据具体需求定制代码元素训练样本,通过在训练集上进行学习,可以构建出基于最大熵模型的代码元素分类器。分类器能够解析通过各种编程语言实现的源程序,并可从代码中识别用户所关注的代码元素,进而能够抽取出组成各代码元素的词项。在得到代码元素中的词项之后,词项预处理模块将会剔除其中可能包含的停用词和程序保留字,并通过分词、词干化等操作压缩词项集合的规模并清除词项中的噪音。在此之后,词项加权模块将会根据各词项所处的代码元素类型,对词项进行加权进行,以将代码元素类型对词项的影响权重转换为词项在代码中出现的频次。基于词项在代码中出现的频次,可以通过TF-IDF方法计算各词项的重要性。最后,根据用户指定的摘要长度和词项排序依据,摘要生成模块将会生成具有个性化且易于理解的代码摘要。
实现步骤1:为了自动生成代码摘要,首先需要识别出代码中最重要的代码元素,例如类和方法等,从而可以不同词项在不同代码元素中出现的次数来生成代码摘要。由于传统的语法树分析工具无法处理通过编程语言实现的代码,以及用伪码编写的制品,本发明采用基于最大熵的代码元素分类器来识别各种软件制品中的代码元素。基于最大熵的代码元素分类器的构建过程包含训练阶段和识别阶段。在训练阶段将通过训练数据得到一个带权特征库,在识别阶段利用这个特征库进行实体类型识别。可将源代码中的代码类型识别视为一个分类问题,即针对源代码中不同词,根据其上下文标注其实体类型。对于代码元素分类问题,一个代码元素分到某个类别可以视为一个事件,代码元素的上下文可以看成这个事件发生的环境。以特征函数描述已知的约束条件,特征函数一般可表示为一个二值函数f(a,b)→{0,1}。以特征fi(a,b)为例,b对应词项上下文,主要包括出现在其前后的单词和符号,例如用于识别属性名的上下文可以是“变量存在某个类中,且不在任何一个方法中定义”;而a则是代码元素的类型标注。
通常而言,a的取值范围可以是{class,method,invocate,comment,param,normalText}。其中,“class”表示类声明,“method”表示方法声明,“invocate”表示方法调用,“comment”表示注释,“param”表示变量,“normalText”表示正常文本等。当用户不需要对代码进行特殊的处理时,可以使用系统中已存在的基于最大熵的代码类型识别模型,从而减少该步骤的工作量。而当用户需要扩展新的代码类型时,可以通过修改y的取值范围。例如增加新的类型“mark”用于识别代码中用于标注的代码元素。为了得到有效的命名实体识别模型,训练数据应至少要包含15000句如表1所示的句子。以句子“public class<START:class>FieldWeightDialog<END>extends javax.swing.JDialog”为例,“<START”表示代码元素的开始位置,“<END>”表示代码元素的结束,“:class>”用于标注代码元素的类型。所有的训练数据都可以通过类似的自定义类型模板,并利用抽象语法树(AbstractSyntaxTree,AST)解析已有的软件项目,从而自动生成训练数据。
表1 训练样本模板
实现步骤2:
本步骤将利用训练样本构建一个能够对实际问题准确描述的分类器,用于识别未知代码中的代码元素。对于分类问题,用A表示所有可能的代码元素类型,B是代码元素所在上下文信息构成的集合,则可定义一个{0,1}域上的一个二值函数来表示特征:
其中如果(a,b)∈(A,B),且满足限定条件,则f(a,b)=1;否则,f(a,b)=0;若将判定代码元素可能属于的类型a∈A看为一个事件,该代码元素所在上下文信息看作该事件发生的条件b∈B,那么建立最大熵模型的目的就是计算判定代码元素类型a的条件概率p(a|b),即利用最大熵模型选择条件概率p(a|b)最大的候选结果作为最终的判定结果:
式中,P是指所建模型中所有与已知样本中的概率分布相吻合的概率分布集合。因为所建模型的概率分布p(b)必须符合已知训练样本中的概率分布所以可将式(2)写为:
如果存在某个特征fj(a,b),它在训练样本中关于经验概率分布的数学期望为:
假设存在k个特征fj(j=1,2,3...,k),则一个合理的概率分布模型p属于约束所产生的如下模型集P:
式中,是特征fj在样本中的期望值,Ep(fj)是特征fj概率分布p下的期望值。由此,代码元素的分类问题就变成了满足式(5)表示的约束条件下求解目标函数(3)的最优解。可证,满足上述条件的最优解具有如下形式:
为归一化因子,使l=k+1,λj为特征fj的权重。
为了构建基于最大熵模型的分类器,本步骤可进一步具体为:
[1]初始化:λ[1…l]=0;
[2]根据公式(4)计算每个特征函数fj的训练样本期望值:
[3]执行如下循环,迭代计算特征函数的模型期望值Ep(fj);
[4]利用公式(6)和公式(7)计算概率若满足终止条件,则结束迭代;否则修正λ:
其中,n为循环迭代次数,迭代终止条件可以是事先设定的迭代次数(如100),也可以是变化值小于某个事先设定阈值ε(如0.0001)。
[5]确定λ,计算每个
实现步骤3:
得到基于最大熵模型的分类器之后,便可将待分析系统的源代码作为输入,通过分类器识别系统中的代码元素。为了简化后续的分析操作,可将分类器输出的词项保存到数据库中,并记录各词项所属的代码元素类型,出现的次数等。当词项出现在不同的代码元素时(例如同时出现在类名和注释中),数据库将对其分别记录。通过这种方式便可为后续的词项处理提供一个统一的数据访问接口。
步骤4:
与一般的文本不同的是,程序中包含了大量的短字符(例如经常在循环词句中经常出现的i和j)。同时,为了提高程序的可读性,开发人员常用多个词为方法命名,例如将“deleteFile”作为方法名。对于前者,本技术通过删除过短字符达到目标。而对于后者,则利用业界提供的各种分词工具将一个由多个词组合起来的词项进行切分。除了一般文本中包含的停用词之外,代码中还包含着一系列已定义,且含有特殊意义的程序保留字(或称关键字)。因此,除了去除停用字之外,还需要删除程序保留字。对于多数的程序而言,其中包含大量的英文词项。而英文单词常由前缀、词根和后台缀等部分组成具体到句子中,单词还有性、数、格以及时态引起的词形变化。但实际上,一个单词的不同词形往往可以认为是在表达同一个意思。因此,有必要通过词干化处理进一步减少待处理的关键词集合的数量。
步骤5:
在降噪之后需要根据词项所属的代码元素类型对其进行加权。考虑到方法调用语句通常是代码的主体,可取位于该类型的词项权重为基准权重(例如1),其他代码元素类型的权重取相对值。得到不同代码元素类型的权重值之后,加权处理模块将依据权重值对词项集合进行更新,以通过词项出现频次直观地展现词项的重要性(例如在类名中出现1次的词项标记为10次),进而方便后续的词项重要性分析。
以类名的权重为方法调用的10倍为例,在如下代码
其中,reload和Languages出现在方法调用语名中,因此标注它们出现的次数为1;而Buddi和Translator出现在类名中,因此虽然它们只出现了1次,但加权处理模块会认为这两个词项在代码中出现的次数为10。
步骤6:
本技术采用TF-IDF(term frequency-inverse document frequency)来评估源程序中各个方法体内不同单词的重要程度。在TF-IDF中,单词的重要性随着它在方法体中出现的次数成正比,但同时会随着它在源程序中不同方法内出现的频率成反比。可通过公式计算方法中某一词项的重要性。其中,m表示单词在该方法体中出现的次数,∑kmk表示该单词在所有方法体中出现的频率。
步骤7:
开发人员在为代码作摘要时,往往只会使用少量的单词。特别是对于一些代码行数较多的方法而言,在经过上述多个步骤的分析之后,仍有可能存在较多的词项。因此,本技术提供了一个摘要生成模块以生成规模适中的代码摘要。在该模块中,用户可以指定代码摘要中包含的最大词项数,以及偏好的排序方式(例如按字母顺序或按重要性),生成更加友好和易读的代码摘要。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。

Claims (6)

1.一种基于最大熵模型的代码摘要生成方法,其特征在于:包括如下步骤:
步骤1、根据限定的样本模板,采集训练样本;
步骤2、根据训练样本构建基于最大熵模型的代码元素分类器;
步骤3、将源代码输入到所述分类器,所述分类器识别其中的代码元素,并获取各代码元素所包含的词项,以及各个词项的出现次数;
步骤4、将获取到的词项进行降噪;
步骤5、根据降噪后的词项所属的代码元素类型,分配其权重;
步骤6、根据降噪后的词项的权重和出现次数,评估词项的重要性;
步骤7、根据重要性评估结果以及用户限定的摘要约束,生成代码摘要。
2.根据权利要求1所述的一种基于最大熵模型的代码摘要生成方法,其特征在于:所述步骤1进一步具体为:根据限定的样本模板,用抽象语法树解析代码,根据限定的模板采集训练样本。
3.根据权利要求1所述的一种基于最大熵模型的代码摘要生成方法,其特征在于:步骤2进一步具体为:根据训练样本,用广义迭代缩放算法来构建代码元素分类器。
4.根据权利要求1所述的一种基于最大熵模型的代码摘要生成方法,其特征在于:所述步骤4进一步具体为:去除获取到的词项中的保留字,并对剩余的词项进行分词和词干化处理。
5.根据权利要求1所述的一种基于最大熵模型的代码摘要生成方法,其特征在于:所述步骤6进一步具体为:根据降噪后的词项的权重和出现次数,用TF-IDF算法对降噪后的词项进行重要性评估。
6.根据权利要求1所述的一种基于最大熵模型的代码摘要生成方法,其特征在于:所述步骤7进一步具体为:根据指定代码摘要中包含的最大词项数、重要性评估以及限定的排序方式,生成代码摘要。
CN201510127501.0A 2015-03-23 2015-03-23 一种基于最大熵模型的代码摘要生成方法 Expired - Fee Related CN104750484B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510127501.0A CN104750484B (zh) 2015-03-23 2015-03-23 一种基于最大熵模型的代码摘要生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510127501.0A CN104750484B (zh) 2015-03-23 2015-03-23 一种基于最大熵模型的代码摘要生成方法

Publications (2)

Publication Number Publication Date
CN104750484A CN104750484A (zh) 2015-07-01
CN104750484B true CN104750484B (zh) 2018-07-06

Family

ID=53590239

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510127501.0A Expired - Fee Related CN104750484B (zh) 2015-03-23 2015-03-23 一种基于最大熵模型的代码摘要生成方法

Country Status (1)

Country Link
CN (1) CN104750484B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108491459B (zh) * 2018-03-05 2021-10-26 中国人民解放军国防科技大学 一种软件代码摘要自动生成模型的优化方法
CN109739483B (zh) * 2018-12-28 2022-02-01 北京百度网讯科技有限公司 用于生成语句的方法和装置
CN111625276B (zh) * 2020-05-09 2023-04-21 山东师范大学 基于语义与语法信息融合的代码摘要生成方法及系统
CN112764807A (zh) * 2021-01-12 2021-05-07 山东师范大学 基于多尺度ast和特征融合的代码摘要生成方法及系统
CN113064633A (zh) * 2021-03-26 2021-07-02 山东师范大学 一种代码摘要自动生成方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103123634A (zh) * 2011-11-21 2013-05-29 北京百度网讯科技有限公司 一种版权资源识别方法及装置
CN103744830A (zh) * 2013-12-31 2014-04-23 北京锐安科技有限公司 基于语义分析的excel文档中身份信息的识别方法
CN104142998A (zh) * 2014-08-01 2014-11-12 中国传媒大学 一种文本分类方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103123634A (zh) * 2011-11-21 2013-05-29 北京百度网讯科技有限公司 一种版权资源识别方法及装置
CN103744830A (zh) * 2013-12-31 2014-04-23 北京锐安科技有限公司 基于语义分析的excel文档中身份信息的识别方法
CN104142998A (zh) * 2014-08-01 2014-11-12 中国传媒大学 一种文本分类方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"Improving Automated Source Code Summarization via an Eye-Tracking Study of Programmers";RODEGHERO P et al;《Proceedings of the 2014 36th International Conference on Software Engineering.New York:ACM》;20140607;390-401 *

Also Published As

Publication number Publication date
CN104750484A (zh) 2015-07-01

Similar Documents

Publication Publication Date Title
US11113477B2 (en) Visualizing comment sentiment
CN105243129B (zh) 商品属性特征词聚类方法
Green et al. Parsing models for identifying multiword expressions
US10839155B2 (en) Text analysis of morphemes by syntax dependency relationship with determination rules
CN104750484B (zh) 一种基于最大熵模型的代码摘要生成方法
CN107943911A (zh) 数据抽取方法、装置、计算机设备及可读存储介质
US20200356363A1 (en) Methods and systems for automatically generating documentation for software
US11551151B2 (en) Automatically generating a pipeline of a new machine learning project from pipelines of existing machine learning projects stored in a corpus
Ogren et al. ClearTK: A UIMA toolkit for statistical natural language processing
US20220180317A1 (en) Linguistic analysis of seed documents and peer groups
Cardoso et al. An efficient language-independent method to extract content from news webpages
US11403304B2 (en) Automatically curating existing machine learning projects into a corpus adaptable for use in new machine learning projects
CN115713085A (zh) 文献主题内容分析方法及装置
CN112380848A (zh) 文本生成方法、装置、设备及存储介质
WO2016067396A1 (ja) 文の並び替え方法および計算機
CN110705285A (zh) 一种政务文本主题词库构建方法、装置、服务器及可读存储介质
US20220067576A1 (en) Automatically labeling functional blocks in pipelines of existing machine learning projects in a corpus adaptable for use in new machine learning projects
CN103593427A (zh) 新词搜索方法及系统
CN111062219A (zh) 一种基于张量的潜在语义分析文本处理方法及装置
Kramer et al. Improvement of a naive Bayes sentiment classifier using MRS-based features
CN108733733B (zh) 基于机器学习的生物医学文本分类方法、系统和存储介质
CN113268714B (zh) 一种开源软件许可证条款自动提取方法
CN113868431A (zh) 面向金融知识图谱的关系抽取方法、装置及存储介质
Jebbor et al. Overview of knowledge extraction techniques in five question-answering systems
Bauer et al. Fiasco: Filtering the internet by automatic subtree classification, osnabruck

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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20180706

CF01 Termination of patent right due to non-payment of annual fee