[最終更新] 2017年12月27日
PDFファイルから文章を抽出するあれこれ。画像化されているやつはOCRをかけることになるが、本記事では対象外。Mac環境下で実行。
大きくわけて、コピペする、Adobe Reader DCを使う、pdftotextを使う、pythonのpdfminer.sixを使う、のパターンで。
ビューアで開いてコピペ
言わずもがな。PDFファイルを開いて、ビューアーからコピペする。原始的だけれど、なんだかんだ言ってそこそこの精度。
Adobe Reader DCの機能を使う
Adobe Reader DCは最近何かとお金を取るようになったらしく、インターネットで検索した情報を元にやってみると、その機能が有料化されていることがしばしばある。が、テキストの抽出は今のところ問題ないらしい(Word変換などはお金がかかる)。
「ファイル」→「その他の形式で保存」→「テキスト」と選択すると、テキストのみ抽出できる。
ファイルが1つだけで、GUIが使える環境ならこれが一番楽。
pdftotext
コマンドラインでのやり方として、pdftotextを使う方法がある。pdfを扱うライブラリpopplerをインストールする。
brew install poppler
すると、以下のようなコマンドが使えるようになる。
pdftotext test.pdf
日本語の扱いでエラーが出たら「pdftotextでPDFを文字列化 | IT研究所」を参考に。
-layoutオプションをつけることで、pdfのレイアウトを考慮したようなテキストファイルにすることができるが……むしろ使いづらいか。
ただこれを使うなら、次のpdf2txt.pyのほうが良いかな、と。
pdf2txt.py
pythonで実装されている、pdfminer.sixのpdf2txt.pyを使ってもできる。レイアウトを考慮した再現度が高い。pip install pdfminer.sixでもインストールできるが、pdf2txt.pyを実行するとエラーが出るので、公式サイトからダウンロードしてインストールする。公式サイト→「pdfminer.six 20170720 : Python Package Index」。ダウンロードしたら、解答して、setup.pyを実行する。
python setup.py install
これでpdf2txt.pyが使えるようになる。
pdf2txt.py test.pdf
デフォルト標準出力。そこそこ時間がかかるが、Adobe Readerのテキスト抽出よりも綺麗かなと思う。何と言ってもコマンドラインで完結するのが大きい。
-nまたは–no-laparamsオプションをつけることで、レイアウトを無視して高速に結果を得られるものの、それだと精度が悪い。
関連記事
Mac の記事
- [2018年4月12日] Macの共有フォルダにWindowsからアクセスして読み書き
- [2018年3月25日] Fusion Driveと純SSDの分かれ目…5年前のMacBook Airが最新のiMacに勝つ時
- [2018年3月15日] Macでeclipse 4.7.2 + Java 8 + Tomcat 8.5を動かす
- [2018年3月11日] Mac mini 2018は本当に出るのかなぁ…
- [2018年3月5日] Macのターミナルでコピペ(pbcopy,pbpaste)
- ---本記事---
- [2017年12月18日] 見開きPDFを分割して1ページ単位のPDFにする
- [2017年12月17日] youtube-dlで音声だけ抽出
- [2017年12月15日] Macでpdfから画像のみを抽出
- [2017年11月28日] MacとWindowsのGoogle ドライブによる共有、また濁点でハマる
- [2017年11月17日] Mac mini 2012をEl CapitanからHigh Sierraに憂鬱なアップグレード
Python の記事
- [2018年1月29日] Pandasでcsv, excelデータの読み込み・書き込み
- [2018年1月19日] pythonでcsvファイルの入出力。エンコードとか改行コードとか考慮しつつ
- [2018年1月16日] Pythonでファイル・ディレクトリ操作
- [2018年1月9日] pythonで画像をダウンロードして、URLに応じてディレクトリ分けする
- [2017年12月27日] Pandasで行の追加(縦方向の連結)の操作メモ
- ---本記事---
- [2017年12月25日] seleniumのGoogle検索で最初にヒットしたサイトのスクリーンショットを撮る
- [2017年12月22日] pythonでExcelファイル内の半角をすべて全角にする
- [2017年11月14日] pythonのxlsxwriterでフォーマットの上書きをしたいが…
- [2016年10月22日] pythonのPyYAMLでブロック形式で書き込み(dump出力)
- [2016年10月4日] 旧版:とにかくRaspberry Piにpython3 + numpy + matplotlibをインストールする(pyenv使用)
スポンサーリンク