はじめに
アクアトープ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は読み取れないらしい
-
↩#ChatGPTにやらせ隊 皇帝の「現金を刷ると思って刷って欲しい」、
— nikkie / にっきー (@ftnext) 2024年2月1日
「御社の中で伝説に残るくらい、早く出したい」と並んでかっこいい。額に入れて飾っちゃおうかな
Amazonを枯らしたのもかっこよすぎますね https://t.co/GZMG1n93vQ - 以前時刻についてはTZ環境変数で指定する必要がありました ↩
- 先日の記事で取り上げました。↩