はじめに
初めまして、エンジニアとして株式会社Photoructionでアルバイト中の伊藤純平です!
最近は春のじめっとした暑さにやられて、脱いだら寒い、着たら暑いというジレンマに陥っています。あまりにも気温差が激しいので、服装選びが毎朝のハードルになってしまっていますね。
今回の記事では、PDFからテキスト情報を抽出する方法について説明します。
自分のチームではPDFを扱うことが多く、これらをPyMuPDFと呼ばれるPythonのライブラリを用いて操作しています。
自分が詰まったテキストの位置、色など全テキスト情報の取得について、自分の学びも含めてお伝えできたらなと思います!
PyMuPDFの読み込みや線の取得などについては、過去の記事をぜひ参考にしてください!
導入
PythonでPDFを操作するためのライブラリにもいくつかあり、今回はPymupdfを使っていきます!
まずはPyMuPDFをインストールし、使うためにfitzをインポートします。
pip install PyMuPDF
import fitz
PDFの読み込み
今回の記事はベクター形式のPDFに対応してます!
ベクター形式とはなんぞやという方はこちらを参照してみてください。
# PDFファイルパスの読み込み pdf_path = input() # 1ページ目の要素を取得 document = fitz.open(pdf_path) page = document[0] print(page.get_text("dict"))
とすると詳細な文字情報が辞書形式で出力されます!
以下はその一例です。
//各ブロックのバウンディングボックス {'blocks': [{'bbox': (319.2799987792969,582.891845703125,344.1431884765625,588.4169921875), 'lines': [{'bbox': (319.2799987792969,582.891845703125,344.1431884765625,588.4169921875), //各行のバウンディングボックス 'dir': (1.0, 0.0), //行の方向 'spans': [{'ascender': 0.339375, //文節のリスト 'bbox': (319.2799987792969,582.891845703125,344.1431884765625,588.4169921875), //文節のバウンディングボックス 'color': 0, //文節の色 'descender': 1.140625, //文節の高さ 'flags': 8, //文節の文字数 'font': 'MS-Gothic', //文節のフォント 'origin': (319.2799987792969,587.6400146484375), //文節の原点 'size': 5.52515983581543, //文節のサイズ 'text': 'Hello_world'}], //文節の文字 'wmode': 0}], 'number': 0, 'type': 0}, .....}
上のようにテキスト情報以外にもフォントや位置、色、サイズなど情報を取得することができます!
そのほかの方法
PDFファイルから形を保持したままTextにしたいという方は、こちらも便利かもしれません。
import sys from fitz.**main** import main as fitz_command # PDFファイルパスの読み込み pdf_path = input() cmd = f"gettext {pdf_path}".split() saved_parms = sys.argv[1:] sys.argv[1:] = cmd fitz_command() sys.argv[1:] = saved_parms
これを実行することで左下のようなpdfファイルから右下のようにテキストファイルへとテキストを抽出することもできます。
終わりに
いかがでしたでしょうか。
以上が、PDFから文字のすべての情報を取り出す方法についての解説でした。
PDFを扱う際には、PyMuPDFはとても便利なツールです。今回紹介した文字取り出し以外にも描画情報や画像情報を取り出したりすることもできます。
PythonでPDFを扱う際には、ぜひPyMuPDFを試してみてください!
参考
Introduction - PyMuPDF 1.21.0 documentation
株式会社フォトラクションでは一緒に働く仲間を募集しています