基于POI的论文格式检错与部分修改软件的实现
2020-08-06邓鹏杰张锡冯向萍
邓鹏杰 张锡 冯向萍
摘要:毕业论文是高等院校教育计划的重要部分,其格式要求非常严格,一直以来都是人工审查的,费时费力。在对word文档的结构及其具体实现进行深入研究的基础上,使用Java实现了基于Apache POI的论文格式检错及部分修改软件。该软件将待检测论文格式和预先设定的论文格式进行比较,实现对论文的内容与格式检测,以及部分格式的自动修改,不能自动修改的则生成详细的错误说明文件。
关键词:毕业论文;POI;格式检错;Java;Word;XML
中图分类号:TP311 文献标识码:A 文章编号:1006-8228(2020)07-50-03
0引言
随着网络技术与信息化技术的普及与发展,各高校的学生已普遍使用MicrosoftOfficeWord文档完成毕业论文的撰写,每所高校的教务管理部门对毕业论文的撰写格式和文献的引用方面都有明确的要求,长期以来,论文格式的检查主要由学生本人、毕业设计指导教师或者专职人员审核,这种手工操作方式费时费力,所以开发一个可以自动进行格式检错与修改的软件是做好人工论文格式检查的最优解决方案。
2017年叶秀云,刘德正的研究生学位论文格式自动检测系统设计与实现研究了鉴于论文格式检测的背景与现状,但是没有对论文的格式错误进行指出与部分纠正。在前人研究基础上,本文使用POI工具包开发了一个可以对确定论文格式的毕业论文进行格式检测与部分修改的软件,为论文格式审查工作人员减轻负担。
1Word文档的分析及研究
目前Word文档使用的是基于微软提出的国际文档格式标准OOXML为底层资源存储的,为了便于分析,可以直接把docx文件以zip方式解压,解压出来的文件结构如图所示。其中为本文用户存储的数据主要是在word文件下,用户文字与排版数据主要在document,xml文件中,其他xml文件是辅助document.xml排版的文件,其内部资源结构如图l所示。
整个document.xml文件内容是层级分布嘲的,按照最近原则来对文本的内容与样式进行修饰。
document下一级是p标签或tbl标签。tbl标签下包含的是表格,p下包含的是文本内容及文本修饰。p标签内有pStyle,对整个p进行修饰,然后可能会有hyperlink标签,此级标签一般将本p的内容封装,有此标签,则说明此p是对下文的引用,即:可能是文档的目录。p下一级是r级。下面有t标签一文字内容,instrText标签一引用的标记文本,fldChar标签一规定目录后面连续多个点的格式,成对的bookmarkStart与bookmarkEnd-用于和引用对应,drawing标签一图片资源,obiect标签一其他内容。
由于所有的内容与修饰标签是按照层级的结构组织起来的,而且是按照最近原则来修饰的。在做检测模块时,可以使用层级向上检测的方法检测最终的显示字体,在做修改模块时,可以直接修改最底层层级上的的属性从而达到修改最终显示字体的目的。
2相关技术说明
目前Word使用的OOXML文件的格式来组织文档的资源与内容的,所以本文在实现对论文的格式检测的时候,需要使用到对OOXMLt21文件进行解析的工具。Apache维护的POI可以对OOXML进行解析,还可以提供直接解析Word的一些工具,支持XML块儿修改等相关处理,在获取到源文档的路径之后可以使用POI提供的XWPFDocument类将其所有的内容传到Java程序中的某个对象,在获取到文档的对象之后可以使用POI提供的其他工具深层解析与分析以及相关处理。POI是完全开源的,它为开发者提供了一套处理OOXML的实用工具,可以让开发者方便地对上层的Word文档内容进行更高级的处理。由于它的开源,可以基于原项目继续深入探索并添加原项目没有的操作为本文所用。
3核心功能实现步骤
用户可以某种方式将自己的文件上传到目标处理的平台,目标平台接收到用户上传的文档之后开始调用核心处理逻辑对文档进行处理。
本软件首先从目录检出每条目录条目,之后将目录使用其中的链接标签对应到正文中去,当用户生成的目录是标准的目录时,即可对正文内容进行划分,之后再进行后续的各种板块的正确性检测与相关修改,最后生成提示文档反馈给用户,用来帮助用户撰写规范的论文,从而在老师这边减少一部分审阅负担。
本软件的大部分逻辑的实现是基于POI包中带的XML解析工具,部分使用XWPF提供的API接口实现,整个实现逻辑框架如图2所示。
(1)若目录中的标题与正文的标题无法匹配,则生成目录错误报告,在报告中加入修改说明,直到修改为正确目录,在进行以下步骤。
(2)若目录匹配成功,将文章中的正文段以及标题划分出来,直接使用目标格式与原文档对比,部分可以直接使用目標格式覆盖,对文本段的rpr标签下的rStyle内容进行修改即可达到对最终显示文本格式的修改。
(3)从文档中检测表格与图,在毕业论文中表名和图名是在表和图的固定位置,当检测到表和图的时候若在相应位置没有发现“表”与“图”文字则加入在反馈条目中加入此图或表的警告条目。
(4)毕业论文的表格采用的都是三线表格式,在Word文档中检测到表的时候直接使用三线表格式对表进行纠正。
(5)毕业论文使用的是GB/T 7714-1987标准的参考文献引用格式,若正确使用了此标准的引用,则使用符合此标准的正则匹配可以正确通过,若未通过,则说明引用有误,将错误引用条目加入警告条目。
(6)最终从各个模块中的反馈条目中提取反馈条目生成反馈报告文件。
4测试结果及分析
4.1运行成效
图3是运行后的回馈文件,可见输出逻辑清晰方便学生纠错。
使用100份真实的大学生毕业论文来用于检测,其中20份结果符合预期情况,80份不符合预期情况,主要问题在于:目录不符合要求,本软件可以在有限范围内,辅助学生修改为正确目录。在完成目录修改后,测试结果如表l所示。
由于WORD的底层实现的复杂程度较高,有以下几种情况无法进行处理。
(1)Word的底层实现中,图片有多种实现方式,且同种效果的底层实现可能是不同的,对于未知的实现方式,不能处理。
(2)在已知的图片实现方式中,由于同种效果的底层实现不同,不能兼容所有的情况。
(3)参考文献采用正则表达式来匹配,对于部分英文文献的引用无法进行匹配。
4.2运行效率
运行时间:60个样本使用时间9780ms;40个样本使用时间6297ms;20个样本使用时间4655ms;10个样本使用时间3245ms。由运行数据可以看到随着样本数目的增加所需要的时间以同数量级增加,其所需时间与具体的文件大小相关,平均大小1.6MB平均使用时间163ms。
5总结
此项目在实现中遇到了不少问题,在前期本文对整个项目实现的逻辑只是有比较模糊的构建,在具体实现上还是没有非常明确的规划,在不断查阅资料、翻阅官方文档过程中,首先对Word文档的结构与调用逻辑有了相对较清晰的认识,在理解了整个Word文档逻辑的基础上,本文重新对实现逻辑与实现步骤进行规整。在程序完成之后再进行大量测试,对更广泛的格式错误类型进行适配,目前可以对大多数文档进行处理,且与预期基本一致,若使用此软件对学生论文进行处理可以极大减轻教师的论文修改负担。
通过实现此项目我们发现,现在的Word文件的内部组织格式与结构还需要进一步的优化,要是有更加清晰且结构分明的框架与组织结构,将会更加方便开发者对Word文档的内容进行各种逻辑处理,同时方便更多使用Word的用户。进而对未来的电子办公系统有更好的推进作用。