Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
49
Help us understand the problem. What are the problem?

PDFの表を表のまま読み取るには tabula

自治体やお役所のオープンデータの取り組みは以前に比べて多くなってきているが、問題はその公開フォーマット。

機械的に読み取って再利用したい側としては構造化されたテキストである JSON、あるいは XML、せめて CSV でほしいところだが、PDF でのみという場合も多い。

文章を PDF から抽出するのはそれほど難しくはないが、表を表の形のまま、抽出するのはなかなか難しい。行やカラムがずれたり、セルの中の改行をうまく扱えなかったりする。
これまで、自治体等が公開しているデータがどうしても PDF のみの場合に、コピー&ペーストしたり、入力しなおしたりと苦労してきたが、やっとうまく表データを抽出できるツールTabulaを見つけた。
Tabula は表の抽出に特化したツールではあるが、表の形を保ったままテキストを抽出できる。

以下は Tabula 1.0.1 を mac で試した。

インストール

Tabula は Wisdows と OSX に対応しているので、ダウンロードページから各 OS 用のアーカイブをダウンロードする。
ダウンロードしたアーカイブを展開すると、実行ファイルが入っているので、OSX の場合、Applications ディレクトリにでもコピーする。これだけ。

使い方

実行ファイルを実行すると、ブラウザが起動し次のようなページが開く。
Tabula の UI はローカルの Web サーバ上で動く形なので操作はブラウザ上で行う。

Kobito.tlaYkD.png

使い方は、そのページに書いてあるとおりなのだが、以下に説明する。

青い Browse... ボタンをクリックするとファイルダイアログが開くので、読み取りたい PDF ファイルを選択する。選択したら、右側の Import ボタンをクリックする。

すると、Tabula がファイルを読み込み始める。プログレスバーに進捗が表示される親切 UI となっている。Tabula が読み込める DPF はテキストデータを含むものだけで、画像をスキャンして作った PDF は対応できない。
Kobito.vRWdaw.png

読み込みが終わると内容が表示される。表として読み取りたい部分をドラッグして選択すると赤く選択される。選択時には次の操作が可能となっている。

  • 複数箇所の選択 (複数のページに選択箇所が別れても構わないが、同一ページの同一表で複数選択は無理なようだ)。
  • 選択した領域の端をドラックによる高さ、幅の変更
  • 選択した領域をドラッグによる移動
  • 選択領域の削除

選択した箇所は左側のサムネールにも表示され、親切 UI となっている。Autodetect Tables ボタンをクリックするとドキュメント中のすべての表を選択してくれる親切機能も備えている。

Kobito.WjTMBG.png

選択が終わったら、緑の Preview & Export Extracted Data ボタンをクリックすると、選択した箇所のテーブルデータの抽出結果が表示される。次の 2 つのボタンのいずれかをクリックすると抽出データを取り出せる。

  • Copy to Clipboard ボタン:抽出データがクリップボードにコピーされる
  • Export:抽出データをファイルとして出力する

Copy to Clipboard はセルに改行を含んでいても、クオートされていないので、表が崩れてしまう。改行を含むデータがある場合には、Export でファイルに出力すればよい。

出力結果

ファイルとして出力した結果を LibereOffice で開いた結果は次の通り。改行を含むセルのデータもきちんとズレずに抽出されている。

Kobito.S4V0HE.png

ちなみに PDF で同じ表のテキストを選択して LibreOffice にコピー&ペーストした結果は次の通り。
全く表としては抽出できない。

Kobito.cHPDWG.png

苦手なファイル

エクセルの表を何ページにも渡って PDF 化したファイルも読み取り変換できるのだが、ページの末尾の行がしっかり罫線で閉じていないときちんと読み取らない。ちゃんと読み取り範囲に指定してもその行を読み飛ばして出力される。

このあたりは有料ツールにはかなわない弱点だと思う。
ちなみに、Adobe のPDF を Excel に変換ではその様な行も飛ばさず変換してくれる。この機能だけなら年間 2,640 円(2021 年8 月現在)と高額というほどでもないので、大量に変換するなら検討してもいいかと思う。

各種言語ラッパー

サンプルとして使ったファイルについて

余談となるが、Tabula の使い方を説明するのに使ったサンプルファイルは全国災害伝承情報:総務省消防庁のページで公開されている2. 防災に関わる「言い伝え」で全国の災害にまつわる教訓、言い伝えを一覧にしたもの。例えば、次のような言い伝えが収録されておりなかなか興味深い資料である。

  • 地震のとき「マンダラッコ、マンダラッコ」と唱えるとよい。(神奈川県平塚市)
  • 地震のとき「マンザイロク、マンザイロク」といって、竹やぶに逃げる(新潟県新潟市)
  • 地震のときは「まんぜえろく」と唱える(埼玉県毛呂山町)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
49
Help us understand the problem. What are the problem?