【Python】pymupdfを使ってpdfのデータを読み取ってみる

  • 2023年12月9日
  • 2023年12月9日
  • python

こんにちは。

野中やすおです。

以前の記事で、tabula-pyを使ってpdfのテーブルデータを読み込む内容を紹介しました。

関連記事

こんにちは。 野中やすおです。 仕事でPythonを使ってpdfをテーブルデータを読み込むことがあり、tabula-pyを活用する機会がありました。 ということもあって今回のtabula-pyというライブラリ使ってPDFフ[…]

今回の記事では、より汎用的にpdfのデータを読み込むことができるpymupdfを紹介します。

pymypdfとは?

pymupdfは、pdf(やその他ドキュメント形式にも対応)ドキュメントのデータ抽出・分析・変換および操作をすることができるPythonライブラリになります。

以下にpymupdfと他のpdfを読み込むライブラリのパフォーマンスを比較した記事があるのですが、pymupdfは一部の実装でCを使っていることもあって、とにかくドキュメントの読み込みが早いという紹介がされています。

PyMuPDF is a high-performance Python library for data extrac…

またEPUBやSVG、画像ファイルにも対応していてドキュメントを操作したい際に選択肢の1つとなるライブラリかなと思います。

pymupdfのインストール方法

pymupdfのインストール方法はpipですることができます。

詳しいバージョン情報については以下のページから参考にしてください。

PyPI

A high performance Python library for data extraction, analy…

pymupdfの使い方

今回の記事では、東京都の「令和4年度における決算の状況」を表すpdfファイルを読み込んでいきましょう。

pymupdfの使い方は簡単でまずはfitzをインポートします(pymupdfどこいった?)。ただし、直接ウェブ上のPDFファイルを開くことはできないので、まずはファイルをダウンロードし、ローカルに保存してから読み込む必要があります。なのでrequestsライブラリを使って以下のように書けます。

ローカルに保存したpdfファイルをfitz.open で読み込むことができます。今回読み込むファイルはpdfなので、filetypeオプションで”pdf”を指定してあげます。

pdf_document[0]とすると1ページ目のファイルが読み込まれます。そしてget_text(“text”)とするとテキストが抽出されます。その結果を出力しています。

これだけだとつまらないので、より具体的な使い方を次に書きます。

「第1表」という文言をpdf上でみつけて、その下のテーブルをdfとして出力

pdf内に「第1表 令和4年度決算収支」という文言とそれを示すテーブルが存在するので、pdfファイルから文言を検索し、その下のテーブルをDataFrameとして抽出する処理を実行します。ただし、第1表とつくテーブルは複数あるので一番はじめに出てくる文言で抽出します。

 

出力結果


一応、第1表 令和4年度決算収支のテーブルをdfとして取得できました!ただしあまりきれいに抽出してできていないですね(汗)

find_tablesメソッドは、ページ上のテーブルを検索し、テーブルオブジェクトして返します。その後は、extractメソッドを使用して、リストのリストとして返した結果をdfにしています。

もう一つの方法として、テーブルオブジェクトの結果を直接dfで返すto_pandasメソッドもあります。

出力結果


出力結果は特に変わらなさそうなので、dfで返却したい場合は、to_pandasメソッドを利用するのがよさそうです!

そのほかにもfind_tableメソッドにはさまざまなオプションは出力方法があります。

PyMuPDF is a high-performance Python library for data extrac…

実際に業務で活用する際には、ドキュメントを見ながら色々と試行錯誤をしてく必要がありますね。

最後に

以上pymupdfの基本的な使い方を解説しました!

pymupdfはとても柔軟なライブラリで、できることも多く、かつドキュメントも充実しているので私も今後積極的に使っていきたいと思います!