質問

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

Tikaのこの問題/強化要求に遭遇したと思います:

パーサーへのファイルまたはメモリバッファの渡し

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

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

だから私の唯一の解決策は、入力ストリームを取り、一時ファイルに書き込み、次に書き込まれたファイルを処理し、その後ファイルをクリーンアップすることになると思います。私は一時的なファイルでめちゃくちゃを嫌い、それから潜在的に一時ファイルのクリーンアップを心配しなければならず、何かが問題になって削除されません。

誰もがこのようなものをきれいに対処する方法について賢い考えを持っていますか?

役に立ちましたか?

解決

There's TikaInputStream which should help. It handles wrapping a File or an InputStream, and converting between them internally as parsers require. It does all the temp file bits as needed for you.

Several Java parsers already make use of it because they need a File rather than an Input Stream. What's more, users who have a file can pass it to the Parser wrapped as an InputStream, and the parser can read it as either a File or an InputStream as their needs suit.

So, I'd suggest you just turn the InputStream into a TikaInputStream (which is just a cast if it's already one), then get the file and pass that to your c++.

他のヒント

If I understand correctly and assuming you're launching the C++ program using Runtime.exec, you could parse the Processs standard output stream as the InputStream that Tika wants. Would that work?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top