浅谈题库试题录入之Word自动识别

5 评论 4776 浏览 4 收藏 8 分钟

编辑导语:题库录入对于题库的质与量都具有重要意义,Word文件导入是效率较高的录入方式,本文将重点介绍Word文件自动识别的具体实现方法,一起来学习一下吧~

一、前言

试题的录入功能对于题库来说是核心功能,直接关系到题库的质与量。 录题功能是否高效直接影响题库中题目数量的多少,同时也决定着题目的质量的高低。

目前的录题方式以手动录入和文件导入为主,而文件导入格式又以Word和Excel为主。手动录入和Excel文件导入这两种录入方式效率低,对于存在公式的试题处理十分麻烦,而Word文件导入的录入方式在效率方面完胜前两种,并对于公式也有着很好的兼容处理。

本文将重点介绍Word文件自动识别的具体实现方法。

二、文档转换工具的选择

Word解析首先需要将其转化成题库需要的格式,那么选择好的转换工具将是整个文件识别的关键。

对比了Word2LaTeX,Pandoc和各种语言自带的模块及库之后,选择Pandoc作为Word文件解析的工具。选择的理由是开源且支持多种格式。

Pandoc被誉为转换领域中的“瑞士军刀”,可以支持大量标记语言之间的格式转换,例如 Markdown 、Microsoft Word、PowerPoint、Jupyter Notebook、HTML、PDF、LaTeX、Wiki、EPUB 格式之间的相互转换,感兴趣的朋友可以去官网了解。

三、LaTeX/Markdown

文件转换工具选择好之后,就要确定使用哪种格式作为最终入库的格式。手动录入和Excel导入采用的是HTML格式入库,但是HTML对于理科的公式处理效果不太理想。调研完目前的几种主流的格式之后,发现LaTeX格式最为合适。在我的上一篇文章中也具体说明了选择LaTeX的原因,有兴趣的小伙伴可以看看。

针对之前的业务场景,文科学科的试题有着字体(宋体,楷体,仿宋和黑体)需求,还要支持文字下方加点兼容下划线,所以就采用了文科试题转换成Markdown格式,如果没有这些需求,可以统一处理成LaTeX格式。

四、公式识别

Word中通过公式编辑器MathType插入的公式都是以wmf格式的图片呈现的,然而在常规业务场景下除了公式图片外是不会添加wmf格式的图片的,这样就保证了公式图片的独特性。

首先找到所有的wmf图片以及图片对应的Rid(word图片对象的编号)、位置以及宽高属性,通过程序将xml文件中对应对象添加特殊标记来实现自动给公式打标签的功能,最后在导入Word时将上述图片属性组合成LaTeX格式并替代原先的特殊标记。

找到的wmf图片在导入试卷之后异步调用第三方公式OCR软件Mathpix Snip,可以识别图片中的公式并转成LaTeX格式并返回,替换成原先的图片地址就可以实现公式的识别。

公式识别

五、标签识别

标签识别是经历了一些优化的历程,主要是从标签识别-标签补充-标签简化这三个阶段进行。

1. 标签识别

除了公式之外,其它的内容都是通过特征进行识别的,比如题型,分数,难易度等。这些都是试题的属性,也是区别于试题内容之外需要识别的,但是程序是不知道这些属性如何区分,所以需要给它们增加特殊标记(以英文符号[]作为标记,例如:[题型])。

2. 标签补充

为了达到Word中的排版效果,比如段落的首行缩进,标题正文的字体区别,居中居左居右等,就需要在Word中加入对应样式的标签。后期增加了将近10多个标签,效果还是不错的,但是效率却明显的下降了。由于每增加一个标签,都会直接影响教研老师的效率。

3. 标签简化

想要达到既能达到Word的排版效果,又能保证录题的效率,团队做出了很多的尝试,最终通过研究Word原始XML文件,完成大部分属性的自动识别,只需要教研老师在导入文件中打上题型的标签就可以直接入库。

识别后的效果展示

六、总结

在整个项目中,从一开始的技术选型,工具选择,迭代优化,到最后实现录题效率的极大提升,经历了不少的困难。项目一开始的时候其实是摸黑前行,找不到突破的方向,包括后期的效率提升方面,时间和业绩的压力导致内部人员都产生过动摇的念头,大家都在疑问到底能不能实现。但是我深知这个功能一旦实现了,将会给教研老师省去很大一部分的时间,那么它的价值就是不言而喻的。

Word自动识别要想达到很好的排版效果,接近Word原排版样式,是需要对细节有着严格要求的,中间的难点问题是需要耐住性子,沉下心来一点点的去发现并攻克,借用曾国藩的一句话就是“结硬寨,打呆仗”。的确,如果没有这样的攻坚态度是做不出来创新的。

在此,将这个功能的实现分享给大家,希望能对Word自动识别方面感兴趣的小伙伴们有一定的帮助,也希望大家共同探讨。

 

本文由 @一条酸奶中的🐟 原创发布于人人都是产品经理,未经许可,禁止转载

题图来自Unsplash,基于CC0协议

给作者打赏,鼓励TA抓紧创作!
更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 如何通过程序实现难度、知识点这些属性的标签呢?

    回复
    1. 两种方式:
      1. 人为手动在Word中增加相应的标签,入库时程序校验识别
      2. 题目先入库,再在题库里给题目打难度和知识点等标签

      回复
  2. 听君一席话,听君一席话。自动识别体现在哪里?

    回复
    1. 整个识别过程除了简单的人为预处理,其它的都是通过程序实现的

      回复
    2. 抛开内容不说,你说的都对。

      回复