各种来源题目转换思路与处理方法

背景

我们在做题库资源建设时,经常会去采购、对接、调用其他题库的资源(学科网、菁优网等),或者从旧版本升级,其他相关项目数据同步,总是会遇到各式各样的数据格式,笔者在多次数据格式转换处理中,总结了一些题目数据的处理的方法,希望给后续使用者一些帮助。

需要了解的相关知识,对于要转换为的目标结构充分了解,才能更好的进行下一步工作。

准备

在开始之前,需要先了解要做的工作是什么,原始数据是什么格式,目标数据结构要求的字段是否都有,缺少的字段是否可以使用默认值处理,题型如何对应。

如果有信息缺失严重的,可以转换为主观题(这种题型要求信息最少)处理。

如果有比较复杂的题型,比如一个题干多道小题,或者有嵌套关系之类的,考虑是否可以转换为复杂题型处理。

有没有图片,公式是什么格式的,在准备过程中都需要分析好。

如果有图片的话需要下载到本地做对应处理的,不要直接使用第三方的图片地址,这个会与第三方图片资源站产生耦合,那边出问题时会导致图片无法显示。

如果有公式需要转换为svg格式,不要使用tex或者mml之类的语句后续二次渲染(用mathjax或者katex之类的工具在使用时处理),这样会造成使用对接上的困难,而且必须数据加载出来后才能渲染,又会产生耦合。

开始

经过了上述准备分析工作后,我们对于如何转换题目已经有了初步思路了。

具体实操步骤主要分为以下三步:

  1. 数据格式处理与转换
  2. 富文本中的图片转换到本地图片路径或者base64字符串
  3. 公式转换为svg

作为前端,我们可以借助nodejs来在服务端处理,也可以放在浏览器端处理。

一个重要的参考标准就是,第三方数据给出的图片地址有没有允许跨越标识,如果没有,那只能放在服务端,浏览器端不允许使用canvas将跨域图片转换为base64。

  1. 数据格式处理与转换,这个比较简单,纯粹的格式转换与字段对应,这里不多叙述

  2. 富文本中的图片转换到本地图片路径或者base64字符串

    1. 浏览器端

      1. 使用canvas将图片转为base64
      2. 根据需要将图片上传至服务器
      3. 替换原有地址为base64或者服务器相对路径
    2. nodejs

      1. 使用cheerio从富文本中提取需要转换的图片
      2. 使用node-canvas加载图片,并将图片转换为base64
      3. 使用fs将图片保存在服务器的对应文件夹内,或者调用上传接口上传图片,获取图片相对地址
      4. 替换图片路径
  3. 公式转换为svg,需要先分析原始数据中的公式是什么格式的,不同格式使用不同的方法,这里以tex为例

    1. 浏览器端

      1. 需要引入mathjax的tex2svg-full.js
      2. 使用正则提取出公式,调用mathjax的转换方法,转为svg内容,注意额外增加2个属性,方便公式二次编辑 name=”math” data-mce-math=”${latex内容}”
      3. 替换原有公式内容
    2. nodejs

      1. 安装mathjax-node  github.com/mathjax/Mat…   
      2.  使用正则提取出公式,调用mathjax的转换方法,转为svg内容,注意额外增加2个属性,方便公式二次编辑 name=”math” data-mce-math=”${latex内容}”
      3. 替换原有公式内容

到这里,题目转换工作基本上就完成了。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享