如何把扫描版的PDF书籍转换成Epub电子书

听雨量化商业说 2024-09-29 22:42:36

这几年买纸质书越来越少了,一方面是家里实在装不下了, 另一方面是z-library项目已经涵盖来绝大部部分的书籍,电子版可以轻松获取。并且阅读电子版的书籍有个好处,就是可以直接使用BookXNote直接做读书笔记,并且还能利用我写的《BookXNoteSync开发.README|BookXNoteSync》 直接导入到Obsidian中来, 具体参考我的文章BookXNote Sync插件:同步BookXNote笔记到Obsidian中

起因

最近正在拜读周洛华教授的《金融的哲学》,可能是经院学者的共性,他们都不喜欢上架Epub版本的电子书,只从网上找到了扫描版本的PDF书籍。

但是这本书太精彩了,我忍不住做了很多笔记,尴尬的来了,扫描版本的书籍做笔记非常非常别扭。

身为一个合格的程序员,就想毕竟现在的OCR技术这么成熟了,为什么不把扫描版本的书籍转换成文字版本呢?

探索

说干就干! 首先是OCR技术,这是一个很古老的技术了,如果采用最原始的OCR方案,我们需要先切割文件,把文字区域标记出来,然后我们再使用OCR识别文字,然后再进行排版。

光是想到的工作量,就大的吓人。

这时候我突然想起,之前好像看过一个项目,是采用4o的大模型技术来识别PDF,进行OCR的识别的,所以在github上搜索一番,终于让我找到了。

MinerU

MinerU是一款将PDF转化为机器可读格式的工具(如markdown、json),可以很方便地抽取为任意格式。 MinerU诞生于书生-浦语[1]的预训练过程中,我们将会集中精力解决科技文献中的符号转化问题,希望在大模型时代为科技发展做出贡献。 相比国内外知名商用产品MinerU还很年轻。

在开源的软件中,一句话总结就是优秀,并且实际使用过程中,发现准确率出奇的高,并且转换成markdown格式。

但是想从markdown格式转换成epub格式还需要两步

把markdown格式转换成html格式把html格式转换成epub格式markdown格式转换成html格式可以采用大名鼎鼎的pandoc工具,这个工具可以支持公式,确定是要命令行执行,好像python也有pandoc的库,没有再进一步研究,有研究过的小伙伴可以一起聊聊。可以采用markdown库, 直接加载markdown文件,转写成html格式。HTML转换成epub格式

直接使用python库 EBookLib,虽然很方便,但是有很多小坑。

插图-程序员.jpeg

执行安装 MinerU首先新建一个python环境,一个找一个空间大一点的,因为MinerU的模型占用大约是在6~8G左右。安装MinerU,具体过程参考MinerU的使用说明,也可以到我的GitHub中直接下载库。命令行转换PDF为Markdown,整个过程非常简单,但是OCR的速度会比较慢,一个页面大约3秒左右,如果有哪些几百页的书籍,得好好等一下了。magic-pdf -p "C:\Users\jerri\Downloads\财富自由之路.pdf" -o ./ -m auto转换markdown到epub

核心代码如下

# 转换markdwon到htmldef md_to_html(md_content): # 转换为 HTML html_content = markdown.markdown(md_content, extensions=["mdx_math"], extension_configs={ "mdx_math": { "enable_dollar_delimiter": True, } }) # # 保存为 HTML 文件 # html_file = md_file.replace('.md', '.html') return html_content# 转换html到epubdef html_to_epub_chapter(title, html_content): # print(html_content) chapter = epub.EpubHtml(title=title, lang="cn", file_name=title+'.xhtml') chapter.content = html_content return chapter

详细代码到我的代码库中查看,已经开源[2]

结语

就这么简单的几步,就可以把一个ocr文章转换成epub格式了,不得不感慨,这两年人工智能的飞快进展。

还有会一门计算机语言,绝对在效率上杠杠滴。有兴趣还是建议大家多自己撸一下代码锻炼下自己的编码能力。

另外:

本文只涉及经验分享,请大家遵循法律,不要侵犯作者版权。

参考资料

[1]

书生-浦语: https://github.com/InternLM/InternLM

[2]

开源: https://github.com/CodeListening/pdf2epub

0 阅读:1