如何使用 OCR 从 Linux 上的 PDF 中提取文本?

age*_*ser 46 linux pdf ocr extract ubuntu

如何从未使用索引构建的 PDF 中提取文本?都是文本,但我无法搜索或选择任何内容。我正在运行 Kubuntu,而 Okular 没有此功能。

小智 26

在 Cuneiform OCR 系统的 BSD 许可的Linux 端口上取得了成功。

似乎没有可用的二进制包,因此您需要从源代码构建它。确保安装了 ImageMagick C++ 库以支持任何输入图像格式(否则它将只接受 BMP)。

虽然除了简短的 README 文件外,它似乎基本上没有记录,但我发现 OCR 结果非常好。它的好处是它可以以hOCR格式输出 OCR 文本的位置信息,因此可以将文本放回 PDF 文件隐藏层中的正确位置。通过这种方式,您可以创建“可搜索”的 PDF,您可以从中复制文本。

我使用hocr2pdf从原始的纯图像 PDF 和 OCR 结果中重新创建 PDF。遗憾的是,该程序似乎不支持创建多页 PDF,因此您可能需要创建一个脚本来处理它们:

#!/bin/bash
# Run OCR on a multi-page PDF file and create a new pdf with the
# extracted text in hidden layer. Requires cuneiform, hocr2pdf, gs.
# Usage: ./dwim.sh input.pdf output.pdf

set -e

input="$1"
output="$2"

tmpdir="$(mktemp -d)"

# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiffg4 -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"

# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
    base="${page%.tiff}"
    cuneiform -f hocr -o "$base.html" "$page"
    hocr2pdf -i "$page" -o "$base.pdf" < "$base.html"
done

# combine the pages into one PDF
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$output" "$tmpdir"/page-*.pdf

rm -rf -- "$tmpdir"
Run Code Online (Sandbox Code Playgroud)

请注意,上面的脚本非常简陋。例如,它不保留任何 PDF 元数据。


小智 15

看看pdftotext是否适合你。如果它不在你的机器上,你必须安装 poppler-utils 包

sudo apt-get install poppler-utils 
Run Code Online (Sandbox Code Playgroud)

您可能还会找到使用的pdf 工具包

PDF软件的完整列表在这里维基百科。

编辑:由于您确实需要OCR 功能,我认为您必须尝试不同的方法。(即我找不到执行 OCR 的 linux pdf2text 转换器)。

  • 将pdf转换为图像
  • 使用 OCR 工具将图像扫描为文本

将pdf转换为图像

  • gs:以下命令应将多页 pdf 转换为单独的 tiff 文件。

    gs -SDEVICE=tiffg4 -r600x600 -sPAPERSIZE=letter -sOutputFile=filename_%04d.tif -dNOPAUSE -dBATCH -- 文件名

  • ImageMagik 实用程序:SuperUser 站点上还有其他有关使用 ImageMagik 的问题,您可能会使用它们来帮助您进行转换。

    转换 foo.pdf foo.png

使用 OCR 将图像转换为文本

取自维基百科的OCR 软件列表

  • 该程序是否也适用于手写文本文档? (2认同)

Rus*_*uss 13

Google docs现在将使用 OCR 将您上传的图像/pdf 文档转换为文本。我已经取得了很好的成功。

他们正在使用用于巨大的Google Books项目的 OCR 系统。

但是,必须注意的是,仅接受大小为 2 MB 的 PDF 进行处理。

更新
1. 要试用它,请从网络浏览器将 <2MB 的 pdf 上传到 google 文档。
2. 右键单击​​上传的文档,然后单击“使用 Google 文档打开”。
...Google Docs 将转换为文本并输出到同名但 Google Docs 类型在同一文件夹中的新文件。


Edu*_*scu 5

最好和最简单的方法是使用pypdfocr它不会改变 pdf

pypdfocr your_document.pdf
Run Code Online (Sandbox Code Playgroud)

最后,您将获得另your_document_ocr.pdf一种您想要的带有可搜索文本的方式。该应用程序不会改变图像的质量。通过添加覆盖文本稍微增加文件的大小。

2018 年 11 月 3 日更新:

pypdfocr自 2016 年起不再受支持,我注意到由于未维护而导致的一些问题。ocrmypdf( module ) 做一个类似的工作,可以这样使用:

ocrmypdf in.pdf out.pdf
Run Code Online (Sandbox Code Playgroud)

安装:

pip install ocrmypdf
Run Code Online (Sandbox Code Playgroud)

或者

apt install ocrmypdf
Run Code Online (Sandbox Code Playgroud)