PDFでスキャンしたドキュメントが多数あり、それらを検索できるようにしたいと考えています。どうやってやるの?
基本的に、pdfをOCRしてから、抽出したテキストを新しいpdfにブレンドする必要があります。私はいくつかの異なる解決策を試みましたが、うまくいきませんでした( OCR情報をPDFに追加する にあるものを含む)。
知らないソフトウェアパッケージはありますか?または、これを行うスクリプトですか?
グルタニメートのコメントに続いて、私は実用的な解決策を見つけました。 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の時点で、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 をご覧ください。
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
の開発者であるため、非常に偏見があります。
@ 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ページを確認してください。
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
になります。
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())
これを変更し、それは私のために働いた