最近在处理几套小升初数学试卷,原件是PDF版本,存在大量的数学公式,需要转化为可编辑的Word。
以前的PDF文件转Word方法是用OCR截图识别,但该方法在公式识别效果很差,公式基本要手动,非常耗时。
所以考虑用开源模型对应数学公式的识别。
于是我尝试了一种新的方式
我找了一套基于文档结构解析的开源工具(MinerU),再配合本地Python脚本,把整个流程做成了一个自动化处理工具。
核心思路很简单:
不再只做“文字识别”,而是做“文档结构解析 + 数学公式识别 + 重建Word”
也就是说,它不是在“抄PDF”,而是在“理解PDF”,在数学公式识别方面优势明显。
整体处理流程
实际操作流程被我压缩成了三步:
准备要处理的PDF文件 运行脚本调用本地模型 自动转换成Word文件
👉【本地模型识别中....】
处理中系统会自动完成以下工作:
识别文本内容 解析数学公式结构 还原题目层级关系 生成可编辑Word文档
👉【生成的Word】

可以看到10几秒完成识别,公式识别准确率达100%,只需要稍微调整字体和段落即可完工,效率大大提升。
实际效果对比
我做了一个简单对比测试:
最明显的变化是:
以前最耗时的“公式手打”环节,基本消失了。
关键代码
整个工具的核心其实非常简单,只是对命令行做了一层封装:
👉【核心Python代码截图】
import tkinter as tkfrom tkinter import filedialogimport subprocessimport osfrom datetime import datetimeMINERU_BIN = "/opt/miniconda3/envs/mineru/bin/mineru"defrun_mineru(pdf_path): base_dir = os.path.dirname(pdf_path) output_dir = os.path.join( base_dir,"mineru_output_" + datetime.now().strftime("%Y%m%d_%H%M%S") ) os.makedirs(output_dir, exist_ok=True) cmd = [ MINERU_BIN,"-p", pdf_path,"-o", output_dir ] print("\n==============================") print("开始执行 MinerU") print("输入文件:", pdf_path) print("输出目录:", output_dir) print("命令:", " ".join(cmd)) print("==============================\n")try: result = subprocess.run( cmd, capture_output=True, text=True, env=os.environ.copy() ) print("STDOUT:\n", result.stdout) print("STDERR:\n", result.stderr)if result.returncode == 0: print("\n✔ 处理完成") print("输出目录:", output_dir)else: print("\n✘ 执行失败")except Exception as e: print("执行异常:", e)defselect_pdf(): root = tk.Tk() root.withdraw() file_path = filedialog.askopenfilename( title="选择 PDF 文件", filetypes=[("PDF files", "*.pdf")] )if file_path: run_mineru(file_path)if __name__ == "__main__": select_pdf()带公式的pdf转word流程
收集PDF文件 批量运行脚本 自动输出Word 少量人工微调
整个过程从“手工劳动”变成了“批处理流程”。
写在最后
这次探索不只是解决“PDF转Word”本身,市面上也许有很多工具都可以实现,但在数学公式识别方面,成熟的工具相对较少,而且基本需要付费订阅,本次采用本地计算机部署MinerU,实现本地模型推理预测,无须付费、不用担心数据安全,如果你也有处理数学公式的需求,也可尝试此方法。

夜雨聆风