6

ファイルからメタデータを抽出する新しい Tika パーサーを作成できるようにしたいと考えています。すでに Tika を使用しており、メタデータの抽出は一貫して行われます。

Tika のこの問題/機能強化のリクエストに遭遇したと思います。

ファイルまたはメモリ バッファをパーサーに渡すことを許可する

入力時にファイルへのパスを受け入れ、見つかったメタデータを出力するコンソール c++ 実行可能ファイルがあり、各行は名前と値のペアで構成されています。
C++ コードは、データにアクセスするときにファイル パスを必要とするライブラリに依存しています。この実行可能ファイルを Java で書き直すことはできません。これをTikaに差し込むのはかなり簡単だと思いました。ただし、Tika パーサーは Java である必要があり、オーバーライドする必要がある Tika パーサー メソッドは、開いている入力ストリームを受け取ります。

void parse(InputStream ストリーム、ContentHandler ハンドラ、メタデータ メタデータ、ParseContext コンテキスト)

したがって、私の唯一の解決策は、入力ストリームを取得して一時ファイルに書き込み、書き込まれたファイルを処理してから最終的にファイルをクリーンアップすることだと思います。一時ファイルをいじって、何か問題が発生して削除されなかった場合に一時ファイルのクリーンアップについて心配する必要がある可能性があるのは嫌いです。

このようなものをきれいに処理する方法について、賢いアイデアを持っている人はいますか?

4

2 に答える 2

6

役立つTikaInputStreamがあります。File または InputStream のラップを処理し、パーサーの要求に応じて内部的に変換します。必要に応じて一時ファイルのすべてのビットを実行します。

いくつかの Java パーサーは、入力ストリームではなくファイルを必要とするため、既にそれを利用しています。さらに、ファイルを持っているユーザーは、そのファイルを InputStream としてラップされたパーサーに渡すことができ、パーサーは必要に応じてファイルまたは InputStream として読み取ることができます。

そのため、InputStream を TikaInputStream に変換し (既に 1 つの場合はキャストにすぎません)、ファイルを取得して C++ に渡すことをお勧めします。

于 2011-05-17T22:36:48.647 に答える