Pythonでpdfを画像として認識しテキストを抽出を試してみる(pyocr)
pdfのデータからepubを作成することを調べていて、
前回、Pythonを使ってPDFファイルからテキストを抽出する方法を試しました。
PDFファイルによっては抽出できないものもありましたので、今回はPDFとしてではなく、画像として認識し文字を抽出できるかどうか試していきたいと思います。
環境はMacOSを使用します。
準備
PyOCRのインストール
PyOCRは、Python用の光学式文字認識(OCR)ツールのラッパーです。
pip install pyocr
Tesseractのインストール
OCR engineであるTesseractをインストールします。
brew install tesseract
pdf2imageのインストール
PDFを画像ファイルに変換してくれるライブラリ pdf2imageをインストールします。
pip install pdf2image
Macの場合、poppler もインストールする必要がありました。
※ popplerはPDFレンダリングライブラリ
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 2> /dev/null brew install poppler
実行してみる
実験用コード
from PIL import Image import sys import pyocr import pyocr.builders import pdf2image tools = pyocr.get_available_tools() if len(tools) == 0: print("No OCR tool found") sys.exit(1) # The tools are returned in the recommended order of usage tool = tools[0] print("Will use tool '%s'" % (tool.get_name())) # Ex: Will use tool 'libtesseract' # pdfから画像オブジェクトに images = pdf2image.convert_from_path("2019-11-Chaos_Engineering_Whitepaper.pdf", dpi=200, fmt='jpg') lang = 'eng' #lang = 'jpn' # 画像オブジェクトからテキストに for image in images: txt = tool.image_to_string( image, lang=lang, builder=pyocr.builders.TextBuilder() ) print(txt)
英語のPDF
前回も使った 2019-11-Chaos_Engineering_Whitepaper のpdfを使用してみます。
1ページ目:
このページのテキストを読み込むと、
と出力されました。
正しく読み込めてますね。
2ページ目
このページはどうでしょう。
最初の大きなDの文字以外は正しく読み込んでいます。
日本語を含むPDF
前回抽出できなかった 総務省のデジタル・ディバイド解消に向けた技術等研究開発 というファイルで試してみます。
日本語を含むので、ソースコードは
lang = 'jpn'
と変更します。
スクリプトを実行すると、
とテキストの抽出はできました。
ただ、全て抽出できたわけではありません。
2ページ目や3ページ目も同様に全て抽出できたわけではありませんでした。
最後に
OCRでPDFのテキスト抽出を試してみました。
細かなセッティングなどはしていないので精度はまちまちですが、それでも前進はした感じです。
最終的にやりたいことに向けて色々なパターンのファイルで実験してくしかなさそうだなと。興味のある方は是非色々と試してみてください、
※ 以下、colabで試した時のipynbファイルです
000667876.pdf
の部分は自身の持つPDFファイルに変換する