一种学位论文格式自动检测方法与流程

文档序号:12719427阅读:来源:国知局

技术特征:

1.一种学位论文格式自动检测方法,其特征在于,步骤如下:

该学位论文格式自动检测方法包括单元定位模块、格式提取模块和对比模块三个模块;

单元定位模块是在学位论文中准确找到特定部分的位置及长度,即对各特定部分进行精确切割,特定部分包括封面、独创性声明、标题、摘要、目录、正文、页眉页脚、表格、图形、参考文献和授权书,单元定位模块包括以下十一个子模块;

(1)封面定位子模块

封面存储在<body>元素的子元素<paragraph>内,为论文的第一页;定位封面时,首先找到整篇文档的第一个包含文字的<paragraph>,若其中的文字与论文模板中论文主标题的文字相同,则说明成功定位到封面;若其中的文字与论文模板中论文主标题的文字不同,则继续遍历之后的<paragraph>;若之后的<paragraph>中存在与主标题字符串相同的<paragraph>,则成功定位到封面;若之后的<paragraph>不能找到与主标题字符串相同的<paragraph>,则说明封面缺失或论文主标题有误;

(2)独创性声明定位子模块

论文独创性声明存储在<body>元素的子元素<paragraph>内,为论文的第二页;定位论文独创性声明时,首先根据封面定位子模块的结果判断论文封面是否缺失,若论文封面未缺失,则找到封面之后的首个包含文字的<paragraph>,若封面缺失,则找到整篇文档的第一个包含文字的<paragraph>;若该<paragraph>中的文字包含“独创性声明”,则说明成功定位到独创性声明;该<paragraph>中的文字不包含“独创性声明”,则继续遍历之后的<paragraph>;若之后的<paragraph>中的文字包含“独创性声明”,则成功定位到独创性声明;若之后的不能找到文字中包含“独创性声明”的<paragraph>,则说明独创性声明缺失或独创性声明标题有误;

(3)标题定位子模块

遍历每一个<p>元素,若该<p>元素包含了<hyperlink>元素或者<bookmarkStart>元素,则将该<p>元素判定为包含了标题的段落;若不包含<hyperlink>元素或<bookmarkStart>元素,则获取<p>元素中的全部文本,采用正则表达式匹配标题的编号以及编号和标题内容之间的空格来确定标题段落;若正则表达式无法匹配,找出文本长度符合标题长度的段落<p>,标记为疑似标题;

(4)摘要定位子模块

中英文摘要存储在<body>元素的子元素<paragraph>内,在定位中文摘要时,首先获取标题定位子模块定位到的全部标题,然后在其中找到“摘要”两个字,获取“摘要”标题所处的<paragraph>在<body>中的位置;然后依次遍历开始位置后的每个<paragraph>;若遍历到一个正文段落,则表示摘要定位成功;若遍历某<paragraph>中的<text>元素,发现其包含的内容为“关键词”,则在下一段终止摘要的处理,摘要定位完成;英文摘要的定位与中文摘要定位方法大致相同,唯一区别在于将“摘要”二字替换为“Abstract”,将“关键词”替换为“Key words”;

(5)目录定位子模块

目录定位分为两种情况:经过“更新域”处理过的目录和未经“更新域”处理的目录;前者包含<Hyperlink>元素,用以标记更新域的位置,该更新域的位置即为目录;后者包含<FieldChar>元素;在定位目录时,遍历<body>中全部<paragraph>,所有包含<Hyperlink>元素及<FieldChar>元素的<paragraph>均为目录;

(6)正文定位子模块

首先寻找到全文的第一个带编号的标题,标题后的第一个段落就是正文开始处;接着过滤中间封装标题的<p>元素和封装图的<p>元素;最后定位正文结束部分,寻找正文结束后出现的第一个没有编号的标题,以此为正文部分的结束定位标志;

(7)页眉页脚定位子模块

首先遍历<p>元素,判断其中是否包含<sectPr>子元素;若包含<sectPr>子元素,找出<sectPr>元素的所有页眉引用<headerReference>子元素,接着找出<sectPr>元素的所有页脚引用<footerReference>子元素,利用页眉引用、页脚引用的标识符定位到相应的页眉<hdr>元素和页脚<ftr>元素;若不包含<sectPr>子元素,遍历下一个<p>元素继续检测是否包含<sectPr>子元素,直到文档最后停止遍历;在<body>元素中寻找保存最后一节属性的<sectPr>子元素,找出最后一节对应的页眉引用和页脚引用,从而定位到页眉<hdr>和页脚<ftr>元素;

(8)表格定位子模块

表格信息存储在<body>元素的子元素<tbl>内,依次遍历每个<tbl>元素,找到表格位置;定位表名的方法如下:首先获取<tbl>的位置信息,即计算这个<tbl>元素是<body>的第几个子元素,然后再检测前一个位置的<p>是否为空段落,空段落体现为一个空行,非空段落作为表名处理;如在该前一个位置没有找到表名,则再向前回溯一个位置继续进行判断;如超过3步回溯仍未找到表名,认为表名缺失或表名的格式有误;

(9)图形定位子模块

找到<paragraph>元素的子元素<run>,图片信息存储在<run>的子元素<drawing>和<picture>中;在定位图片时,遍历所有的<paragraph>,对每一个包含<drawing>或<picture>的<paragraph>,先确定该<paragraph>是<body>的第几个子元素,再查看该<paragraph>的下一个<paragraph>的内容是否为空,若为空则为空行;若不为空再继续判断该<paragraph>内是否包含文字“图”,若包含成功定位到图名,若不包含则认为图名缺失或图名的格式有误;

(10)参考文献定位子模块

参考文献存储在<body>元素的子元素<paragraph>内;在定位参考文献时,首先获取标题定位子模块定位到的全部标题,然后在其中找到“参考文献”四个字,获取“参考文献”标题所处的<paragraph>在<body>中的位置;然后依次遍历开始位置后的每个<paragraph>;若遍历到一个包含文字的<paragraph>,则说明该<paragraph>包含参考文献的内容;若遍历到一个标题段落,则说明参考文献内容结束,定位完成;

(11)授权书定位子模块

授权书存储在<body>元素的子元素<paragraph>内,为论文的最后一页;定位授权书时,首先找到参考文献结束的位置,然后找到该位置之后第一个包含文字的<paragraph>;若其中的文字包含“授权书”,则说明成功定位到授权书;若其中的文字不包含“授权书”,则继续遍历之后的<paragraph>;若之后的<paragraph>中的文字包含“授权书”,则成功定位到授权书;若之后不能找到文字包含“授权书”的<paragraph>,则说明授权书缺失或授权书标题有误;

格式提取模块为获取论文各特定部分的样式;对于学位论文的每个特定部分,在格式提取模块中都有对应的属性配置文件和提取算法;格式提取模块根据该特定部分属性配置文件中的配置信息,调用该特定部分的提取算法来提取待检测学位论文的格式;格式提取模块包括段落属性提取子模块和特殊格式属性提取子模块;

(1)段落属性提取子模块

待测学位论文的每个特定部分都具有段落属性,段落属性提取是所有特定部分的共性工作,由段落属性提取子模块完成;在OpenXML中,典型的段落属性有:字体、字号、段间距;

①字体

依次遍历每一个<p>元素,按照样式的层次结构依次提取字体样式,获取到中英文的字体;检测段落是否为全英文、全中文或者既有中文又有英文,若是全英文,舍弃提取到的中文字体样式,不能用于对比模块;若是全中文,舍弃提取到的英文字体样式,不能用于对比模块;若既有中文又有英文,提取到的中文英文字体样式全部保存;

②字号

首先按照样式的层次结构获取<sz>的属性Val的值,计算得到以磅为单位的字号大小;然后参考字号对照表得到字号和磅数的对应关系,得到实际字号;将字号保存用于对比模块;

③段间距

段前距离信息从<spacing>元素的before和beforeLines属性中提取;首先依据样式的层次结构找到<spacing>元素;若该元素包含beforeLines属性,获取该属性对应的属性值,计算得到以行距倍数表示的该段落的段前距离;利用<sectPr>元素的子元素<docGrid>的linePitch属性获得一行的磅数,统一换算成以“磅”为单位的段前距离;若不包含beforeLines属性,则获取before属性的属性值,计算得到以“磅”为单位的段前距离;

段后距离信息从<spacing>元素的after和afterLines属性中提取;首先依据样式的层次结构找到<spacing>元素;若该元素包含afterLines属性,获取该属性对应的属性值,计算得到以行距倍数表示的该段落的段后距离;换算成以“磅”为单位的段后距离;若不包含afterLines属性,则获取after属性的属性值,计算得到以“磅”为单位的段后距离;

行距样式信息从<spacing>元素的lineRule和line属性中提取,lineRule保存的是解析line的方法;首先依据样式的层次结构找到<spacing>元素;若lineRule为auto或省略,则此时提取的结果为以行距倍数表示的该段落的行距;若lineRule属性的值为atLeast或为exactly,此时提取的结果以磅为单位;与段前距一样,统一转换为以磅为单位方便对比;

(2)特殊格式属性提取子模块

特殊格式提取子模块用于处理除段落属性之外的其他格式提取问题,包括参考文献样式提取、图和表所在章节的标题名称提取等,这些格式要求在OpenXML中并没有明确的元素对应,需采用特殊方式提取;

①参考文献格式提取

不同类型的参考文献书写格式不同,需先确定每条参考文献属于哪种类型,然后才能进行详细格式分析;首先利用正则表达式匹配参考文献的标志代码,根据标志代码确定参考文献的类型;若无法匹配,说明此条参考文献缺少标志代码,保存错误信息后,继续下一条参考文献格式的提取;若匹配成功,接着以中括号为分割点把该条参考文献分割成几部分,检测作者、出版社、出版年份、期刊号格式是否满足要求;接下来获取参考文献的编号样式,判断参考文献的编号是否连续,若不连续,保存错误信息,若连续,进入下一步;最后统计参考文献条目的数目,保存起来用于对比模块;

检测参考文献连续性的方法如下:首先记录并维护参考文献的正确编号值,即编号为从1开始的连续自然数,每次检测到新的参考文献条目后此值加1;接着判断此参考文献是手动编号还是自动编号,若是手动编号,利用正则表达式获取编号,然后判断是否和正确编号值相同,若是自动编号只需检测自动编号开始的参考文献编号是否和正确编号值相同;

②图和表所在章节的标题名称提取

首先用链表保存章节标题所在的段落的位置信息,即索引值;然后获取图、表的索引,用图、表的索引值和链表中的各个值依次比较,直到链表中的值大于图、表的索引值为止,则链表中的前一个数值就是该图、表所在章节标题的标题位置;最后根据此索引即可得到标题名称;

对比模块是将格式提取模块提取出的待测论文中的格式特征与论文模板中的规则进行对比,分析二者是否一致,从而验证待测论文格式是否正确,并将对比结果不一致格式问题输出到检测报告中;该模块分为规则配置文件、规则对比子模块、报告生成子模块三个部分;

(1)规则配置文件

规则配置文件包含了模板论文规定的规则,是检测待测论文正确与否的标准;规则配置文件的内容按照封面、独创性声明、标题、摘要、目录、正文、页眉页脚、表格、图形、参考文献、授权书十一个特定部分进行配置;在调用规则配置文件时,首先由单元定位模块确定当前检测的位置在论文中所属的部分,然后检测该部分是否已存在xml格式的配置文件,若存在,则进入规则对比子模块;若不存在,则说明当前部分没有设置格式要求,结束当前部分的检测;

(2)规则对比子模块

规则对比子模块是将待测论文的格式特征与规则配置文件配置的规则进行对比,检测格式提取模块提取出的待测论文的格式特征的正误;在进行对比时,获取单元定位模块的结果,判断当前要检测的段落是待测论文的哪一部分,在规则配置文件中找到模板论文相应的规则,将格式提取模块提取到的该部分的格式特征与相应的规则配置文件中的规则进行对比,若该格式特征与规则配置文件中的规则一致,则说明该格式正确;反之该格式特征错误;

(3)报告生成子模块

首先获取生成报告的保存路径,若用户未自定义,默认路径设置为该待测论文的上传路径;接着获取在规则配置文件中保存的所有待检测的特定部分的节点信息,依次遍历每个节点;获取节点中保存的该节点对应的名称,从而找到对应的错误信息的保存位置;将寻找到的错误信息编号后保存到检测报告中,最终生成一份txt类型的检测报告。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1