LinuxでPDFからOCRでテキストを抽出する方法は?


回答:


25

Cuneiform OCRシステムのBSDライセンスのLinuxポートで成功しました。

バイナリパッケージは利用できないようですので、ソースからビルドする必要があります。ImageMagick C ++ライブラリをインストールして、本質的にすべての入力画像形式をサポートするようにしてください(そうでない場合は、BMPのみを受け入れます)。

短いREADMEファイルは別として、基本的に文書化されていないように見えますが、OCRの結果は非常に優れていることがわかりました。それの良い点は、OCRテキストの位置情報をhOCR形式で出力できることです。これにより、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メタデータは保持されません。


このスクリプトを改善してスペルチェックステージを追加し、認識ステップのエラーを修正するアイデアはありますか?
グーカンSeverの

@GökhanSever、ユーザーがスペルミス/不明な単語の置換を促すプロンプトに対話型スペルチェックを追加するということですか?aspell check --mode=html "$base.html"cuneiformを実行した直後にスクリプトのようなものを追加することで、それができると思います。
ユッカマティライネン

これは1つの解決策です。ただし、テキストのコンテキスト全体を確認しないと、修正するのは困難です。ocrfeeder内に構築されたインターフェースを見る方がいいでしょう。
グーカンSeverの

1
ちなみに、私は、文字認識のためたTesseractを使用しますと楔形文字行を置き換える:たTesseract「$ページ」「$ベース」HOCR
グーカンSeverの

1
小さな修正:少なくとも英語以外の言語(ここではドイツ語(= deu)など)のtesseractの行は次のとおりです。 `tesseract" $ page "" $ base "-l deu hocr`(もちろん ``を削除する必要があります) 。
ケクス線量

14

pdftotextが機能するかどうかを確認します。マシンにない場合は、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-filename

  • ImageMagikユーティリティ:変換を支援するために使用できるImageMagikの使用について、SuperUserサイトに他の質問があります。

    foo.pdf foo.pngを変換

OCRで画像をテキストに変換する

ウィキペディアのOCRソフトウェアリストから取得


2
このプログラムは手書きのテキスト文書でも機能しますか?
イボフリップ

1
いいえ、OCR機能を備えているとは思いません。PDFに埋め込まれたテキストを抽出するだけです。マニュアルページ:linux.die.net/man/1/pdftotext
nagul

ええ、これはすでにテキストが埋め込まれているpdfドキュメントで機能します。私の場合はそうではありません。
ヘルダーSリベイロ

1
@ obvio171 OCRをあなたのケースで動作させるために見つけることができる最良のオプションを追加しました。
nagul 09

12

Googleドキュメントがしますテキストにアップロードした画像/ PDF文書を変換するOCRを使用しています。私はそれで大成功を収めました。

彼らは、巨大なGoogleブックスプロジェクトに使用されるOCRシステムを使用しています。

ただし、2 MBのサイズのPDFのみが処理に受け入れられることに注意する必要があります。

更新
1.試してみるには、Webブラウザーから<2MBのPDFをGoogleドキュメントにアップロードします。
2.アップロードされたドキュメントを右クリックし、「Googleドキュメントで開く」をクリックします。
... Googleドキュメントはテキストに変換され、同じ名前の新しいファイルに出力されますが、同じフォルダーにGoogleドキュメントタイプがあります。


答えは実際にはUbuntu固有ではありませんが、本当にありがとうございます。素晴らしいソリューションです!:)
Pitto

これは本当に役に立ちました:)昨日、50 MBのファイルをアップロードしました。サイズ制限を増やしたようです。
ガウラブ

2

Geza KovacsはUbuntuパッケージを作成しました。これは、基本的にhocr2pdfJukkaが提案したように使用するスクリプトですが、セットアップが少し速くなります。

パッケージの詳細を含むGezaのUbuntu フォーラム投稿から...

リポジトリを追加してUbuntuにインストールする

sudo add-apt-repository ppa:gezakovacs/pdfocr
sudo apt-get update
sudo apt-get install pdfocr

ファイルでocrを実行する

pdfocr -i input.pdf -o output.pdf

コードのGitHubリポジトリ https://github.com/gkovacs/pdfocr/


2

pypdfocrそれを使用するのが最善で最も簡単な方法は、pdfを変更しません

pypdfocr your_document.pdf

最後your_document_ocr.pdfに、検索可能なテキストを使用した別の方法があります。アプリは画像の品質を変更しません。オーバーレイテキストを追加して、ファイルのサイズを少し大きくします。

2018年11月3日更新:

pypdfocr2016年以降サポートされなくなり、メンテナンスされていないためにいくつかの問題に気づきました。ocrmypdfモジュール)は類似の仕事をし、次のように使用できます:

ocrmypdf in.pdf out.pdf

インストールする:

pip install ocrmypdf

または

apt install ocrmypdf

1

PDFBeadsは私に適しています。このスレッド「スキャンされた画像を単一のPDFファイルに変換する」は私を立ち上げて実行しました。白黒の本をスキャンするには、次のことが必要です。

  1. PDFのすべてのページに画像を作成します。上記のgsの例のいずれかが動作するはずです
  2. 各ページのhOCR出力を生成します。私はtesseractを使用しました(ただし、楔形文字の方がうまく機能するようです)。
  3. 画像とhOCRファイルを新しいフォルダーに移動します。ファイル名は対応する必要があるため、file001.tifにはfile001.html、file002.tif file002.htmlなどが必要です。
  4. 新しいフォルダーで、実行します

    pdfbeads * > ../Output.pdf
    

これにより、照合され、OCRされたPDFが親ディレクトリに配置されます。


1

tesseractを使用する別のスクリプト:

#!/bin/bash
# Run OCR on a multi-page PDF file and create a txt with the
# extracted text in hidden layer. Requires tesseract, gs.
# Usage: ./pdf2ocr.sh input.pdf output.txt

set -e

input="$1"
output="$2"

tmpdir="$(mktemp -d)"

# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiff24nc -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}"
    tesseract "$base.tiff" $base
done

# combine the pages into one txt
cat "$tmpdir"/page-*.txt > $output

rm -rf -- "$tmpdir"

1

Asprise OCRライブラリは、Linuxのほとんどのバージョンで動作します。PDFの入力と出力を検索PDFとして使用できます。

商用パッケージです。Linux用Asprise OCR SDKの無料コピーをここからダウンロードし、次のように実行します。

aocr.sh input.pdf pdf

注:スタンドアロンの「pdf」は出力形式を指定します。

免責事項:私は上記の製品を生産している会社の従業員です。


この投稿では、製品がそれを実行できると述べています。これは、コメントとして投稿する必要がある有用なヒントです。実際に問題を解決する方法については説明していませんが、これが答えです。答えを広げて、誰かが解決方法を理解できるようにできますか?
fixer1234

@ fixer1234に感謝します。コマンドを含めるように編集しました。
Aspriseサポート

0

Apache PDFBoxを試して、PDFファイルからテキストコンテンツを抽出します。PDFファイルに埋め込まれた画像の場合は、ABBYY FineReader Engine CLI for Linuxを使用してテキストを抽出します。


ABBYY OCRは、私が試した中で最も能力の低いプログラムの1つである、非常に哀れなものであることがわかりました。それは、典型的なボディテキストサイズの標準フォントテキストの本当にクリーンなイメージとの適切なかもしれませんがない複数のフォント、サイズ混合、複雑なレイアウト、グラフィック、ライン、などと
fixer1234

私も試しました、それはうまくいきます。疑問がありますが、助けてもらえますか?
プラヴィーンクマールKR

あなたが必要とするものがここの他の答えでカバーされないならば、するべき最も良いことはあなた自身の質問をすることです。それはそれを多くの目にさらすでしょう。
fixer1234
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.