首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用德国Fraktur编写的5800+ PDF的批处理OCR

用德国Fraktur编写的5800+ PDF的批处理OCR
EN

Stack Overflow用户
提问于 2017-06-29 09:02:28
回答 1查看 489关注 0票数 1

我想在Mac上使用开源命令行工具对OCR进行批处理,大约5800 PDF (每个PDF包含上一个问题这里的2到6页之间)。这次冒险的主要建议是,我想从所有这些PDF的文本中检索尽可能可靠的名字(最重要的是姓氏)。这里就是一个如何看待问题的例子。

在这一点上,我不知道具体如何进行。你怎么做?

我想首先将所有多页PDF转换为单个页面映像,作为pngjpgtif,并使用以下命令将与一个PDF相关的所有图像移动到相应的文件夹中:

代码语言:javascript
复制
time for i in *.pdf; do mkdir "${i%.pdf}"; convert -colorspace GRAY -resize 3000x -units PixelsPerInch  "$i" "${i%.pdf}.jpg”; mv *.jpg "${i%.pdf}"; done 

作为第二步,我将有一个问题,我的OCR脚本将需要进入每个文件夹,发挥其魔力,并留下它,以便继续下一个。我不知道怎么写这个。剧本的核心是:

代码语言:javascript
复制
tesseract --tessdata-dir /usr/local/share/tessdata/ --oem 3 --psm 11 -l deu_frak *.jpg test.txt 

由于PDF代表的旧报纸文章,几乎每天都发表在1810至1832年间,它们是用德语弗雷克图尔写的。对于tesseract来说,这种字体似乎特别具有挑战性。我的文本输出通常是加扰的,例如,在上面链接的文章中,我只能得到第一页检测到的791到801的对话。根据所选选项的不同,不确定有风险的名称。

最后,我将使用银搜索器查找所有5800 txt文件中的名称,我希望获得。

代码语言:javascript
复制
time rg -i search_term_here

最后,如何确保我得到尽可能好的OCR输出,从而获得文本中的大多数名称?

P.S.:顺便问一下,tesseract 4什么时候才能获得Mac和德国Fraktur的培训数据?

编辑:

这些是命令,我用来实现我想要的。,尽管tesseract的输出仍有很大的改进.

将每个PDF转换为jpg,并将它们移动到相应的文件夹以保持顺序:

代码语言:javascript
复制
time parallel -j 8 'mkdir {.} && convert {} -colorspace GRAY -resize 3000x -units PixelsPerInch {.}/{.}.jpg' ::: *.pdf

使用Fred的ImageMagick脚本文本清洁器 (为了提高可用性,我已经移到/usr/local/bin/上了)来稍微增强tesseract的输出:

代码语言:javascript
复制
time find . -name \*.jpg | parallel textcleaner -g -e stretch -f 25 -o 10 -u -s 1 -T -p 10 {} {}

拟化分析:

代码语言:javascript
复制
time find . -name \*.jpg | parallel -j 8 “tesseract {} {.}.txt —tessdata-dir /usr/local/share/tessdata/ -l deu_frak”

银器搜索姓氏

代码语言:javascript
复制
time rg -t txt -i term
EN

Stack Overflow用户

回答已采纳

发布于 2017-06-29 09:29:53

首先,如果您还没有安装自制,我建议您安装它--它是Mac的一个优秀的包管理器。

然后,我建议您安装Poppler包以获得pdfimages工具:

代码语言:javascript
复制
brew install poppler

然后,您可以从这样的PDF中提取图像:

代码语言:javascript
复制
pdfimages SomeFile.pdf root

您将得到名为root-000.ppmroot-001.ppm的文件,这两个文件可以很好地处理tesseract。或者,如果您需要PNG图像,可以添加-png。我会避免JPEG,因为有损压缩。

如果您能做到这一点,那么我建议您安装GNU并行,其中包括:

代码语言:javascript
复制
brew install parallel

我们可以沿着直线平行地做OCR。

请只在一个小目录中尝试以下操作,其中包含5-6份原件

我们还可以使用GNU并行并行提取图像,如下所示:

代码语言:javascript
复制
parallel 'mkdir {.} && pdfimages {} {.}/{.}' ::: *pdf

至于使用弗雷德的textcleanerGNU并行,以及想要覆盖JPEG,我想您会想要这样的东西:

代码语言:javascript
复制
find . -name \*.jpg | parallel textcleaner -g -e stretch -f 25 -o 10 -u -s 1 -T -p 10 {} {}
票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44820673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档