狠狠撸

狠狠撸Share a Scribd company logo
PythonでPDFをいじってみる
2015/11/02
岡山Python勉強会
@k5_yamayama
山手 恵悟(やまやま)
@k5_yamayama
岡山の某DBメーカー勤務
ユーザーCE→社内SE→企画開発→
→サーバー管理→営業に至る。
(これってフルスタック…?)
自己紹介
Okayama Engineers Community(通称:OITEC)
運営スタッフやってます。
岡山Python勉強会(通称:おっPy)
立ち上げスタッフ
主催者のはずの“#た”が福山に戻っちゃった
で現在は、ほぼ主催者状態。
コミュニティ
はじめに
今回は、Pythonを使ってPDFを操作してみよう
と思います。
注意事項
本セッションは、やまやま個人が調査?検証した
結果を発表するもので、間違いやこれにより損害
が生じても一切責任を負いませんのでご了承くだ
さい。
ちなみに
PDFの中身を取り出したいと思っ
たことがある人?
ちなみに
結構、中身の内容を操作したいと
思うことがあったので今回のネタ
にしました。
今日の目的とゴール
? 目的
?PythonでPDFのデータを操作する方法
を理解する。
? ゴール
?実際に触ってみてどういった動きにな
るかやってみる。
PDFデータを操作するために必要なもの
?Python(今回は2.7で…)
?Pdfminer
PDF操作用Pythonモジュール
? PDF内にある情報を抽出するためのモジュール
? ライセンス形態は、MITライセンス
? 日本語の対応もやっている
Pdfminer(http://urx2.nu/oXgp)
インストール
?必要なモジュール
?pdfminer
インストール
以下のURLよりzipファイルをダウンロード
https://github.com/euske/pdfminer/
$ python setup.py install
インストール確認は、pip freezeで…
動作確認
Quick Startから
$ python ~/pdf2txt.py ~/sample/simple1.pdf
Hello
World
Hello
World
H e l l o
W o r l d
H e l l o
W o r l d
Scriptsファルダ内にある
のでパスを指定
ただし…
? このままだと日本語がまともに表示されません
? 日本語に対応させるためには、CJKの登録をしな
いと文字化けを起こすのでまずはセットアップす
る
? ハマりどころはどこに何を置くかが最初わからず
困ったとこ
日本語の対応
? ~/lib/site-packages/pdfminer直下にcmap
フォルダを作成する
cd ~/lib/site-packages/pdfminer
mkdir cmap
日本環境の設定
以下のコマンドを実行
cd ~site-package
python .pdfminerpdfminer-mastertoolsconv_cmap.py -c B5=cp950 -c UniCNS-UTF8=utf-8
.pdfminercmap Adobe-CNS1
.pdfminerpdfminer-mastercmaprsrccid2code_Adobe_CNS1.txt
python .pdfminerpdfminer-mastertoolsconv_cmap.py -c GBK-EUC=cp936 -c UniGB-
UTF8=utf-8 .pdfminercmap Adobe-GB1 .pdfminerpdfminer-
mastercmaprsrccid2code_Adobe_GB1.txt
python .pdfminerpdfminer-mastertoolsconv_cmap.py -c RKSJ=cp932 -c EUC=euc-jp -c
UniJIS-UTF8=utf-8 .pdfminercmap Adobe-Japan1 .pdfminerpdfminer-
mastercmaprsrccid2code_Adobe_Japan1.txt
python .pdfminerpdfminer-mastertoolsconv_cmap.py -c KSC-EUC=euc-kr -c KSC-
Johab=johab -c KSCms-UHC=cp949 -c UniKS-UTF8=utf-8 .pdfminercmap Adobe-Korea1
.pdfminerpdfminer-mastercmaprsrccid2code_Adobe_Korea1.txt
cd pdfminerpdfminer-master
python setup.py install
ポイント
? MACは、
? Windowsは、絶対パスで指定する必要がありこの
部分でかなり悩んだ
? ちなみに最後にあった項目は、韓国語の対応用な
ので今回はなくてもいいかも
make cmap
python setup.py install
実際に出力してみる
? 動作確認の為に以下のコマンドを実行し、日本語が出力
されるかを確認
python ~pdf2txt.py -o c:workoutput.txt
~japaneseSample.pdf
主な出力オプション
? コマンドラインで出力する際に使用できるオプションが
様々ある。
-o:出力ファイル名指定
-p:PAGENO [,pageno,...] 抽出ページ番号のカンマ区切のリ
スト
(ページ番号は1から始まります。)
-c:出力コーデックを指定します。
-t:タイプ(txt/html/xml/tag)※デフォルトはtxt
-V:縦書きの検出を行う
その他の機能
? その他のデバッグ機能としてdumppdf.pyコマンドがあ
ります。
$python ~/dumppdf.py -a ~/japanesesample2.pdf
デバッグ用の擬似xmlを出力したり中に埋め込まれた画像
を抽出したりできます。
まとめ
? コマンドライン的には2つのみのシンプルな構成
? PDF内にあるテキストを抽出するには便利
? 日本語の対応は、CMAPの設定が必要。設定時にパス
の指定に注意する必要がある(windows版は注意)
? デバッグ用のコマンドラインは、画像の抽出が可能
なのでうまく使えば部分的な処理が可能
? ある程度細かいことをしようとするとPDFの構造を
理解する必要があるかも…
参考URL
pdfminer
http://www.unixuser.org/~euske/python/pdfminer/
Quiita 徹底攻略PDFオープンデータ。PDFMinerで始めるPDFテキスト分析
http://qiita.com/nezuq/items/75e8366d68c66e56ff53
ご清聴ありがとうございました。

More Related Content

笔测迟丑辞苍で辫诲蹿をいじってみる