一款OCR神器,5.6K Star,支持20多种文档格式,一键转换成markdown

不知道各位小伙伴平时工作中有没有一些将别的格式的文档转为 Markdown 的需求?

最近发现了一个好玩的开源项目,能够帮我们把二十多种不同格式的文章利用 AI 转为 markdown,非常好用。

一 Zerox OCR

Zerox OCR 是一个基于 GPT 技术的 OCR 工具,它能够将 PDF、DOCX 等文件转换为 Markdown 格式。

相比于传统的 OCR 工具,Zerox OCR 有很多不一样的地方,具体体现在:

  1. 零配置:Zerox OCR 的一个显著特点是它的零配置特性,用户只需提供文件和 API token,即可轻松实现文本提取,省去了繁琐的参数设置。
  2. 高精度识别:Zerox OCR 使用 GPT-4o-mini 模型进行文本识别,能够处理完全陌生的 PDF、图片等文档类型,不需要事先训练数据,即可提供高精度的 OCR 结果。
  3. Markdown 输出格式:在 OCR 转换过程中,Zerox 将每个识别的页面转化为简洁的 Markdown 格式,方便对文本进行后期处理和整理。
  4. 支持复杂文档:Zerox 不仅可以处理简单的文本,还能够处理包含表格、图表等复杂布局的文件。无论是扫描版 PDF 还是其他格式,Zerox 都可以对它们进行 OCR 识别,生成准确的文本内容。
  5. 本地运行与 API 支持:Zerox 支持本地运行,无需担心隐私泄露问题。此外,它还提供了 API 接口,方便集成到应用中,提升业务流程的自动化和效率。
  6. 开源项目:Zerox 是一个开源项目,使用 MIT 许可证,用户可以免费使用其核心功能。

Zerox OCR 以其高效准确、易用性和广泛的应用前景,成为了文档处理和数据提取领域的一个重要工具。开发者和用户可以通过访问 Zerox 的 GitHub 页面来体验这款 OCR 神器,开启高效文本提取之旅。

GitHub 地址:https://github.com/getomni-ai/zerox

二 支持的文档格式

那么这个开源工具到底都支持哪些不同格式的文档呢?

我们来看下官方给的这个支持的文档列表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[
"pdf", // Portable Document Format
"doc", // Microsoft Word 97-2003
"docx", // Microsoft Word 2007-2019
"odt", // OpenDocument Text
"ott", // OpenDocument Text Template
"rtf", // Rich Text Format
"txt", // Plain Text
"html", // HTML Document
"htm", // HTML Document (alternative extension)
"xml", // XML Document
"wps", // Microsoft Works Word Processor
"wpd", // WordPerfect Document
"xls", // Microsoft Excel 97-2003
"xlsx", // Microsoft Excel 2007-2019
"ods", // OpenDocument Spreadsheet
"ots", // OpenDocument Spreadsheet Template
"csv", // Comma-Separated Values
"tsv", // Tab-Separated Values
"ppt", // Microsoft PowerPoint 97-2003
"pptx", // Microsoft PowerPoint 2007-2019
"odp", // OpenDocument Presentation
"otp", // OpenDocument Presentation Template
]

可以看到,主流的文档格式都是支持的。

三 实践

最后我们再来看下这个工具该如何使用。

首先来安装:

1
npm install zerox

Zerox 使用 graphicsmagick 和 ghostscript 进行 PDF 到图像的转换。这些工具应会自动下载,但有时需要手动安装。

手动安装命令如下:

1
2
sudo apt-get update
sudo apt-get install -y graphicsmagick

装好之后就可以使用了,使用的时候可以使用一个在线的文件路径:

1
2
3
4
5
6
import { zerox } from "zerox";

const result = await zerox({
filePath: "https://omni-demo-data.s3.amazonaws.com/test/cs101.pdf",
openaiAPIKey: process.env.OPENAI_API_KEY,
});

如果是本地文件则通过如下方式来解析:

1
2
3
4
5
6
7
import path from "path";
import { zerox } from "zerox";

const result = await zerox({
filePath: path.resolve(__dirname, "./cs101.pdf"),
openaiAPIKey: process.env.OPENAI_API_KEY,
});

最终解析结果类似下面这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{
completionTime: 10038,
fileName: 'invoice_36258',
inputTokens: 25543,
outputTokens: 210,
pages: [
{
content: '# INVOICE # 36258\n' +
'**Date:** Mar 06 2012 \n' +
'**Ship Mode:** First Class \n' +
'**Balance Due:** $50.10 \n' +
'## Bill To:\n' +
'Aaron Bergman \n' +
'98103, Seattle, \n' +
'Washington, United States \n' +
'## Ship To:\n' +
'Aaron Bergman \n' +
'98103, Seattle, \n' +
'Washington, United States \n' +
'\n' +
'| Item | Quantity | Rate | Amount |\n' +
'|--------------------------------------------|----------|--------|---------|\n' +
"| Global Push Button Manager's Chair, Indigo | 1 | $48.71 | $48.71 |\n" +
'| Chairs, Furniture, FUR-CH-4421 | | | |\n' +
'\n' +
'**Subtotal:** $48.71 \n' +
'**Discount (20%):** $9.74 \n' +
'**Shipping:** $11.13 \n' +
'**Total:** $50.10 \n' +
'---\n' +
'**Notes:** \n' +
'Thanks for your business! \n' +
'**Terms:** \n' +
'Order ID : CA-2012-AB10015140-40974 ',
page: 1,
contentLength: 747
}
]
}

这个用法是不是非常 Easy,如果小伙伴看过松哥的 vhr 或者 tienchin,对 Vue 的使用有基本的了解,那么上面这段代码可就太好明白了。

好啦,更多功能小伙伴们可以查看 Zerox 官方文档,松哥这里就不啰嗦了。