nikkie-ftnextの日記

イベントレポートや読書メモを発信

pdfminer.sixでPDFを読み取る(extract_textにパスを渡すだけととっても簡単です!)

はじめに

アクアトープ16話、やっぱりよい😭 nikkieです。

pdfminer.sixというライブラリを素振りしました。

目次

PDFの内容を読み取りたい

実質現金1の『面倒なことはChatGPTにやらせよう』。
サポートサイトを見ていると、PDFを読み取ってもらうプロンプトがあります

10.2より

これは日本語の文書が書かれたPDFファイルです。PDFMinerを使ってこのPDFファイルを読み込み、書かれていることをそのまま表示してください。

PDFMiner!

pdfminer.six

PDFMinerは2020年以降メンテナンスされていません。
アクティブなフォークがpdfminer.six!

ChatGPTにやらせてもよいですが、今回はPythonのプログラムを書いてみます。
サポートサイトにならって情報通信白書を渡しましょう。
第2章 第3節「インターネット上での偽・誤情報の拡散等」を使ってみます
https://www.soumu.go.jp/johotsusintokei/whitepaper/ja/r05/pdf/n2300000.pdf

extract_text

上位のAPIが用意されていて、非常に簡単に使えます!
https://github.com/pdfminer/pdfminer.six/tree/20231228?tab=readme-ov-file#how-to-use

  • Python 3.11.8
  • pdfminer.six 20231228
>>> from pdfminer.high_level import extract_text
>>> text = extract_text("n2300000.pdf")
>>> len(text)
21892
>>> text[:100]
'データの流通・活用の現状と課題\n\n第 3 節\n\nインターネット上での偽・誤情報の拡散等\n\n第第33 節  インターネット上での偽・誤情報の拡散等\n節  インターネット上での偽・誤情報の拡散等\n\nSNS'

読み取れました!

Dockerイメージでも試してみる

手元の環境(macOS)は日本語環境なのですが、日本語のPDFを日本語ではない環境でも扱えるのか気になりました。
簡単に確認するためにDockerイメージで試してみます。

% docker run --rm -it -w /work -v $PWD:/work python:3.11.8 bash
# pip install pdfminer.six==20231228
# python
>>> from pdfminer.high_level import extract_text
>>> text = extract_text("n2300000.pdf")
>>> len(text)
21892
>>> text[:100]
'データの流通・活用の現状と課題\n\n第 3 節\n\nインターネット上での偽・誤情報の拡散等\n\n第第33 節  インターネット上での偽・誤情報の拡散等\n節  インターネット上での偽・誤情報の拡散等\n\nSNS'

同様に読めました!
pythonイメージの言語設定について、私が誤解している可能性はあります2

宿題:読み取れないPDFもあるみたい

別のPDFも試してみましょう。
以下の記事3から

「商業」のPDFを読み取ってみます。
https://www.city.fujiyoshida.yamanashi.jp/div/shoko/pdf/toukei04/syougyou.pdf

>>> from pdfminer.high_level import extract_text
>>> text = extract_text("syougyou.pdf")
>>> text
'\x0c\x0c'

あれ? 2ページあると思うんですが、謎の文字列だ。
これは宿題事項です(どんなときに読めないんだろう?)

調べきれていないのですが、スキャンされたPDFだとpdfminer.sixでは読めない、ということなのかな?
https://github.com/pdfminer/pdfminer.six/issues/597#issuecomment-804797643

終わりに

pdfminer.sixでPDFを読み取れます!

  • pdfminer.high_level.extract_textにPDFのパスを渡すだけととっても簡単!
  • ただし、スキャンされたPDFは読み取れないらしい

  1. 以前時刻についてはTZ環境変数で指定する必要がありました
  2. 先日の記事で取り上げました。