10.5 关系抽取子系统
由于提取关系时需要涉及两个或者两个以上的词语之间的关系。不管是模板方法还是关联规则方法,都需要一对词语同时出现。因此两种方法都需要首先统计词语共现的概率。只有当一对词语同时出现在摘要里面的概率达到了一定程度,才能够确定其具有相关关系。在确定了相关关系的基础之上,再根据模板方法进行模板匹配,从而确定其为等同关系(用、代)还是等级关系(属、分、族)。
10.5.1 功能分析
10.5.1.1 相关关系的抽取
提取出的关系不仅是指新术语之间的关系,还包括新术语与已有术语之间的关系。因此在完成术语提取的过程中,不仅要记录下新术语,同时也需要记录下已有的术语。相关关系抽取的流程如图10-25所示。
图10-25 相关关系提取流程图
如图10-25,数据表1是指提取出的新词数据库表,数据库表的存储在上一阶段新术语的提取中已经完成。数据表包含的信息包括新词所在的所有文献编号,已经总共出现的频次。从这张数据表中可以查询到新词所在的所有文献编号。
数据表2是指标题,关键词以及摘要中出现的词汇以及这些词语所在的文献编号,出现的频次,包括新词汇和旧词汇。根据上一步骤查得的所有文献编号,可以查到这些文献中同时存在的其他的词汇,并统计共同出现在同一篇文献的次数,记录这些共现词汇对,共现所在的文献编号以及共现频次。
比较这些频次,如果其频次达到了指定的标准,那么我们认为这些词汇对之间存在着相关关系。但是这种关系中也可能包含等级关系与等同关系,因此必须将等级关系和等同关系排除掉才可以将这些词汇对作为候选相关关系提供给专家进行评审。我们所采取的方法是先将所有的词汇对都以“参”的关系存储到数据库中,在完成等级关系与等同关系的判定后,将属于等级关系和等同关系的词汇对关系修改成“属或分或族”以及“用或代”。
10.5.1.2 等级关系与等同关系的抽取
在完成“参”的关系的基础上,只需要对这些关系进行等级关系及等同关系匹配即可。根据前面的理论,我们对等级关系与等同关系采取模板方法,即利用模式匹配的方法来解决。可以采用正则表达式的方法来实现匹配。因此我们需要两个模式文档,其保存的内容为转化后的模板正则表达式。如,等同关系的一种就可以表示为.* NP*.*[亦称|又称|或称|俗称|也称|又叫|也叫|亦叫|或叫]NP*,其中.*表示任意字符,NP*表示需要抽取其关系的术语,.* NP*.*表示术语前面和后面都可以出现任意字符即任意文字对其进行修饰补充或者解释说明。[亦称|又称|或称|俗称|也称|又叫|也叫|亦叫|或叫]表示为亦称与又称,或称,俗称,也称,又叫,也叫,亦叫,或叫为或的关系,只要出现了【】中的任意一个词语,那么给定的两个术语满足这个正则表达式,就可以说明这两个术语是等同关系。图10-26为判定术语等级关系与等同关系的流程图。
从图10-26中可以看到,需要等级关系模式与等同关系模式两种文档,而文档中的模板则是一条一条语句的正则表达式,因此需要找到术语对共现的文献,如果术语对恰好同时出现在同一条语句中,那么就可以将这条语句分别与这个文档中的所有模板进行匹配,如果满足两个文档中的任意一个模板,那么就说明该术语对很有可能是所属模板的关系。对于这些可能术语等级关系及等同关系的可能性进行统计,当这些频次超过了指定的阈值,那么就可以确定该术语对是等级关系或者等同关系,并将数据库中的关系改成“属或分或族”或者“代或用”。如果频次未超过指定的阈值,那么不能将术语对确定为等级关系或者等同关系,只能确定为相关关系。如果对于术语对所在的所有语句都无法满足文档的模板,那么也只能认定该术语对就是相关关系,而非等级关系和等同关系。如果对于所有的术语对同现文献,术语对并没有同时出现在同一条语句中,同样只能认定该术语对就是相关关系,而非等级关系和等同关系。
图10-26 等级关系与等同关系提取流程图
10.5.2 问题域分析
通过上一节对功能的需求可知。叙词之间的关系有三种:相关关系、等级关系和等同关系。如果两个术语,包括新术语和新术语、新术语和旧术语,共同出现在同一篇文献的频率超过某一设定的阈值,则认为这两个术语之间存在相关关系。而等级关系和等同关系是在两词是相关关系的基础上,利用各自的模板进行模板匹配来确定的。所以首先应将术语与其他术语,以及两者之间共同出现的频率获取。然后根据共同出现的频率的大小判断术语与术语之间是否存在相关关系。最后利用模板的方法来判断术语与术语之间是否存在等同关系或等级关系。所以关系抽取部分的用例有: relationExtract(关系抽取),包括四个子用例: generateRelation(生成词间关系)、confirmRelatedRelation(确定相关关系)、confirmEquivalentRelation(确定等同关系)、confirmRankRelation(确定等级关系)。而关系抽取是在概念获取完成后,由系统按照设定的周期自动执行的,故关系抽取部分的Actor是system(系统)。
1.识别参与者
根据上面的分析可知,关系抽取部分的参与者是system,对其的描述如下:
system描述: system按照设定周期在完成概念获取之后自动执行关系抽取的全过程。
2.识别用例
通过以上分析,可知关系抽取部分的用例如下:
(1) relationExtract(关系抽取)
该用例对概念获取产生的叙词以及HTML解析产生的反映文献主题的信息进行处理,得出叙词与叙词之间的相关关系、等同关系或等级关系。
(2) generateRelation(生成词间关系)
该用例是relationExtract的一个子用例,也是其实现的一个环节。用例generateRelation实现从术语信息集和文献信息集中抽取出术语与术语之间共同出现在同一文献中的频率。
(3) confirmRelatedRelation(确定相关关系)
用例confirmRelatedRelation(确定相关关系)是用例relationExtract的子用例。当用例generateRelation(生成词间关系)完成时,用例启动,实现术语与术语间相关关系的确定。
(4) confirmEquivalentRelation(确定等同关系)
用例confirmEquivalentRelation(确定等同关系)是用例rela tion Extract的子用例。该用例用来确定术语与术语之间的等同关系。
(5) confirmRankRelation(确定等级关系)
用例confirmRankRelation(确定等级关系)是用例relationExtract的子用例。该用例用来确定术语与术语之间的等级关系。
通过对参与者和用例的分析,可得出关系抽取的用例图,如图10-27。
图10-27 关系抽取用例图
3.用例的事件流描述
用例“relationExtract”(关系抽取)可用如图10-28的活动图进行描述。关系抽取是利用前面研究过的抽取方法对网络资源爬取和概念获取过程产生的结果进行处理,识别出术语与术语之间的关系,并将该关系和相关参数保存起来。所以关系抽取的主要过程可以是首先对网络资源爬取和概念获取产生的信息进行处理,识别出可能存在关系的术语对,得出术语与术语共同出现于同一篇文献的频率。然后根据判断相关关系、等同关系和等级关系的方法,分别对上一过程产生的术语对进行判断,识别出相关关系、等同关系和等级关系。
“relationExtract”(关系抽取)的活动图
图10-29 用例“generateRelation”(生成词间关系)的活动图
例“generateRelation”(生成词间关系)可由活动图10-29进描述。用例“生成词间关系”的过程主要由三个循环实现。首先要将所有新术语获取到,循环处理各个术语。然后在新术语的处理过程中,要将术语出现的文献信息全部获取到,形成文献集合,循环处理各个文献。最后在单个文献的处理过程中,要查取到存在于该文献中且已经通过概念抽取保存了的术语,形成术语集合,循环处理术语集合中的各个术语。通过这三个循环就可以识别出新术语与其他术语共现的文献以及它们共现的频率。在第三个循环体里实现术语对的定义和共现率的更新。
对用例“confirmRelatedRelation”(确定相关关系)实现过程的描述如图10-30。系统启动用例,实例化类ProcessRelation,调用方法confirmRelatedRelation()实现术语之间相关关系的确定。在confirmRelatedRelation()的方法体中,首先实例化类RelationDao,调用方法getRelationByFrequence(frequence: float),根据所设定的相关关系确定所需的术语对的共现率阈值,查询共现率达到了阈值的关系信息,形成相关关系集。则认为该集合中的关系都为相关关系。最后调用方法updateRelationType(),将该相关关系集中的关系记录的关系类型更新为“参”。
10-30 用例“confirmRelatedRelation”(确定相关关系)的活动图
10-31 用例“confirmEquivalentRelation”(确定等同关系)的活动图
用例“confirmEquivalentRelation”(确定等同关系)可用图10-31来进行描述。该用例的实现可以用三个循环来完成。首先,获取确定为相关关系的术语对,形成关系集,对关系集中的每一个记录进行处理,直到关系集中的每条记录都被处理过。其次,在处理每条记录时,获取该记录所表示的两个术语共同出现的文献,并形成文献集合,对文献集合中的每一个记录进行处理,直到集合中的每条记录都被处理过。最后,在对文献的记录进行处理时,要获取文献中同时出现当前的两个术语的句子,并形成句子集合,对句子集中的每个句子进行处理,直到集合中的每条记录处理完成。对单个句子的处理即是使用等同关系模板来匹配句子,如果匹配成功,则认为当前的两个术语之间存在等同关系,则更新关系集,将关系类型更新为“用”或者“代”(具体是“用”还是“代”需依据匹配的等同关系模板是“Y”还是“D”,如果匹配的是“Y”,则选择“用”,否则选择“代”)。如果匹配失败,则继续匹配句子集中的下一条记录。
图10-32 用例“confirmRankRelation”(确定等级关系)的活动图
用例“confirmRankRelation”(确定等级关系)可来进行描述。该用例的实现可以用三个循环来完成。首先,获取确定为相关关系的术语对,形成关系集,对关系集中的每一个记录进行处理,直到关系集中的每条记录都被处理过。其次,在处理每条记录时,获取该记录所表示的两个术语共同出现的文献,并形成文献集合,对文献集合中的每一个记录进行处理,直到集合中的每条记录都被处理过。最后,在对文献的记录进行处理时,要获取文献中同时出现当前的两个术语的句子,并形成句子集合,对句子集中的每个句子进行处理,直到集合中的每条记录处理完成。对单个句子的处理即是使用等级关系模板来匹配句子,如果匹配成功,则认为当前的两个术语之间存在等级关系,则更新关系集,将关系类型更新为“属”或者“分”(具体是“属”还是“分”需依据匹配的等同关系模板是“S”还是“F”,如果匹配的是“S”,则选择“属”,否则选择“分”)。如果匹配失败,则继续匹配句子集中的下一条记录。
10.5.3 静态结构模型
1.定义类
关系抽取实现了从术语信息集和文献信息集中识别出新术语与其他术语组成的术语对,统计出术语与术语共同出现在同一篇文章的频率,并利用在前面章节所探讨的关系抽取方法,识别出术语与术语之间的相关关系、等同关系和等级关系。并将识别出的两术语,术语的共现率,术语之间的关系类型等信息保存入数据库。故首先,由于关系抽取涉及了从数据库获取术语信息集合文献信息集的过程,所以应需要类ItemsDao、New ItemsDao、ExtractorContentDao分别实现术语、新术语、文献信息的数据库操作。其次,由于识别出的术语之间的关系等信息需要更集中的表示,且需要对数据库的操作,所以应具有类Relation以表示术语之间的关系等信息,应具有类RelationDao以实现对术语之间关系等信息的数据库的操作。最后,因为关系抽取是按一定的过程和方法来实现的,且在关系抽取过程中存在关系模板匹配的过程,所以可以用类ProcessRelation来实现关系抽取的过程,用类MatchRelation实现关系模式匹配的过程。
(1)类ItemsDao
类ItemsDao用来实现对数据库中存储的抽词产生的术语及相关信息的添加记录、更新记录、查询记录等操作。该类的属性如下:
sql: String
表示用以操作数据库中数据的SQL语句。
connectDB: ConnectionToDB
connectDB是ConnectionToDB类的对象,具有实现对数据库中的数据进行增、删、改、查操作的方法。用在此类中用来辅助实现对Items的基本数据库操作。
items: Items
表示要执行数据库操作的Items对象。
因该类要实现对Items的增加、更新和查询操作,故类具有以下方法:
insertItems(items: Items)
updateItems(items: Items)
getItemsByItem(items: String): Resulted
getAllItems(): Resulted
getItemsByEcid(ecid: String): Resulted
(2)类New ItemsDao
类New ItemsDao用来实现对New Items的数据库操作。包括New Items记录的添加和New Items的查询。故类的属性和方法如下:
sql: String
表示用以操作数据库中数据的SQL语句。
connectDB: ConnectionToDB
connectDB是ConnectionToDB类的对象,具有实现对数据库中的数据进行增删改查操作的方法。用在此类中用来辅助实现对Items的基本数据库操作。
insertNew Items(items: New Items)
getAllNew Items()
(3)类ExtractorContentDao
类ExtractorContentDao用来实现对数据库中的反映文献主题的标题、关键词、摘要、学科导航的读取操作。故ExtratorContentDao的方法如下:
getExtractorContentById(id: Int): ResultSet
getExtractorContent(): ResultSet
(4)类Relation
类Relation用来表示术语与术语之间形成的术语对,术语之间的关系类型,术语之间的共现率等信息。故类Relation应具有如下私有属性:
id: int
subjectItem: String
related Item: String
ecids: String
coFrequence: float
relationType: String
为实现对私有属性的基本读出写入操作,类Relation还应有各属性相对应的getXX()和setXX()方法。为方便类对象的初始化,类还有构造函数Relation(id: int,subjectItem: String,relatedItem: String,ecids: String,coFrequence: float,relationType: String)和Relation(resultSet: ResultSet)。
(5)类RelationDao
类RelationDao用来实现对Relation对象的数据库操作。所以应具有表示实现数据库增删改查操作的sql语句的私有属性sql,还应具有执行sql语句的数据库操作对象connectDB。所以类RelationDao应具有的私有属性如下:
sql: String
connectDB: ConnectionToDB
为实现对数据库的操作,应具有以下方法:
getRelation(relation: Relation): ResultSet
updateRelation(relation: Relation)
(6)类ProcessRelation
类ProcessRelation用来实现关系抽取的全过程,所以应具有以下方法:
processRelation()
generateRelation()
confirmRelatedRelation()
confirmEquivalentRelation()
confirmRankRelation()
(7)类MatchRelation
类MatchRelation用来实现句子与术语对的模式匹配。所以类应具有方法:
matchYrelation( nucWord: String,objWord: String,charSequence: String): Boolean
//nucWord,objWord,charSequence分别表示新术语,关系对象,匹配句子
//匹配Y关系
matchDrelation( nucWord: String,objWord: String,charSequence: String): Boolean
//匹配D关系
matchSrelation( nucWord: String,objWord: String,charSequence: String): Boolean
//匹配S关系
matchFrelation( nucWord: String,objWord: String,charSequence: String): Boolean
//匹配F关系
2.类图
通过对关系抽取各用例过程的分析,可以识别出类、类的结构以及类与类之间的关系。关系抽取的类图如图10-33所示,它反映了各类之间的关系。类ProcessRelation依赖于类RelationDao、MatchRelation、ItemsDao、NewitemsDao、ExtractorContentDao,类RelationDao依赖于Relation。
3.数据库设计
关系抽取部分涉及了对文献信息、新术语、术语的基本读取操作,然因这些实体在概念获取部分已纳为数据库设计的一部分,这里就不赘述了。因关系抽取实现后应将术语与术语之间形成的术语对、术语之间的关系类型、术语之间的共现率等信息存入数据库,并且可以将这些信息看做是一个关系实体对象,故应设计表relation(见表10-4),以表示、读取、记录术语间的关系。
图10-33 关系抽取的类图
表10-4 表relation
10.5.4 动态行为模型
关系抽取部分的用例有: relationExtract(关系抽取),包括四个子用例: generateRelation(生成词间关系)、confirmRelatedRelation(确定相关关系)、confirmEquivalentRelation(确定等同关系)、confirmRankRelation(确定等级关系)。对这些用例的实现过程所涉及的对象与对象之间信息的交换可用时序图描述如下:
10-34 “relationExtract”(关系抽取)的时序图
对用例relationExtract(关系抽取)的实现过程的描述如图10-34所示。当概念获取过程完成时,用例启动。因关系抽取过程是由系统根据设定的固定周期按周期自动执行的,所以该用例由系统system启动。首先实例化类ProcessRelation,调用方法processRelation(),实现关系抽取的全过程。在processRelation()的方法体中,依次调用方法generateRelation()、confirmRelatedRelation()、confirmEquivalentRelation()、confirmRankRelation(),实现关系的产生和各种关系确立的全过程。
图10-35 “generateRelation”(生成词间关系)的时序图
对用例generateRelation(生成词间关系)实现过程的描述如图10-35所示。实例化类ProcessRelation,调用类的方法generateRelation(),实现新术语和其他术语组成的术语对的识别以及统计出该术语对的共现率。在processRelation的方法体中,首先实例化类New ItemsDao,调用方法getAllNew Items(),从数据库中获取所有新术语信息,形成新术语集。然后依次针对新术语集中的每个术语调用方法getEcidsByNew Item(),获取包含该新术语的文献,形成文献集。然后再依次针对该文献集中的每个文献调用方法getItemsByEcid(),获取从该文献抽取出的所有术语信息,形成术语集。最后根据当前的新术语、术语和文献信息形成术语对,并更新关系信息集中的共现率。整个过程涉及了三个循环,通过这三个循环可以实现对所有新术语及其相关的文献和术语的抽取,从而保证了术语关系识别的完整。
对用例“confirmRelatedRelation”(确定相关关系)实现过程的描述如图10-36。系统启动用例,实例化类ProcessRelation,调用方法confirmRelatedRelation()实现术语之间相关关系的确定。
图10-36 “confirmRelatedRelation”(确定相关关系)的时序图
在confirmRelatedRelation()的方法体中,首先实例化类Relation-Dao,调用方法getRelationByFrequence(frequence: float),根据所设定的相关关系确定所需的术语对的共现率阈值,查询共现率达到了阈值的关系信息,形成相关关系集。则认为该集合中的关系都为相关关系。最后调用方法updateRelationType(),将该相关关系集中的关系记录的关系类型更新为“参”。
图10-37 “confirmEquivalentRelation”(确定等同关系)的时序图
对用例“confirmEquivalentRelation”(确定等同关系)的实现过程如图10-37所示。当用例“confirmRelatedRelation”(确定相关关系)完成时,用例启动,调用ProcessRelation的confirmEquivalentRelation()实现术语对之间等同关系的判断和确立。在confirmEquivalentRelation()的方法体中,首先实例化类RelationDao,调用方法getRelationsByType()从关系集中抽取关系类型为“参”的关系,形成关系集。然后依次针对关系集中的每一个关系记录调用方法getEcidsByRelation(),实现从当前关系记录获取同时出现术语对的文献,形成文献集。然后对文献集中的每一条文献调用方法ExistInOneSentence(),判断当前文献中是否存在句子同时包含当前关系的两个术语,如果存在,则将这些句子作为句子集返回。然后循环处理句子集中的句子,对术语,对象术语和句子调用方法matchYrelation(),判断当前句子中的两个术语是否满足关系“用”,调用方法matchDrelation(),判断当前句子中的两个术语是否满足关系“代”。如果满足关系“代”,则以“代”更新当前关系记录的关系类型;如果满足关系“用”,则以“用”更新当前关系记录的关系类型。
对用例“confirmRankRelation”(确定等同关系)的实现过程如图10-38所示。当用例“confirmEquivalentRelation”(确定相关关系)完成时,用例启动,调用ProcessRelation的confirmRankRelation()实现术语对之间等同关系的判断和确立。在confirmRankRelation()的方法体中,首先实例化类RelationDao,调用方法getRelationsBy-Type()从关系集中抽取关系类型为“参”的关系,形成关系集。然后依次针对关系集中的每一个关系记录调用方法getEcidsByRelation(),实现从当前关系记录获取同时出现术语对的文献,形成文献集。然后对文献集中的每一条文献调用方法ExistInOneSentence(),判断当前文献中是否存在句子同时包含当前关系的两个术语,如果存在,则将这些句子作为句子集返回。然后循环处理句子集中的句子,对术语,对象术语和句子调用方法matchSrelation(),判断当前句子中的两个术语是否满足关系“属”,调用方法matchFrelation(),判断当前句子中的两个术语是否满足关系“分”。如果满足关系“属”,则以“属”更新当前关系记录的关系类型;如果满足关系“分”,则以“分”更新当前关系记录的关系类型。
图10-38 “confirmRankRelation”(确定等级关系)的时序图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。