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

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

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

答案1

我已经成功使用 BSD 许可的楔形文字的 Linux 移植OCR 系统。

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

虽然除了简短的 README 文件外,它似乎基本上没有文档记录,但我发现 OCR 结果相当不错。它的优点是它可以输出 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"

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

答案2

看看pdf转文本可以。如果你的机器上没有这个,你必须安装 poppler-utils 包

sudo apt-get install poppler-utils 

您可能还会发现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 软件列表

答案3

谷歌文档将要现在使用 OCR 将您上传的图像/pdf 文档转换为文本。我使用它取得了很大的成功。

他们正在使用用于巨型谷歌图书项目。

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

更新
1. 要试用,请从网络浏览器将小于 2MB 的 PDF 上传到 Google Docs。2
. 右键单击​​已上传的文档,然后单击“使用 Google Docs 打开”。...
Google Docs 将转换为文本并输出到具有相同名称但 Google Docs 类型位于同一文件夹中的新文件。

答案4

PDF珠子对我来说效果很好。这个帖子“将扫描的图像转换为单个 PDF 文件” 让我开始行动。对于黑白书籍扫描,您需要:

  1. 为 PDF 的每一页创建一个图像;上面的两个 gs 示例都可以使用
  2. 为每个页面生成 hOCR 输出;我使用了 tesseract(但请注意,Cuneiform 似乎效果更好)。
  3. 将图像和 hOCR 文件移动到新文件夹;文件名必须对应,因此 file001.tif 需要 file001.html,file002.tif 需要 file002.html,等等。
  4. 在新文件夹中,运行

    pdfbeads * > ../Output.pdf
    

这会将整理好的 OCR PDF 放在父目录中。

相关内容