tabulaでPDFの表を「表として」認識させる
PDFの表はそのまま使えない
皆さん、下記のようなPDF内の表を見たことはないだろうか?
一見、きれいな表だが、これをデータとして使おうとすると一筋縄ではいかない。なぜなら、この表をコピペしても、レイアウト通りのデータにはならないからである。
例えば、1行目のデータをコピペすると、下記のように抜けが発生し、意図したレイアウトで取得できない。
==============
ネットワーク 注意 %s - DHCP失敗 - ゕドレス : %s カ
==============
なので、これをExcelとかCSVにしようと思ったら、セルをひとつずつコピペしたり、最悪手打ちするしかなく、泣く泣く時間をかけて表にした経験がある方も多いのではないだろうか?
tabulaなら表にできる!
さすがに21世紀にもなってそんな無駄なことしたくないと思って検索すると、なんとPDFの表を「表」にしてくれるツールがあるではないか。それがtabulaである!
https://tabula.technology/
注)とはいっても、仕組み的にPDF内に文字情報を持ってないとダメ。PDF内に埋め込まれた画像データの表から文字を抽出して表にするのは無理なので、そのケースは画像から文字情報を読み取るOCRツールとか使ってください。
とりあえずサイトからtabula-win-1.2.1.zipをダウンロード。
展開して、tabula.exeをたたけば内部でサーバが立ち上がり、準備完了!
と思いきやそうは問屋が卸さない。
文字コードの処理が上手くいかない
恐らくWindowsユーザーは下記のエラーに遭遇するはずである。
(MacおよびLinuxユーザーは遭遇しないはず)
(MacおよびLinuxユーザーは遭遇しないはず)
「invalid byte sequence in Windows-31J」というエラーでサービスが上がってこない。
こちらが正解なのだが、tabulaがUTF-8の文字コードを使っているのに、Windowsの標準文字コード(Windows-31J)で処理しようとしてエラーになっている。
そのため、UTF-8を使って処理する事をプログラムに教えてやる必要があり、Windowsの環境変数でそのオプション(RUBYOPT)を設定してやればいい。
リンク先はRubyについて書いているが、tabulaは上記画面にもチラッと出ているように「JRuby」で書かれているようなので、同じ方法で対処可能なようである。
エラー回避方法
下記の内容を記載したファイルを「tabula.bat」という名前でtabulaを展開したディレクトリに配置する。
set RUBYOPT=-EUTF-8 tabula.exe
あとはtabula.batをダブルクリックしたらコマンドプロンプトとtabulaの画面がブラウザで開くはずである。
tabulaの使い方
「Browse...」を押して、変換したいファイルを開き、「Import」を押す。
Importが完了すると、PDFが開く。
表が入っているページを開いて、自分で範囲選択するか、「Autodetect Tables」をクリックして、変換したい表を選択し、「Preview&Export Extracted Data」をクリックする。
そうすると、テーブルのプレビューが表示される。
この表を選択して、Excelに直接貼り付けてもいいし、Export FormatからCSVやJSON形式でExportしてもよい。
Exportしたファイルの文字コードはUTF-8になっているので、Excelで直接開くと多分文字化けするので、サクラエディタ等でSJISにしておくとよいかも。
見ての通り、若干カテゴリー列に欠けがあったり、PDF内で元々文字認識がおかしい箇所は文字が変になっているが、目で見て全部手で打ち直すことに比べれば百倍マシである。
(左の「Stream」をクリックすると、何となく欠ける理由は分かる)
PDFの表をデータとして使うのはかなり面倒だったが、tabulaを使うと割と実用的なレベルで変換してくれるので積極的に使っていきたい。
コメント
コメントを投稿