Это обсуждалось год назад здесь:
Пакетное распознавание текста для многих PDF-файлов (еще не распознано)?
Есть ли способ пакетной обработки документов OCR PDF, которые еще не были распознаны? Это, я думаю, текущее состояние дел, связанных с двумя проблемами:
Пакетное распознавание PDF
Windows
Acrobat - это самый простой движок OCR, который будет использовать OCR. Единственная проблема, по-видимому, заключается в том, что: 1) он не пропускает файлы, которые уже были распознаны; 2) попробуйте бросить в него кучу PDF-файлов (некоторые старые) и посмотреть, как он вылетает. Это немного глючит. Он будет предупреждать вас при каждой ошибке (хотя вы можете указать программному обеспечению не уведомлять об этом). Но опять же, он ужасно умирает на некоторых типах PDF, поэтому ваш пробег может отличаться.
ABBYY FineReader (Batch/Scansnap), Omnipage - Это, должно быть, некоторые из худших запрограммированных частей программного обеспечения, известных человеку. Если вы можете узнать, как полностью автоматизировать (без подсказок) пакетное OCR сохранения PDF-файлов с тем же именем, пожалуйста, напишите здесь. Кажется, единственные решения, которые я мог найти где-то не удалось - переименование, не полностью автоматизировано и т.д. И т.д. В лучшем случае, есть способ сделать это, но документация и программирование настолько ужасны, что вы никогда не узнаете.
ABBYY FineReader Engine, ABBYY Recognition Server - это действительно больше корпоративных решений, вам, вероятно, было бы лучше просто заставить acrobat запускать над папкой и пытаться отсеивать PDF-файлы, которые приводят к ошибкам / сбоям программы, чем испытывать трудности с попытками установить оценочное программное обеспечение (при условии, что вы простой конечный пользователь). Не кажется конкурентоспособным по цене для маленького пользователя.
** Рабочая станция Autobahn DX ** стоимость этого продукта настолько непомерно высока, что вы, вероятно, можете купить 6 копий акробата. Не совсем решение для конечного пользователя. Если вы настроены на предприятии, это может стоить вам.
Linux
- WatchOCR - больше не разрабатывается и практически не работает на современных дистрибутивах Ubuntu
- pdfsandwich - больше не разрабатывается, практически невозможно запустить на современных дистрибутивах Ubuntu
- ** ABBY LINUX OCR ** - это должно быть сценарием, и, похоже, дает хорошие результаты:
http://www.splitbrain.org/blog/2010-06/15-linux_ocr_software_comparison
Однако, как и многие другие продукты ABBYY, которые они заряжают на странице, опять же, возможно, вам стоит попробовать заставить Acrobat Batch OCR работать.
** Ocrad, GOCR, OCRopus, tesseract, ** - это может работать, но есть несколько проблем:
- Результаты распознавания не такие большие, как, скажем, у акробатов для некоторых из них (см. Ссылку выше).
- Ни одна из программ не берет файл PDF и не выводит файл PDF. Вы должны создать сценарий и сначала разбить PDF на части и запустить программы для каждого, а затем снова собрать файл в формате PDF.
- Как только вы это сделаете, вы, как и я, можете обнаружить, что (tesseract) создает слой OCR, который смещен. Поэтому, если вы ищете слово «the», вы выделите часть слова рядом с ним.
Пакетное DjVu → Конвертировать в PDF - не смотрел на это, но кажется ужасным решением.
онлайн
- PDFcubed.com - давай, не совсем пакетное решение.
- ABBYY Cloud OCR - не уверен, что это действительно пакетное решение, так или иначе, вам придется платить за страницу, и это может быть довольно дорогим.
Выявление неопубликованных PDF-файлов
Это немного более простая проблема, которая может быть легко решена в Linux и намного меньше в Windows. Мне удалось закодировать Perl-скрипт, используя pdffont
чтобы определить, встроены ли шрифты, чтобы определить, какие файлы не-OCRed.
Актуальные "решения"
Используйте сценарий для идентификации PDF-файлов без OCR (чтобы вы не перезапускали более тысячи PDF-файлов с OCR) и скопируйте их во временный каталог (сохраняя правильное дерево каталогов), а затем используйте Acrobat в Windows, чтобы запустить их, надеясь, что меньший размер партии не потерпят крах.
используйте тот же скрипт, но получите один из инструментов linux ocr для правильной работы, рискуя качеством ocr.
Я думаю, что я собираюсь попробовать # 1, я просто слишком беспокоюсь о результатах инструментов OCR в Linux (я не думаю, что кто-то сделал сравнение), и кажется, что разбить файлы и соединить их снова быть ненужным кодированием, если Adobe может на самом деле пакетное OCR каталог без удушья.
Если вы хотите получить полностью бесплатное решение, вам нужно будет использовать сценарий, чтобы идентифицировать pdf-файлы без OCR (или просто перезапустить OCR-файлы), а затем использовать один из инструментов linux, чтобы попытаться их OCR. Тезеракт, кажется, дает лучшие результаты, но, опять же, некоторые из этих инструментов не очень хорошо поддерживаются в современных версиях Ubuntu, хотя, если вы можете установить его и исправить проблему, у меня была проблема, когда слой изображения не соответствовал слою соответствия текста ( с tesseract) тогда у вас будет довольно работоспособное решение и еще раз Linux> Windows.
Есть ли у вас работающее решение для полной автоматизации, пакетной обработки документов OCR PDF, пропуска уже существующих файлов OCR с тем же именем и высокого качества? Если это так, я был бы очень признателен за вклад.
Скрипт Perl для перемещения файлов без OCRed во временный каталог. Не могу гарантировать, что это работает, и, вероятно, его нужно переписать, но если кто-то заставляет его работать (если он не работает) или работает лучше, дайте мне знать, и я выложу лучшую версию здесь.
#!/usr/bin/perl
# move non-ocred files to a directory
# change variables below, you need a base dir (like /home/joe/), and a sourcedirectory and output
# direcotry (e.g books and tempdir)
# move all your pdfs to the sourcedirectory
use warnings;
use strict;
# need to install these modules with CPAN or your distros installer (e.g. apt-get)
use CAM::PDF;
use File::Find;
use File::Basename;
use File::Copy;
#use PDF::OCR2;
#$PDF::OCR2::CHECK_PDF = 1;
#$PDF::OCR2::REPAIR_XREF = 1;
my $basedir = '/your/base/directory';
my $sourcedirectory = $basedir.'/books/';
my @exts = qw(.pdf);
my $count = 0;
my $outputroot = $basedir.'/tempdir/';
open( WRITE, >>$basedir.'/errors.txt' );
#check file
#my $pdf = PDF::OCR2->new($basedir.'/tempfile.pdf');
#print $pdf->page(10)->text;
find(
{
wanted => \&process_file,
# no_chdir => 1
},
$sourcedirectory
);
close(WRITE);
sub process_file {
#must be a file
if ( -f $_ ) {
my $file = $_;
#must be a pdf
my ( $dir, $name, $ext ) = fileparse( $_, @exts );
if ( $ext eq '.pdf' ) {
#check if pdf is ocred
my $command = "pdffonts \'$file\'";
my $output = `$command`;
if ( !( $output =~ /yes/ || $output =~ /no/ ) ) {
#print "$file - Not OCRed\n";
my $currentdir = $File::Find::dir;
if ( $currentdir =~ /$sourcedirectory(.+)/ ) {
#if directory doesn't exist, create
unless(-d $outputroot.$1){
system("mkdir -p $outputroot$1");
}
#copy over file
my $fromfile = "$currentdir/$file";
my $tofile = "$outputroot$1/$file";
print "copy from: $fromfile\n";
print "copy to: $tofile\n";
copy($fromfile, $tofile) or die "Copy failed: $!";
# `touch $outputroot$1/\'$file\'`;
}
}
}
}
}