Apache TikaでPDFを読み取る

Avatar
dstn

皆さんApache Tikaをご存知でしょうか?
PDFや画像データからテキストデータを抽出することができるJavaのライブラリです。
今回はDataSpiderでこのApache Tikaを利用して、PDFからテキストデータを抽出する方法をご紹介したいと思います。

Apache Tikaとは


Apache TikaはJavaでPDFや画像など規則性のないフォーマットからデータを抽出する機能を提供するライブラリ/ツールキットです。
対応しているファイルフォーマットは豊富でHTML、XHTML、OOXML、ODF、Microsoft Office (OLE 2、OOXML)、OpenDocument (ODF)、PDF、ePUB、RTF、MP3、JPEG、Flash Video、Jar、mboxなどに対応しています。(詳しくは こちら)

テキストデータだけではなく、タイトルや作成日などのメタデータも取得可能です。

ライブラリといっても複雑なプログラムを書くことなく簡単に利用ができるように実装されており、文書ファイルの種類を気にすることなく抽出することができるようになっています。

DataSpiderで利用してみる


今回はApache Tikaを利用してPDF文書からテキストデータを抽出してみたいと思います。

TikaはもちろんライブラリとしてJavaプログラムからも呼び出しが可能ですが、ツールキットとしても機能が提供されおり、Javaコマンドで実行するだけでテキストデータが抽出できるようになっています。
以下のようなコマンドを実行すると標準出力で結果を取得することが可能です。

Java -j tika-app-1.3.jar -t ${ファイル名}


DataSpiderの外部アプリケーション起動処理からこのコマンド実行してPDFを読み取る方法を以下に紹介します。

まず、Apache Tikaの実行にはJREが別途必要です。インストールをしておいてください。
環境変数を設定しておくとJavaコマンド実行時にパス指定しなくていいので便利です。

次にApache Tikaのライブラリをダウンロードします。
Apache Tikaの ページからダウンロードできます。
現状の最新バージョンは1.3になりますので1.3の「tika-app-1.3.jar」をダウンロードします。
ダウンロードした「tika-app-1.3.jar」はDataSpiderから参照できるディレクトリに配置します。

画像ではC:\tikaに配置しています。
tika001

それではDataSpiderのスクリプトから呼び出してみましょう。
以下の画像がスクリプトの全体図です。
tika002

今回はファイル名を簡単に切り替えられるように「ファイル名」というスクリプト変数を作成して一つ目のアイコンでファイルを変数に代入するようにしています。
tika003

外部アプリケーション起動は以下のような設定になっています。
tika004
tika005

ポイントは作業ディレクトリを「tika-app-1.3.jar」を配置したディレクトリに設定するという点と"標準出力・標準エラー出力を取得する"を有効にする点です。

tikaで読み取ったデータは標準出力から取得することができます。
以下のイメージでデータを取得します。その際に正規表現による置換アイコンで"(\r\n|\n\r|\n|\r)"のようなパターンを指定し改行を削除するようにするとあとで見やすくデータが取得できるとおもいます。
tika006

後はCSVに出力するように設定すれば完成です。
スクリプト変数「ファイル名」に読み込みたいPDFファイルのパスを設定します。
実行すると以下のような結果が取得できるはずです。
tika007

Apache Tikaはファイルのフォーマットを意識する必要はありません。
Wordのファイルが読み込みたい場合は「ファイル名」にWordファイルのパスを設定すればスクリプトを変更することなくデータの抽出ができます。

まとめ


ご紹介したとおりApache Tikaを利用すると非常に簡単にPDFなどのファイルからテキストデータを取得することが可能です。
フォーマットを意識する必要が無いので、フォーマットごとに読み取り処理を作る必要がなく、メンテナンスも非常に簡単です。

例えば、この処理を使って定期的にファイルのテキストデータをDBに格納して全文検索システムを構築するなど、さまざまな活用方法が考えられます。
ぜひお試し下さい!

コメント

ログインしてコメントを残してください。

Powered by Zendesk