PDF2Markdown

前言
Marker 是 VikParuchuri 开发的一款将 PDF、EPUB 和 MOBI 转换为 Markdown的工具。据称比nougat快 10 倍,在大多数文档上更准确,并且产生错误的风险较低。

GitHub

地址

可能大多数人都不需要这玩意儿,毕竟这年头除了程序员谁会用 Markdown 格式啊?
当然还有 Obsidian 折腾型选手!
说实话这年头各种 ocr 准确率已经很高了,只要把 pdf 转成 word,然后复制粘贴进 markdown 文件也一样。
然而痛点在于,专业书中的各种公式,识别率那是惨不忍睹,就算准确率很高,在md文件中也只是一坨数字,还要手动一个个改成 LaTeX 公式。
可能有人会说,你看 pdf 或者纸质书不也一样吗?
我就不,我就要 All-in-One!

Marker 作者提供了在Linux和Mac系统下的安装方法,然而他并没有Windows系统,因此全文操作参照这篇如何在win环境下安装的教程,当然我们中国人有自己的坑。

github.com/VikParuchuri/marker
The way to install VikParuchuri/marker on Windows 10. 104

The most challenging aspect of installing Marker on Windows lies in the detectro…

  1. 安装3.9版本以上的Python
    我就选择3.9了,因为texify要求 Python 版本为 3.9 或更高版本,版本太高的话也可能跟其他的库有不兼容问题。

Python.org

Python Release Python 3.9.0 29
The official home of the Python Programming Language

  1. pip换清华源
    由于pip的下载速度很慢,所以我们要先把下载方式改成清华镜像。
    在“C:\Users[你的用户名]”中建一个名为“pip”的文件夹,再在里面新建一个txt文本,填入如下代码:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com

之后将txt文件名改为“pip.ini”即可。

  1. 下载代码
    不知道大家的习惯是怎样的,毕竟我不是专业的程序员,可能就随意了一些。因此我首先用git下载了一下这个项目的代码。
    git clone https://github.com/VikParuchuri/marker.git
    然后切换到目录里面:
    cd marker
    开始安装detectron2:
    git clone https://github.com/facebookresearch/detectron2.git
    pip install -e detectron2
    原文说需要修复什么错误,但我没遇到也就不管它了。

  2. 安装软件
    下载安装Visual Studio: https://visualstudio.microsoft.com/vs/community/ 24
    (意味不明,说是需要C/C++环境)
    安装CUDA : https://developer.nvidia.com/cuda-downloads 29
    有很多相关的教程,这里就不多赘述了, 注意 pytorch 版本要支持对应版本的 CUDA。
    安装 tesseract-ocr-w64-setup-5.3.3.20231005.exe https://digi.bib.uni-mannheim.de/tesseract/ 32
    安装时有两个选项要下载语言的应该可以不勾,虽然本来就没勾上,但是我觉得没啥就让它下载了,结果下了接近两个小时。
    安装 Ghostscript gs10021w64.exe https://ghostscript.readthedocs.io/en/gs10.02.0/Install.html 26

  3. 安装各种依赖项
    直接复制到控制台粘贴就好了:

pip install nougat-ocr
pip install wheel
pip install torch 
pip install python-magic
pip install python-magic-bin
pip install ftfy  
pip install spellchecker  
pip install pyspellchecker  
pip install ocrmypdf  
pip install nltk  
pip install thefuzz
pip install ray==2.7.1
pip install PyMuPDF
pip install pydantic
pip install --upgrade fastapi
pip install python-dotenv
pip install pydantic-settings
pip install texify
pip install pyspellchecker
pip install ocrmypdf
pip install scikit-learn
pip install ray

可能还有其它依赖项没装上,这时候直接把报错信息扔给GPT就可以了,它会告诉你需要安装什么。

在这里插入图片描述

  1. 下载预训练模型
    由于特殊的网络原因,大部分人没法连接到huggingface,经过摸索我终于知道怎么用离线模型了。
    这个项目主要用了4个预训练模型:

huggingface.co

vikp/layout_segmenter at main
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

huggingface.co

vikp/pdf_postprocessor_t5 at main
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

huggingface.co

vikp/column_detector at main
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

huggingface.co

vikp/texify at main
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

在项目里新建一个叫“vikp”的文件夹,然后把4个预训练模型都下载分别放进各自名字的文件夹里。

在这里插入图片描述
正如上文所说,我不是那么专业,并不知道哪些文件可以不用下载,因此我一股脑儿都下了。
在这里插入图片描述

7.运行代码
作者给出的转换单本书的示例代码是:
python convert_single.py /path/to/file.pdf /path/to/output.md --parallel_factor 2 --max_pages 10

–max_pages是要转化多少页,我一般都是整本书所以不需要。
–parallel_factor 数字越高占用的显存和CPU越多,默认是1。
因此我想转化一本路径是E:\Windows lock\Downloads\Documents\Econometric Analysis Global Edition (William H. Greene) (Z-Library).pdf的书到同目录下,代码就是:

python convert_single.py “E:\Windows lock\Downloads\Documents\Econometric Analysis Global Edition (William H. Greene) (Z-Library).pdf” “E:\Windows lock\Downloads\Documents\Econometric Analysis.md” --parallel_factor 2

但很快我就发现很多不对劲了,首先这本书很大,1000多页,而且控制台也没显示进度条。等了很久终于来了一句潜在的报错:您的输入文本经过分词后的长度超过了模型设定的最大序列长度(384),可能导致模型无法处理。

然后我仔细看了看,如果要用CUDA还是要自己调的。

在这里插入图片描述

首先TORCH_DEVICE: Optional[str] = NONE 要改成 cuda,然后是 INFERENCE_RAM 改成自己显存大小,项目作者原来填的40,可真是有钱呀。
VRAM_PER_TASK 是每个任务分配到的显存,并行任务数乘以这个数最好远远低于你的显存,爆显存了好像进度条就不动了,DEFAULT_LANG 是书所用的语言。

随后我使用 Acrobat 将 pdf 分割成了38份扔到了名为“Econometric Analysis”的文件夹中,或许在此之前应该优化一下文件大小。

在这里插入图片描述

再将“Econometric Analysis”文件夹放到项目文件夹下,这样运行代码就可以只使用相对路径。
因此我认为将大 pdf 拆分进行多线程任务是比较方便的,作者给出的示例代码是:

python convert.py /path/to/input/folder /path/to/output/folder --workers 10 --max 10 --metadata_file /path/to/metadata.json --min_length 10000

–workers是一次要转换的 pdf 数量。默认情况下设置为 1,上面也说了,数量不要太多避免超过显存,因此我设置的2
–max是要转换的 pdf 的最大数量。不填的话就会转换文件夹中的所有 pdf 文件,只能说非常好这就是我想要的。
–metadata_file是 json 文件的可选路径,其中包含有关 pdf 的元数据(主要是语言)。如果没有,就会使用默认语言 DEFAULT_LANG。
–min_length是在考虑处理之前需要从 pdf 中提取的最少字符数。这项可以避免对主要是图像的 pdf 进行 OCR 处理。(减慢一切速度)
因此我这边最后的指令就是:
python convert.py “./Econometric Analysis” “./Econometric Analysis” --workers 2 --min_length 10000

最后出来的结果虽然有些乱码,但已经很满意了,毕竟能节省一分时间也是好的。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值