版面恢复与公式提取
作者:游鱼思
测评及讨论
https://github.com/py-pdf/benchmarks
结论:Mathpix 效果最好,但是费用挺高。 Grobid 专题 是相对较优的选择。
概述
PDF 论文的版面恢复和数学公式提取是文档分析领域的两个重要任务。这两个任务都需要高度精确的模型来理解和处理复杂的文档结构和内容。到目前为止(截至 2023年),有几种模型和方法在处理这些任务方面表现出色:
-
版面恢复(Document Layout Analysis):
- 基于深度学习的模型,如 Convolutional Neural Networks (CNNs) 和 Transformer 模型,在版面恢复方面表现良好。这些模型能够有效地识别和分类页面元素,如文本块、图像、表格和数学公式等。
- 特别是,一些针对文档版面分析的模型,如 LayoutLM(由微软研究院开发),已被证明在处理复杂文档结构时特别有效。LayoutLM 结合了文本内容和版面信息,能够更好地理解页面结构。
-
数学公式提取(Mathematical Formula Extraction):
- 数学公式的提取通常更加复杂,因为它涉及到对字符、符号的精确识别以及它们的空间关系。
- 一些专门的 Optical Character Recognition (OCR) 软件,如 Tesseract OCR,配合后处理脚本可以用于提取数学公式。但这通常需要定制化的调整以适应特定的数学符号和格式。
- 对于更复杂的公式,深度学习模型如 RNN(递归神经网络)和 LSTM(长短期记忆网络)被用来理解公式中的序列关系。
- 还有一些专门的工具和库,如 MathPix,专门用于识别和提取数学公式。
-
综合处理模型:
- 有些研究尝试结合上述两种任务,使用多任务学习模型同时进行版面恢复和数学公式提取。这些模型通常是基于深度学习的,能够同时处理多种类型的文档元素。
在选择模型时,需要考虑到论文的具体版面和数学公式的复杂性。对于一些标准格式的论文,现有的 OCR 工具和深度学习模型可能已足够。对于更复杂或非标准的文档,可能需要更高级的定制化解决方案。此外,对模型的训练和调整通常需要大量的标注数据和专业知识。
将 PDF 格式的论文转换为 Markdown 或 HTML
通常涉及两个主要过程:文本和布局提取以及格式转换。有几种开源软件可以帮助完成这些任务,尽管需要注意,由于 PDF 格式的复杂性,这些转换可能不总是完美无误,特别是对于包含复杂布局和元素(如数学公式、图表等)的学术论文。
以下是一些常用的开源工具:
[强推荐]GROBID (GeneRation Of BIbliographic Data):GROBID
https://github.com/kermitt2/grobid
文档: https://grobid.readthedocs.io/en/latest/
是一个机器学习库,用于提取、解析和重新格式化原始文档(如学术论文)中的文本和参考文献。这个项目结合了各种机器学习模型,专门用于文档布局分析和元数据提取。
ScienceBeam 解析器
https://github.com/elifesciences/sciencebeam-parser
pdfplumber:解析 PDF 文件,获取相关的文本字符、矩形和线条的详细信息。 额外功能:表格提取和可视化调试。
用于电脑生成的 PDF 上效果最好,不支持扫描的 PDF,基于pdfminer.six
实现.
pdf2xml / pdf2htmlEX:这些工具可以将 PDF 文档转换为 XML 或 HTML 格式,同时保持原始布局。尽管它们不专门用于公式提取,但在版面恢复方面表现出色,可以作为后续提取工作的基础。
Mathpix:虽然 Mathpix 不完全是开源的,但它提供了一个强大的 API,可以从图像和 PDF 文件中识别和提取数学公式。它特别擅长于处理复杂的数学表达式,并能够将它们转换为 LaTeX 格式。
InftyReader:这是一个专门用于识别和转换数学公式和科学文本的 OCR 系统。它能够从 PDF 或图像文件中提取文本和公式,虽然它不是完全开源的,但对于学术研究用途提供了有限的免费版本。
LaTeX OCR:这是一个专门用于从 PDF 文件中提取 LaTeX 公式的工具。它利用 OCR 技术来识别数学符号和表达式,然后将它们转换为 LaTeX 代码。
pdfplumber:可以提取pdf全文及表格。估计不支持公式、版面恢复。
pdfminer.six pdfplumber是基于该库实现的。它主要关注解析 PDF、分析 PDF 布局和对象定位,以及提取文本。但它不提供用于表提取或可视化调试的工具。
PyPDF2 是一个纯 Python 库,“能够拆分、合并、裁剪和转换 PDF 文件的页面。它还可以向 PDF 文件添加自定义数据、查看选项和密码。”它可以提取页面文本,但无法轻松访问形状对象(矩形、线条等)、表提取或可视化调试工具。
pymupdf 运行速度比pdfminer快。可以生成和修改 PDF,但该库需要安装非 Python 软件(MuPDF)。它无法轻松访问形状对象(矩形、直线等),并且不提供表提取或可视化调试工具。
camelot, tabula-py, and pdftables 这些库主要关注表格提取。在某些情况下,它们可能更适合提取特定的表格。
版面恢复
对于版面分析和文档图像处理,市场上有其他工具专门设计来解决这些问题,包括但不限于:
PDFMiner 或 PyMuPDF(用于 Python):提供文本提取和一些版面分析功能。
Apache PDFBox:一个开源Java库,用于处理PDF文档,包括文本提取。
OCR 工具(如 Tesseract):可以与版面分析工具结合使用,以处理扫描文档和图像中的文本。
- Pandoc:
https://pandoc.org/- Pandoc 是一个非常强大的文档转换工具,支持广泛的格式转换,包括 PDF 到 Markdown 或 HTML。
- 对于 PDF 转换,Pandoc 实际上是通过先将 PDF 转换为中间格式(如 LaTeX),然后再转换为目标格式。
Pandoc不支持从pdf开始的转换,支持从 LaTeX 转为 Markdown。
论文参考文献交叉引用:
http://lierdakil.github.io/pandoc-crossref/
https://linux.cn/article-10179-1.html 用 Pandoc 生成一篇调研论文
-
pdf2htmlEX:
- pdf2htmlEX 可以将 PDF 转换为 HTML,保留原始页面布局、字体和格式。
- 虽然它不直接转换为 Markdown,但转换后的 HTML 可以进一步使用其他工具转换为 Markdown。
-
Apache PDFBox:
- Apache PDFBox 是一个用 Java 编写的工具,用于处理 PDF 文档。它可以提取文本内容,但不保留原始格式。
- 提取的文本可以用其他工具进一步转换为 Markdown 或 HTML。
-
Poppler:
- Poppler 是一个 PDF 渲染库,包含工具如
pdftotext
和pdftohtml
,可用于将 PDF 转换为文本或 HTML。 - 这些工具通常用于提取文本内容,但可能不会保留复杂的布局和格式。
- Poppler 是一个 PDF 渲染库,包含工具如
-
Calibre:
- Calibre 是一个电子书管理软件,也包含强大的文件转换功能,能够处理多种格式
实测:Calibre仅支持epub到其它格式的转换。
使用这些工具时,可能需要进行一些手动调整,尤其是在处理具有复杂格式和布局的学术论文时。对于一些高度格式化的内容(如数学公式或特定的版面布局),自动转换可能无法完全准确地反映原始文档的所有细节,因此在转换后进行人工校对和调整通常是必要的。
采用中小模型
Mathpix
https://mathpix.com/pricing
效果好,功能全,比较贵
自动切图,支持表格。
5万篇PDF,预计收费在1500$。
测评: https://www.breezedeus.com/pix2text_cn
Pix2Text (P2T)
开源模型: https://github.com/breezedeus/Pix2Text
付费-数学公式检测(MFD)模型: https://gf.bilibili.com/item/detail/1102870055 198元
付费-数学公式识别(MFR)模型: https://gf.bilibili.com/item/detail/1103052055 198元
P2T 使用开源工具 CnSTD 检测出图片中数学公式所在位置,再交由 LaTeX-OCR 识别出各对应位置数学公式的Latex表示。图片的剩余部分再交由 CnOCR 进行文字检测和文字识别。最后 P2T 合并所有识别结果,获得最终的图片识别结果。Pix2Text 的文字识别引擎支持 80+ 种语言,如英文、简体中文、繁体中文、越南语等。其中,英文和简体中文识别使用的是开源 OCR 工具 CnOCR ,其他语言的识别使用的是开源 OCR 工具 EasyOCR
Pix2Text 主要依赖 CnSTD>=1.2.1、CnOCR>=2.2.2.1 ,以及 LaTeX-OCR 。
付费模型的区别:相对于开源的Latex-OCR识别模型,新模型(version-20230702)的精度更高,尤其是对手写公式和多行公式类的图片。
Microsoft LayoutLM
https://www.msra.cn/zh-cn/news/features/layoutlmv3
https://huggingface.co/docs/transformers/model_doc/layoutlm
https://github.com/microsoft/unilm/tree/master/layoutlmv3
演示: https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/LayoutLMv3/Fine_tune_LayoutLMv3_on_FUNSD_(HuggingFace_Trainer).ipynb
结论:LayoutLM 主要用于文档版面理解和信息提取,无法直接用于转换 pdf到markdown。
Facebook nougat
https://facebookresearch.github.io/nougat/
LlamaIndex有集成 https://llamahub.ai/l/nougat_ocr
测评: https://www.breezedeus.com/article/vie-nougat
nougat不支持中文,或者是中英混合文本。目前只支持英文。
一页pdf,Mac CPU跑大概要花8~10分钟。
配备有24GB VRAM的NVIDIA A10G显卡的机器上,可以并行处理6页内容。生成速度在很大程度上取决于给定页面上的文本量。在没做任何推理优化时,按平均每页有 ~1400 个 tokens算,Nougat base模型处理一个batch图片的平均时间为19.5秒。
采用大模型
通过GPT4V
https://docs.llamaindex.ai/en/stable/examples/multi_modal/multi_modal_pdf_tables.html
LlamaIndex Dataload
semanticscholar.org
https://www.semanticscholar.org/
https://llamahub.ai/l/semanticscholar
提供了2亿篇论文的智能检索,有摘要和元数据,大部分可以下载全文。
可能是绕过自建论文库的好办法。
库中最重要的部分:对文档进行分区。 文档分区的目标是读取源文档,将文档拆分为多个部分,对这些部分进行分类, 并提取与这些部分关联的文本。根据文档类型,非结构化使用不同的方法 对文档进行分区。
unstructured.io
https://llamahub.ai/l/file-unstructured
https://github.com/Unstructured-IO/unstructured
https://unstructured.io/blog/optimizing-unstructured-data-retrieval
视频介绍:
https://www.youtube.com/watch?v=sY6qi7eAa4o
https://www.youtube.com/watch?v=Ngv8WrKDIu0
功能:
分区函数将原始文档分解为标准的结构化元素。
清理功能从文档中删除不需要的文本,例如样板和句子片段。
暂存函数为下游任务(例如 ML 推理和数据标记)格式化数据。
分块功能将文档拆分为更小的部分,以便在 RAG 应用程序和相似性中使用 搜索。
嵌入编码器类提供了一个接口,用于轻松地将预处理的文本转换为 向量。