刘静
摘 要:标准是为了规范行业秩序,经协商一致制定并由公认机构批准的一种文件。由于标准种类繁多,且以电子文档形式存在,因此标准编制单位在编制新标准时需要手工查找大量相关内容,费时费力。为了提高标准编制效率,本文通过研究国标规定的标准编写的结构和规范,提出一种从半结构化标准中抽取信息的方法。
关键词:标准;信息抽取
1 引言
在信息化建设中,标准的制定和执行起到举足轻重的作用。目前我国已经发布了多项标准,未来计划和新增的标准也会越来越多。信息化标准具有较高的复杂性和相关性,标准编写人员需要全面了解现存标准的相关细节才能确保新编写的标准与现存标准一致。然而现存标准内容繁多,且大都以文档形式存在,标准编写人员手工查阅新旧标准是否一致是一个费时费力的工作。为了解决这个问题,本文研究了从一系列多样化标准中粗略抽取信息的方法,并将抽取结果存于数据库中,从而为标准编写人员提供相关内容的查询和检索帮助,以提高标准的编制效率。
2 标准抽取的总体方法
“标准化工作导则 第1部分:标准的结构和编写”(以下简称“国标”)是中华人民共和国国家质量监督检验检疫总局和中国国家标准化管理委员会发布的国家标准。国标规定了全国各行各业的标准应该具有的结构以及编写规范,是编写新标准时应遵守的基础标准。本文研究的标准符合国标的规定。
国标规定了标准的结构:标准必须包含封面、前言和正文,可以包含引言、附录、参考文献和索引,附录可以有多个。
国标还规定了标准各部分的编排:标准各部分都要从新的一页起排,若有多个附录,每个附录都应另起一页。
国标还规定了标准各部分的格式:封面是标准的第一页,封面上各项信息都有确定位置;正文部分首页首行是标准名称;每个附录部分的首页首行是该附录的编号,例如:“附录A”、“附录B”等;其余部分的首页首行与这个部分的名称相同,例如目次部分首页首行是“目次”二字,前言部分首页首行是“前言”二字。
由于国标规定的标准各部分各有特点,且界限清晰,因此本文抽取时先对标准切分得到各部分,再对各部分分别抽取。
3 标准分块
标准分块时需要知道各部分的开始和结束位置。由于国标规定标准的各部分都要从新一页起排,因此只要知道各部分的开始和结束页码就能确定各部分的范围。
4 标准抽取
4.1 各部分抽取介绍
经过分块后就可以对各部分内容分别抽取。对于封面,国标规定了标准的封面必须包含的内容,以及它们的相对位置,因此利用Word的定位功能和字符串匹配方法就可以得到。前言常常说明了标准的起草单位和起草人,并且常用“本标准起草单位:……”,“本标准主要起草人:……”等句型描述,因此通过模式匹配方法构造模式就可以得到前言包含的信息。引言、参考文献和索引是可选要素,本文将这三部分内容直接存储。正文和附录是一篇标准的核心部分,也是标准抽取时重点关注的部分,本文以正文为例,说明这部分内容如何抽取。
4.2 正文抽取
国标规定标准的正文具有章、条、段、列项这样的层次划分。章是正文内容划分的基本单元,从数字1开始编号。条是章的细分,用点分阿拉伯数字编号,第一层次的条(例如4.1)可分为第二层次的条(例如4.1.1、4.1.2等)。段是章或条的细分,不编号。列项由一段后跟冒号的文字引出,且隶属于该段文字,列项的各项之前有专门的列项符号(“破折号”或“圆点”)。由国标的规定可见正文部分具有树状结构,如图1所示。
正文部分具有树状层次结构,且各层次区别明显,因此本文处理正文时构造了一个树来存储相应内容。本文首先用标准名称作为根节点,然后遍历处理正文的每一个段落。若当前段落的开始部分符合正则表达式“ ”,则表明该部分是章编号,应直接作为根的子节点添加;若当前段落的开始部分符合正则表达式“ ”,则表明这部分是条编号,就要继续分析:例如当前读到的是“3.2”,表明当前内容直接隶属于章节3,且是章节3的第二个子节点,因此从这个树中找到章节3对应的节点,然后将当前内容作为子节点添加;若当前段落的开始部分是列项符号,则表明当前内容是列项,隶属于上一个读到的段落中;若当前段落的开始部分不符合上面三种情况,则表明该段落是普通段,隶属于后序遍历当前树结构时的最后一个节点。正文部分的各个段落遍历完以后,与之对应的树就形成了。从这个树的根节点出发,可以到达叶子结点代表的段和列项,这样,即使在正文部分没有给段和列项明确编号的情况下,通过树状结构也可以知道它们之间的隶属关系,这样以段为单位存储正文部分的内容时就融入了重要的结构信息。
5 实现
本文描述的标准内容抽取方法在Java环境下开发,用到了Java开源项目Jacob,标准抽取结果存储在SQL Server2008中。本文对30个Word形式存在的标准进行抽取,实验结果表明凡是按照国标要求编写的标准都能够被正确抽取。
6 总结
本文先通过对国标规定的标准结构进行分析,提出了标准抽取的总体方法,即先进行切分再分别抽取。接着,对标准切分过程进行了详细说明,通过切分得到标准的各个部分。然后,对标准各部分的抽取方法进行了描述,并重点阐述了正文部分的抽取。最后,在Java环境下实现了本文提出的方法。
[参考文献]
[1]Krishnaprasad Thirunarayan,Aaron Berkovich,and Dan Z.Sokol.An information extraction approach to reorganizing and summarizing specifications,Information and Software Technology[J].2005(47):218-232.
[2]GB/T1.1-2009标准化工作导则,第1部分:标准的结构和编写[S].
[3]李莹.文本病历信息抽取方法研究[D].硕士学位论文.浙江大学,2009.
[4]刘力.科技文档信息抽取与格式化技术研究[D].硕士学位论文,中南大学,2010.