導入
「ごんはぐったりと目をつぶったまま、うなずきました。」
兵十は火縄銃をばたりと、とり落しました。青い煙が、まだ筒口から細く出ていました。
~ Fin
はい、てなわけでして今日はPythonやろうと思います。導入狐なのに蛇やります。丁度、PythonでPDFをいじれるライブラリの存在を知ったのでPythonをさわるのです。んで、以下のツールを使っていきます。
GitHub - pdfminer/pdfminer.six: Python PDF Parser -- fork with Python 2+3 support using six
これのフォーク*1版らしいです。PDFMiner自体はPython2系での対応らしいんで上のやつを使います。ウチのPython3系なんで仕方ないね。
PDFMiner
つかってみる
とりあえず何はともあれインスコします。
$ pip install pdfminer.six
これでいけるとのことです。
PDFはこの辺りから調達します。
PDFファイル一覧|厚生労働省
んでソースを書きます。
### 必要モジュール from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from pdfminer.pdfpage import PDFPage from io import StringIO ### 設定 rsrcmgr = PDFResourceManager() retstr = StringIO() codec='utf-8' laparams = LAParams() laparams.detect_vertical = True device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams) ### 出力ファイル output = open('output.txt', 'w') ### ファイルを読み込む filename = 'PDFファイル名.pdf' fp = open(filename, 'rb') interpreter = PDFPageInterpreter(rsrcmgr, device) for page in PDFPage.get_pages(fp, pagenos=None, maxpages=0, password=None, caching=True, check_extractable=True): interpreter.process_page(page) ### 読み込み結果の出力 output.write(retstr.getvalue()) print(retstr.getvalue()) fp.close() device.close() retstr.close()
これでコンソール上に取り込んだ文字が表示され、output.txtってファイルにその文字が吐き出されます。
一応こんなの排出されます。
1 栄養・食生活1.はじめに
栄養・食生活は、生命を維持し、子どもたちが健やかに成長し、また人々が健康で幸福
な生活を送るために欠くことのできない営みである。身体的な健康という点からは、栄養状
態を適正に保つために必要な栄養素等を摂取することが求められ、その一方で食生活は
社会的、文化的な営みであり、人々の生活の質(QOL)との関わりも深い。
~ 一部抜粋 ~
段落とかは崩れてますけど、一応文字が取り込めました。とりあえず確認用なんでざっくりです。こっから文章を良い感じにする作業は気が向いたらやります……(遠い目)。
使ってみた感想としては、良い感じのドキュメントがないのでどこまでカスタマイズできるのかは現物のソースコードを確認しながら動かしていくしかなさそう……。ツラ……。とりあえず、モジュールの中覗いてコンストラクタinit
の動き追えば最低限なにやってるかは追えるので、みんな中身を解読しよう。そして僕を助けて……(他力本願)。
余談ですけど本当は「ごん狐」取り込もうと思ったんですよ。だけど、青空文庫のやつからとってきたらCIDフォント使っていて上のデータよりもうまく取り込めないことに気づき急遽変更しました。PDF難しいね。
まとめ
やはり、アレです。"PDF is Evil" です。こんなツールを使ってなんとか文字をこねくり回すよりも、この世界からPDFを滅ぼすほうがはやいです。PDFは悪い文明。
*1:ある時点までの成果物を元に新たなプロジェクトを立ち上げたもの