web-dev-qa-db-ja.com

PDFをテキスト検索可能なPDFに変換する方法は?

PDFでスキャンしたドキュメントが多数あり、それらを検索できるようにしたいと考えています。どうやってやるの?

基本的に、pdfをOCRしてから、抽出したテキストを新しいpdfにブレンドする必要があります。私はいくつかの異なる解決策を試みましたが、うまくいきませんでした( OCR情報をPDFに追加する にあるものを含む)。

  1. pdfocr (これにより、この問題が発生します: https://github.com/gkovacs/pdfocr/issues/7
  2. pdfsandwich (ソフトウェアセンターでは、このパッケージは品質が悪いためインストールしないでください)
  3. OCRfeeder(ソフトウェアセンター内)はodtに適切にエクスポートしますが、pdfにエクスポートしても反応しません。
  4. Gscan2pdf 報告されているように、すべて黒の(ただし検索可能な)画像をエクスポートします この説明では
  5. Pdfxchangeビューアーは、500ページを超えるファイルでocrをその場で実行できるとは思いません。

知らないソフトウェアパッケージはありますか?または、これを行うスクリプトですか?

17
don.joey

Ubuntu <16.04

グルタニメートのコメントに続いて、私は実用的な解決策を見つけました。 OCRmyPDFスクリプト です。

git clone https://github.com/jbarlow83/OCRmyPDF
cd OCRmyPDF
sh ./OCRmyPDF.sh -h  # to see the usage

GNUパラレルをインストールする必要があるというメッセージが表示された場合。 ( https://askubuntu.com/a/298598/115155 に続く)で行うことができます(2行目はオプションで、フレーバーとバージョンによって異なります):

Sudo apt-get install parallel
Sudo rm /etc/parallel/config

最後に、次のコマンドを使用してPDFをOCRできます。

sh ./OCRmyPDF.sh input.pdf output.pdf  # change input and output to the files you want

コマンドが応答しないと思われる場合は、-vフラグ(-vvまたは-vvvとしてインクリメンタルに使用できます)を使用して詳細度を上げることができます。最初に短いPDFで結果をテストするのが最善かもしれません。次のようにPDFを短縮できます。

pdftk A=input.pdf cat A1-5 output output.pdf

Ubuntu> = 16.04

Ubuntu 16.04の時点で、OCRmyPDFはaptを通じて利用可能になりました。ただ走れ

Sudo apt install ocrmypdf
ocrmypdf -h   # to see the usage

最後に、次のコマンドを使用してPDFをOCRできます。

ocrmypdf input.pdf output.pdf  # change input and output to the files you want

コマンドが応答しないと思われる場合は、-vフラグ(-vvまたは-vvvとしてインクリメンタルに使用できます)を使用して詳細度を上げることができます。最初に短いPDFで結果をテストするのが最善かもしれません。次のようにPDFを短縮できます。

pdftk A=input.pdf cat A1-5 output output.pdf

何か質問がある場合は new Github Repo をご覧ください。

11
don.joey

pdfsandwichは、まさにこのジョブを実行します。ソフトウェアセンターにパッケージが提供されていることは知りませんでしたが、プロジェクトのWebサイトでUbuntu debパッケージを提供しています( http://www.tobias-elze.de/pdfsandwich/ 詳細))、現在の最新バージョン(0.1.2)を含む。これはまだソフトウェアセンターに存在する可能性は低い。

スキャンしたファイルscanned_file.pdfがある場合は、単に呼び出します

pdfsandwich scanned_file.pdf

スキャンされたページに認識されたテキストが追加されたファイルscanned_file_ocr.pdfを生成します。

既存のほとんどのソリューションと比較して、インストールされているtesseractバージョンを自動検出し、それに応じて動作を調整します。さらに、OCRプロセスの前にスキャン画像の前処理を実行します。たとえば、スキュー補正や暗いエッジの削除など、光学文字認識を大幅に改善できます。

免責事項:私はpdfsandwichの開発者であるため、非常に偏見があります。

4
Tobias Elze

@ don.joeyはocrmypdfスクリプトで回答しました。ただし、今すぐ直接インストールできます(16.10以降)。

Sudo apt install ocrmypdf

次に、必要なtesseract言語をインストールする必要があります。

システムにすでにある言語をリストするには、次のように入力します。

tesseract --list-langs

紛失した場合は、インストールしてください。例えば、

Sudo apt install tesseract-ocr-spa

次のコマンドを使用して、検索可能なPDF(品質はスキャンしたドキュメントによって異なります)を生成できるようになりました

ocrmypdf -l 'spa' old.pdf new.pdf

もちろん、いくつかの追加オプションについては、manページを確認してください。

4
Ludenticus

OS:Ubuntu 18.04

まず、tesseract-ocrをインストールします:

apt-cache show tesseract-ocr
Sudo apt-get update && Sudo apt-get upgrade
apt-get install tesseract-ocr --print-uris
apt-get install tesseract-ocr
Sudo !!

Tesseractで英語以外の言語を使用する場合は、対応するlaguageパッケージをインストールする必要があります。たとえば、ポルトガル語の場合、次のことを行う必要があります。

Sudo apt-get install tesseract-ocr-por

そうしないと、エラーが発生します。

Error opening data file /usr/share/tesseract-ocr/4.00/tessdata/por.traineddata
Please make sure the TESSDATA_PREFIX environment variable is set to your 
"tessdata" directory.
Failed loading language 'por'
Tesseract couldn't load any languages!
Could not initialize tesseract.

「tesseract PDF」をGoogleで検索すると、おそらく やや時代遅れの投稿 が見つかります。ただし、いくつかの有用なヒントが得られます。まず、.pdfファイルを.tiffファイルに変換する必要があります。実行:

convert -density 125 originalfile.pdf -depth 8 -alpha Off newfile.tiff

古い投稿のように、alpha -Offの追加を忘れると、次のエラーが表示されます。

Tesseract Open Source OCR Engine v4.0.0-beta.1 with Leptonica
Error in pixReadFromTiffStream: spp not in set {1,3,4}

これで、最終コマンドを実行できます。元のPDFがポルトガル語である特定の場合、次のコマンドが必要になります。

tesseract -l por newfile.tiff output pdf 

生成されたファイルの名前はoutput.pdfになります。たとえば、PDFがフランス語の場合、対応するtesseract-ocr-fraをインストールした後、次を実行します。

tesseract -l fra newfile.tiff output pdf 

また、目的のファイルはoutput.pdfになります。

0
evaristegd

OCRfeederにはバグがあります

/usr/lib/python2.7/dist-packages/reportlab/pdfgen/textobject.py

436行目:

            lines = asUnicode(stuff).strip().split('\n')
# bug here, was:
#            lines = '\n'.split(asUnicode(stuff).strip())

これを変更し、それは私のために働いた

0
AndreR