The Apache Tikaプロジェクトの目的はテキストやスプレッドシート、PDFや画像など規則性のないフォーマットから単一のAPIを使ってデータを抽出し言語を特定することだ。音声やビデオもある程度サポートしている。
TikaがApache Incubatorを離れ、Luceneのサブプロジェクトになってからおおよそ3年が経ち、プロジェクトチームは11月の初旬にバージョン1.0をリリースした。TikaはAPIとメタデータのフォーマットを提供するので、ユーザは既存の特別なパーサーを再利用できる。このような特別なサードパーティのパーサーが利用できるので、出力結果を変換レイヤを通してTikaのAPIにマップし、必要であればカスタムの解析処理を追加できる。また、開発者はカスタムのパーサーを定義できるので、Tikaを使ったアプリケーションとデータのフォーマットを簡単に統合できる。
コンテンツを解析するのは簡単で、必要なコードも数行だ。
Parser parser = new AutoDetectParser() Metadata metadata = new Metadata(); StringWriter writer = new StringWriter(); parser.parse(byteArrayInputStream, new WriteOutContentHandler(writer), metadata, new ParseContext()); String content = writer.toString();
上記の場合、contentは元のドキュメントを表す文字列で任意のストレージに出力することも簡単にできる。しかし、この文字列はメタデータがないと理解できないので、Tikaは下記のような単純なAPIを提供する。
String fileType = metadata.get(Metadata.CONTENT_TYPE); String author = metadata.get(Metadata.AUTHOR);
また、Tikaには与えられた文字列の言語を判別する機能がある。この機能はまだ開発中だが、現時点でほとんどのヨーロッパ言語で問題なく動作する。
LanguageIdentifier identifier = new LanguageIdentifier("Text content as String"); String language = identifier.getLanguage();
InfoQはApache Tikaプロジェクトのバイスプレジデントであり、"Tika in Action"の著者であるChris Mattmann氏に話を聞いた。
InfoQ: なぜTikaを開発したのですか。
Mattmann:当初は、Apache Nutchからコンテンツの検出、分析、言語特定、メタデータなどに関連する機能を取り出し、整理することが目的でした。もともとプロジェクトのアイディアはNutchのコミッタのJerome Charronと私が発案しました。その後、Jukka Zittingが加わり、彼がApache Incubatorを介して責任を持って提案し、Tikaの熱心な推進者になり、中心的な開発者になりました。
InfoQ: アプリケーションが様々なコンテンツを扱うようになっているという傾向があると思いますか。
Mattmann:そうなっていると思います。インターネット上ではファイルとコンテントタイプが急増しています。インターネット上には16000から51000の異なる種類のファイルがある(これは私が南カリフォルニア大学の検索エンジンコースで生徒に教えていることですが)という意見(単純に拡張子とその他の基本情報を調べて算出すると)もあります。しっかりと定義されたタイプについて言えば、IANA(Internet Assigned Numbers Authority)によると約1200のコンテントタイプがあるそうです。いずれにしろ、ソフトウエアやシステムは様々な種類のコンテンツを扱わなければなりません。
InfoQ: Tesseract OCRのようなOCRライブラリとの統合についてはどう考えていますか。
Mattmann: OCRライブラリには興味を持っています。OCRが提供するような機能を利用するためApache PDFBoxを使っていますが、Tesseract OCRはとても面白そうです。それに、ALv2ライセンスなので、Apache製品に簡単に統合できます。
InfoQ: 新しいパーサーの互換性テストは行っていますか。それとも、アップグレードやパーサーのテストはユーザ任せですか。
Mattmann: この点についてはuser@tika.apache.orgメーリングリストでもたくさん質問を受けています。私たちには拡張性の高いJUnitのテストセットがあり、このテストをApacheの継続的統合とテストの仕組みを使って実行し、ファイルフォーマットやパーサーの後方互換性をテストします。テストした結果、問題なければ、速やかにユーザの質問に最善を尽くして答えるようにしています。
InfoQ: 例外処理がしにくいというユーザの声を聞きました。パーサーから上がってくる実行時例外や、対処法が分からないパーサー独自の例外に対する意見です。改善を計画していますか。
Mattmann: もちろんです。Tikaの例外処理は現在改善中です。より多くのユースケースがあれば、開発者が興味を持ち、コードが書かれ、プロジェクトは前へと進みます。
InfoQ: 2012年の予定はどうですか。パーサーの作者と協力することは考えていますか。
Mattmann: いい質問です。私たちは必要に応じてパーサーの開発者やコミュニティと可能な限り協力をしようとしてきました。一方で、ファイルフォーマットや要求の性急な変更や有害な変更からプロジェクトを守ってきました。幸運なことにTikaのPMCメンバーはファイルフォーマットコミュニティに影響力があります。例えば、Nick BurchはPOIに、Jukka ZittingはApache Jackrabbitとそのコンテンツ管理に強い影響力を持っていますし、私自身もあるデータファイルのフォーマットのコミュニティで活動しています。なので、これらのコミュニティにはある程度の影響を与えています。計画について言えば、パーサーライブラリと統合する以外に考えているのは、
- Linux向けのTikaパッケージ(例えば、*.deb, *.rpmパッケージなど)、TikaをLinuxディストリビューションに入れられるかどうかの検証
- GDALとの統合など特定のファイルフォーマットのサポートの改善
- 空間データのサポート、GISフォーマットの統合
- 他のライブラリへのネイティブなバインディングの提供を含むPHP、Pythonのサポート。Jukkaが中心になって進めています。