通过命令行/脚本使现有的PDF可搜索(OCR)


21

我正在寻找一种脱机脚本编写工具,该工具可通过在其上运行OCR来使现有的PDF文件变为可搜索的文件,并用可搜索的版本替换原始的不可搜索的文件,并且可以在无人看管的情况下运行。

例如,www.pdfscannerapp.com-完全满足我的需要,但仅是GUI-不可编写脚本。

我知道Evernote可以使PDF文件可搜索,但是只有在Evernote中时它们才可以搜索。

我不是在寻找完美的OCR,即使是可以接受的OCR也可以,但我更希望使用小的实用程序而不是笨拙的软件包。

(我知道广告中存在类似但不同的问题:寻找要扫描或转换为可搜索和可签名的PDF的软件 -但是,我不需要签名或填充PDF,我的要求是解决方案可编写脚本)

编辑:

1)多个实用程序允许结构化文本提取,但是要提取出来,文本必须存在;我主要指的是包裹位图的PDF,就像由扫描仪生成的普通PDF一样。

2)我不一定非要寻找免费的解决方案,而我会很乐意为能满足我所需要的良好实用程序付费,但我并不是要寻找具有一百万个功能(包括OCR功能)的庞大应用程序,但是其成本不足以证明仅出于OCR功能就购买它们是不合理的。

3)如上所述,我并不是在寻找完美的OCR,而只是寻求一个可以接受的OCR。不幸的是,根据我的经验,tesseract确实低于该阈值。我定义了一个“中等可接受”的OCR,例如可以将水电费OCR记为OCR,以便至少正确识别帐号(客户编号)。

编辑:“可脚本化”或“可自动化”,即能够自动触发并在无人值守的情况下无人值守运行。


2
...不知道这样做会有多困难,但是Tesseract OCR在Unix.SE中经常提到code.google.com/p/tesseract-ocr和OCR 。
hhh 2013年

1
还有一个类似的问题在这里,并回答适合你的要求是什么?
nohillside

1
您提到OCR。您的要求包括处理PDF内的图像或扫描的PDF文件吗?对于其中包含简单后记文本的文件,则可能适合您使用PDF到文本的转换器,例如“ PDF2Text Pilot”。
Tim B

@patrix我正在寻找一个较小的实用程序,不一定免费,但价格范围不同。不过,这是一个可能的解决方案,谢谢。
岩浆

不幸的是,@ TimothyButler我正在处理扫描的PDF(图像)。但是,很好的提示,谢谢。
岩浆

Answers:


5

对我来说,还不是很清楚您需要从“命令行”中“编写”脚本的要求。

如果您在谈论自动化,那么任何数量的实用程序都可以实现。

ABBYY FineReader Express +键盘大师+淡褐色

我像这样使用ABBYY FineReader Express + Keyboard Maestro + Hazel:

  1. 榛树监视给定的文件夹中是否有新的PDF

  2. 如果找到PDF,则会在“ ABBYY FineReader Express”中将其打开

  3. 然后,Keyboard Maestro自动执行将PDF转换为可搜索PDF(OCR)的过程,并将文件保存到其他目录。

现在,如果您还不拥有Hazel和Keyboard Maestro,那么您的初始成本将会迅速上升(尽管我非常依赖这两者,所以我认为它们很划算)。

PDFPen + AppleScript +文件夹操作

您可以使用PDFPen(或PDFPenPro),文件夹操作和AppleScript进行类似的操作。参见https://gist.github.com/prenagha/1355037的示例。

Marco Arment 对Mac的OCR应用程序进行一项调查,发现PDFPen取得了很好的结果并且易于自动化。

用谷歌搜索“ PDFpen applescript OCR”会发现很多选择。


很好的答案TJ。榛树很棒,我拥有它,而且我非常喜欢使用它。我目前不拥有Abbyy /键盘大师,但是Hazel + PDFPen是一个了不起的组合。总的来说,虽然这里的所有答案通常都非常好,并且针对的受众略有不同,但我认为Hazel + PDFPen非常适合原始问题。公认。
岩浆

在ABBYYFineReader Express上+1,这是目前最好的OCR,而我自己的一个项目已经经历了将近
十二次

12

您想要的是Tesseract OCR。这是Google维护的开源OCR,并支持多种平台。它还具有本机命令行界面。这正是您正在寻找的东西,可以从Mac ports项目以及homebrew中获得

项目主页:https//github.com/tesseract-ocr

如何在OS X上安装:http : //blog.matt-swain.com/post/26419042500/installing-tesseract-ocr-on-mac-os-x-lion

用法示例: tesseract -l eng input.pdf output


不错的项目。在我的测试中,识别度很差,但是我确定这取决于我无法对其进行微调。我一直在寻找更懒惰的解决方案,但这可能是一个不错的选择,特别是如果您想要更多控制权并且可以花一些时间来解决这个问题。
岩浆2015年

与目前更多的专有应用程序相比,tesseract的效果不佳。特别是它在编码和数学上存在问题,经常会产生很多希腊字符。
TechZen

OS X版本是否允许PDF输入?Windows版本没有。
道格

8

免责声明: 不是OCR解决方案(但此答案对于从pdf提取文本仍然有用)

有一个名为Apache Tika的Apache Software Foundation项目:

工具箱使用现有的解析器库从各种文档中检测并提取元数据和结构化文本内容

它们支持使用PDFBox提取PDF文本:

允许创建新的PDF文档,处理现有文档以及从文档中提取内容的功能。Apache PDFBox还包括几个命令行实用程序

他们最近还增加了对OCR的支持(通过Tesserac)

对于基于文本的解决方案,PDFBox使从PDF中提取文本非常简单:

它还有一些其他不错的选项,您可以在ExtractText文档中看到。


绝对是提取文本的不错选择,但是我看不到OCR功能。
岩浆

1
@magma OCR表示“光学字符识别”,肯定具有“ OCR功能”。现在您需要澄清:从分辨率低的图像(例如由VGA cam生成的图像,差的扫描仪或远距离图片)中提取文本是否是您的问题?那么您的问题就不同了,需要对诸如超分辨率之类的东西进行物理考虑。请提出更具体,更简短的问题,以便可以回答。我建议您将这个问题简化为您想要的一个功能。如果您想要更多,请问一个新问题。
……2013年

3
@hhh,一件事是从二进制文件(例如PDF)中提取文本,以便通过分析二进制格式来使文本可用并可读。没有任何视觉效果。文本已经存在,这些实用程序只是将其提取出来,所以可以说很容易看到。光学字符识别的不同之处在于,它试图识别位图中的像素模式并充分理解它们,从而可以产生相应的文本片段。
岩浆

这不能回答原始问题。AFAICT,pdfbox-app不执行OCR。
Feuermurmel,2016年

5

我会推荐DEVONThink Pro Office。这是一个出色的应用程序,并具有非常好的AppleScript支持。las,只有“ Pro Office”版本才具有OCR功能-因此您必须支付100英镑(150美元)的费用。

如果仅将其用于脚本化的OCR,那将是多余的,但它是一个非常好的应用程序。

[编辑]-啊,只要重新阅读您的帖子-肯定会大材小用!

如果您只想从外壳中获取OCR,则可以尝试与ABBY取得其引擎DEVON许可:

http://www.abbyy-developers.com/en:tech:samples:commandline_ocr


尽管OS X中的DEVONThink Pro Office是一个过大的功能,但它很有趣。如果开发人员是在OS X和iOS上设计的,则它可能会起作用(使UI更加简单)-您知道吗?不过,这个想法很酷-专业版会自动将OCR图层添加到屏幕快照和PDF等所有内容中吗?而用户可以以某种方式“编写脚本”吗?
hhh

2
是的-该应用程序具有出色的AppleScript词典,除其他功能外,它还使您可以将应用程序中存储的图像转换为可搜索的PDF。
Diggory 2013年

假设我使用iPhone拍照或使用OS X截图,并将它们放在文件夹ProjectA中,即使没有指定语言,DEVONThink是否会自动将OCR图层添加到其中?假设您将它们放入DropBox,然后在OSX中使DEVONThink自动检查文件夹,那么您可以通过OS X和iOS使用它吗?如果做得好,这是一个令人着迷的概念... +1
2013年

在某种程度上,这听起来像EverNote,其中EverNote添加了OCR,但不允许这样导出。是否可以使用OCR从此软件导出项目?如果不是这样,那么一些非常简单的OCR库和一些语言分析库可能效果最好。也许另一个是ABBY,我还不知道。
嗯,

2
它可以识别几种语言: i.stack.imgur.com/buDLI.png
Diggory

5

您可以通过将现有的PDF转换为文本文件来使其可搜索。您至少需要ImagemagickGhostscript(用于PDF转换)和Tesseract OCR工具。

一些命令行示例:

$ wget http://www.fmwconcepts.com/misc_tests/pdf_tests/test.pdf
$ convert -density 300 -depth 8 test.pdf test.png
$ tesseract test*.png test.txt
$ grep -i --color=auto the test*.txt
**The** details as told by surviving crew members, to **the** German publication Spiegel and published on ABC's

这可以进一步扩展到您的需求。

要安装必需的工具,可以在OSX上通过Homebrew安装它:

brew install imagemagick jpeg libpng ghostscript tesseract

在Linux上,使用apt-getyum代替brew

有关更多OCR工具的信息,请检查:Linux系统上的OCR

有关:


4

OCRmyPDF是一种易于实施的解决方案,可提供与输入文件相同质量且尺寸合理的输出pdf:

https://github.com/jbarlow83/OCRmyPDF


尽管我发现OCR后端Tesseract相当令人失望,但这看起来似乎是一个很不错的解决方案(肯定是因为我在正确配置它方面的局限性)。
岩浆

我喜欢OCRmyPDF,请参阅下面的答案,其中说明了如何使用docker快速轻松地安装和拖放自动化。
thadk

1

PDF解析下,Stackoverflow有相关的问题,涉及PDFBox和PDFBox使用的Apache TIKA之类的东西。下面的红宝石代码从PDF中提取文字。您需要具有足够好的分辨率才能使这种类型的代码稳定运行。因此,请获得足够好的高分辨率的扫描仪,然后查看某些软件是否正常运行。

例子

  1. https://github.com/yob/pdf-reader/tree/master/examples

SO线程

  1. /programming/5217783/pdf-parse-to-text-in-java

  2. /programming/8149179/alternative-to-tika-pdfbox-for-parsing-pdf-in-solr-any-version-later-than-1-4

  3. /programming/320621/ruby-pdf-parsing-gem-library

  4. /programming/15186740/haskell-parsing-reading-content-of-pdf-files

[编辑]

我不确定我现在是否理解您的问题。您想将OCR层添加到不同种类的材料中,例如随机照片,屏幕截图,不带OCR层的PDF等吗?我不知道解决方案,但我敢肯定有人知道,所以问了一个具体问题,如何使用Automator和某些OCR软件来解决:

带有OCR软件的Automator-script自动将OCR添加到材料中?


再次:我不希望解析或提取已经存在的文本。我正在寻找识别PDF文件中的文本(OCR),它们实质上是图像,位图;它们最初不包含任何文本。
岩浆

@岩浆,请参阅我的更新。您想自动添加OCR图层,以便即使没有“可搜索文本”也可以搜索各种文档?如果可以这样做,则可以在Finder中搜索所有文档-您知道吗?如果苹果不这样做在未来升级我很惊讶...
HHH

如我的问题所述,是的。
岩浆

1

对于这种自我指导的应用程序,我非常喜欢Hazel。

它使脚本操作变得非常容易,而无需学习更多面向命令行的工具(如perl或python),并与您选择的OCR引擎配对(当前为PDF Pen Pro),您可以毫不费力地处理文件大惊小怪。

两者都是付费软件,但是两者的实用性都远远超出了这种情况。在我的情况下,由于涉及将过去扫描的记录(和正在进行的纸张)数字化的工作,这些价格远远超过了我在其他地方进行编程所需的时间,而现在我拥有这两个工具,因此我可以用他们。



0

我将Adobe acrobat批量用于OCR。我的双面扫描仪扫描后可以进行OCR,但我认为acrobat中的OCR技术更为准确。我只是指向没有OCR的文件夹,然后acrobat重新将PDF保存为现在可搜索的PDF,其中包括文本层。如果我想通过命令行进行OCR,我不知道有什么方法,但是我可以使用Autohotkey使GUI端自动化。虽然不如命令行可靠或快速,但是在设置工作流操作以最大程度地减少GUI交互后,它可以完成工作。

对于Mac,尽管我还没有尝试在Mac上使用apple脚本,但Autohotkey在PC上的作用与Autohotkey相同。

自动热键与记录器一起提供,因此大部分脚本编写工作对您来说很重要,只需一点点编辑就可以完善,如果需要的话可以循环执行。

我一直在尝试OCRing图像,但尚未通过acrobat完全自动化该过程。命令行是理想的选择,但是还没有找到超过acrobat的高质量OCR引擎,因此我暂时坚持使用acrobat。


0

我最近偶然发现:http : //ocrkit.com/faq.html

不过,您必须在14天后付款


1
欢迎询问不同!我们正在尝试找到最佳答案,这些答案将提供有关为何最佳答案的信息。说明为什么您认为您推荐的软件比其他软件更好。通常,仅链接的答案很容易被删除,因此您始终希望使答案包含所有相关信息。有关如何提供优质答案的信息,请参见如何回答。
fsb

0

我使用Docker进行了高质量的拖放转换。

如果你:

  1. 在Mac上安装Docker
  2. 然后创建一个新的Automator应用
  3. 这些内容包含在“运行Shell脚本”操作中。选择通过输入:"as arguments"

/bin/bash 脚本文字:

cd "`dirname "$1"`"
/usr/local/bin/docker run --rm -v "$(pwd):/home/docker" jbarlow83/OCRmyPDF --force-ocr "`basename "$1"`" "`basename -s .pdf "$1"`-ocr.pdf"

然后,将PDF拖放到上面应该很好,并且您将获得一个类似名称的PDF,并在文件名后附加“ -ocr”。

我想可以很容易地对其进行修改以将文件返回给Automator并复制到某个地方。有关优良的OCRmyPDF泊坞窗软件包的更多详细信息。主要工具(也在其他答案中提到)。

您可以使用“获取指定的查找器项目”操作作为输入在Automator中对其进行测试。

第一次运行时,它花费了更多时间,因为它将需要下载OCRmyPDF的Docker映像(不可见)。在终端中,您也可以运行docker pull jbarlow83/ocrmypdf以加快第一次运行。通常,每高DPI页面运行大约10秒钟,但是即使有表格或图表,也可以自动将文本转换为可转换的结果。在进行OCR之前,我使用Sejda进行裁剪,因此删除了其他页面中的废话边距单词。

--force-ocr参数告诉工具忽略和覆盖任何较早的OCR尝试,在我的情况下,这些尝试通常只是部分的和无用的。


0

OCRKit同时具有AppleScript支持和CLI。从他们的帮助页面

苹果脚本

您还可以编写OCRKit脚本以将其集成到您的特定工作流程中。例如,通过共享文件夹,MFP复制机等来处理传入文件,只需告诉OCRKit打开,然后通过AppleScript处理即可:

tell application "OCRKit"
   -- the wonders of AppleScript POSIX path handling, ...
   open "Users:admin:Desktop:orderform.pdf"
   open POSIX path of "/Users/Admin/Desktop/orderform.pdf"
end tell 

命令行

从OCRKit 2.5版开始,支持直接命令行脚本。与AppleSCript相比,这大大简化了OCRKit在批处理中的使用,允许设置更多选项,并且更加健壮和跨平台。

OCRKit.app/Contents/MacOS/OCRKit \ 
    --lang en | de | fr | es | ... \
    --format pdf | html | rtf | text \
    --no-progress \
    --output out-file in-file

从OCRKit 16.9版开始,支持其他命令行选项:

-r, --recursive directory

递归扫描目录以查找新文件。从OCRKit跳过带有文本层或矢量图形的文件。

--pattern "regex"

递归扫描期间用于匹配文件名的模式。默认值为%.pdf$,建议TIFF为%.tiff?$

--log file

将递归扫描期间的日志文件信息和统计信息写入文件。

--password secret

在批处理过程中,使用秘密密码解密PDF文件。

--test-run [ fast ]

仅在测试模式下运行测试批处理以测试PDF文件或获取页数以估计总处理时间。“快速”仅检查每个文件的第一页,而不检查所有页面进行图像和矢量分析。

--tag name

使用扩展属性名称来标记批处理期间文件的处理状态。macos:OCRKit (%s)将会改用本机macOS Finder标签,或者仅macos:OCRKit不包含state属性。状态属性的顺序是:startedanalyzedprocessed,也可以encrypted

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.