Điều này đã được thảo luận một năm trước đây:
Batch OCR cho nhiều tệp PDF (chưa OCRed)?
Có cách nào để xử lý các tệp PDF OCR chưa được OCRed không? Đây là, tôi nghĩ, tình trạng hiện tại của những thứ liên quan đến hai vấn đề:
Batch OCR PDF
các cửa sổ
Acrobat - Đây là công cụ ocr đơn giản nhất sẽ bó OCR. Vấn đề duy nhất có vẻ là 1) nó sẽ không bỏ qua các tệp đã được OCRed 2) thử ném một loạt các tệp PDF vào nó (một số cũ) và xem nó bị sập. Đó là một lỗi nhỏ. Nó sẽ cảnh báo bạn ở mỗi lỗi mà nó gặp phải (mặc dù bạn có thể yêu cầu phần mềm không thông báo. Nhưng một lần nữa, nó lại chết một cách khủng khiếp trên một số loại PDF nhất định để số dặm của bạn có thể thay đổi.
ABBYY FineReader (Batch / Scansnap), Omnipage - Đây phải là một trong những phần mềm được lập trình tồi tệ nhất mà con người biết đến. Nếu bạn có thể tìm hiểu làm thế nào để tự động hóa hoàn toàn (không cần nhắc) hàng loạt OCR lưu tệp PDF có cùng tên thì vui lòng đăng ở đây. Dường như các giải pháp duy nhất tôi có thể tìm thấy thất bại ở đâu đó - đổi tên, không hoàn toàn tự động, v.v. Tốt nhất, có một cách để làm điều đó, nhưng tài liệu và lập trình rất khủng khiếp mà bạn sẽ không bao giờ tìm ra.
ABBYY FineReader Engine , ABBYY Recognition Server - Đây thực sự là những giải pháp dành cho doanh nghiệp nhiều hơn, có lẽ bạn sẽ tốt hơn nếu chỉ cần acrobat để chạy qua một thư mục và thử và loại bỏ các tệp pdf gây ra lỗi / làm hỏng chương trình hơn là gặp rắc rối khi thử để cài đặt phần mềm đánh giá (giả sử bạn là người dùng cuối đơn giản). Không có vẻ cạnh tranh chi phí cho người dùng nhỏ.
** Máy trạm Autobahn DX ** chi phí của sản phẩm này rất nghiêm ngặt, bạn có thể mua 6 bản acrobat. Không thực sự là một giải pháp người dùng cuối. Nếu bạn là một thiết lập doanh nghiệp, điều này có thể xứng đáng với bạn.
Linux
- WatchOCR - không còn được phát triển và về cơ bản không thể chạy trên các bản phân phối Ubuntu hiện đại
- pdfsandwich - không còn được phát triển, về cơ bản không thể chạy trên các bản phân phối Ubuntu hiện đại
- ** ABBY LINUX OCR ** - đây có thể là tập lệnh và dường như có một số kết quả tốt:
http://www.splitbrain.org/blog/2010-06/15-linux_ nền_software_comparison
Tuy nhiên, giống như nhiều sản phẩm ABBYY khác mà họ tính phí trên trang, một lần nữa, bạn có thể tốt hơn khi cố gắng để Acrobat Batch OCR hoạt động.
** Ocrad, GOCR, OCRopus, tesseract, ** - những thứ này có thể hoạt động nhưng có một vài vấn đề:
- Kết quả OCR không tuyệt vời như, nói, acrobat cho một số trong số này (xem liên kết ở trên).
- Không có chương trình nào nhận tệp PDF và xuất tệp PDF. Trước tiên, bạn phải tạo một tập lệnh và tách PDF ra và chạy các chương trình trên mỗi tập tin và sau đó tập hợp lại tập tin dưới dạng pdf
- Khi bạn làm như vậy, bạn có thể thấy, giống như tôi đã làm, điều đó (tesseract) tạo ra một lớp OCR được chuyển qua. Vì vậy, nếu bạn tìm kiếm từ 'the', bạn sẽ nhận được phần nổi bật của phần bên cạnh từ đó.
Batch DjVu → Chuyển đổi sang PDF - chưa nhìn vào nó, nhưng có vẻ như là một giải pháp vòng quanh khủng khiếp.
Trực tuyến
- PDFcubed.com - thôi nào, không thực sự là một giải pháp hàng loạt.
- ABBYY Cloud OCR - không chắc đây có thực sự là một giải pháp hàng loạt hay không, dù sao đi nữa, bạn phải trả tiền theo trang và điều này có thể khá tốn kém.
Xác định các tệp PDF không OCRed
Đây là một vấn đề dễ dàng hơn một chút, có thể được giải quyết dễ dàng trong Linux và ít hơn nhiều trong Windows. Tôi đã có thể mã một tập lệnh perl bằng cách sử dụng pdffont
để xác định xem các phông chữ có được nhúng để xác định tệp nào không-OCRed hay không.
"Giải pháp" hiện tại
Sử dụng tập lệnh để xác định các tệp pdf không OCRed (vì vậy bạn không chạy lại hàng ngàn tệp PDF OCRed) và sao chép chúng vào một thư mục tạm thời (giữ lại cây thư mục chính xác) và sau đó sử dụng Acrobat trên Windows để chạy với những hy vọng nhỏ hơn lô sẽ không sụp đổ.
sử dụng cùng một tập lệnh nhưng có được một trong các công cụ ocr linux để hoạt động đúng, gây rủi ro cho chất lượng ocr.
Tôi nghĩ rằng tôi sẽ thử # 1, tôi chỉ lo lắng quá nhiều về kết quả của các công cụ OCR của Linux (tôi không cho rằng bất kỳ ai đã thực hiện một phép so sánh) và phá vỡ các tệp và ghép chúng lại với nhau là mã hóa không cần thiết nếu Adobe thực sự có thể bó OCR một thư mục mà không bị nghẹn.
Nếu bạn muốn một giải pháp hoàn toàn miễn phí, bạn sẽ phải sử dụng tập lệnh để xác định các tệp pdf không OCRed (hoặc chỉ chạy lại các tệp OCRed), sau đó sử dụng một trong các công cụ linux để thử và OCR chúng. Teseract dường như có kết quả tốt nhất, nhưng một lần nữa, một số công cụ này không được hỗ trợ tốt trong các phiên bản Ubuntu hiện đại, mặc dù nếu bạn có thể thiết lập và khắc phục sự cố tôi gặp phải khi lớp hình ảnh không khớp với lớp khớp văn bản ( với tesseract) thì bạn sẽ có một giải pháp khá khả thi và một lần nữa Linux> Windows.
Bạn có một giải pháp làm việc để tự động hóa hoàn toàn, các tệp PDF OCR hàng loạt , bỏ qua các tệp OCRed giữ cùng tên, với chất lượng cao không? Nếu vậy, tôi thực sự sẽ đánh giá cao đầu vào.
Tập lệnh Perl để di chuyển các tệp không OCRed vào thư mục tạm thời. Không thể đảm bảo điều này hoạt động và có thể cần phải viết lại, nhưng nếu ai đó làm cho nó hoạt động (giả sử nó không hoạt động) hoặc hoạt động tốt hơn, hãy cho tôi biết và tôi sẽ đăng một phiên bản tốt hơn ở đây.
#!/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\'`;
}
}
}
}
}