Forkparserを使用するときに、Tikaメタデータオブジェクトが入力されていないのはなぜですか?

StackOverflow https://stackoverflow.com/questions/8349898

質問

ForkParser にあるTikaバージョン0.9に導入された新しいTikaパーサーです。 org.apache.tika.fork. 。新しいパーサーは、新しいJVMプロセスからフォークスして、渡されたファイルストリームを分析します。これは、ティカのメタデータ抽出プロセスにどれだけのメモリを専念するかを制限する良い方法かもしれないと考えました。しかし Metadata オブジェクトは、を使用するときのように、適切なメタデータプロパティが入力されていません AutoDetectParser. 。テストにより、 BodyContentHandler オブジェクトはそうではありません null.

なぜですか Metadata オブジェクトは何も入力されていません(手動で追加されたものを除く RESOURCE_NAME_KEY)?

public static Metadata getMetadata(File f) {
    Metadata metadata = new Metadata();
    try {
        FileInputStream fis = new FileInputStream(f);
        BodyContentHandler contentHandler = new BodyContentHandler(-1);
        ParseContext context = new ParseContext();
        ForkParser parser = new ForkParser();

        parser.setJavaCommand("/usr/local/java6/bin/java -Xmx64m");
        metadata.set(Metadata.RESOURCE_NAME_KEY, f.getName());

        parser.parse(fis, contentHandler, metadata, context);
        fis.close();

        String contentType = metadata.get(Metadata.CONTENT_TYPE);

        logger.error("contentHandler: " + contentHandler.toString());
        logger.error("metadata: " + metadata.toString());

        return metadata;

    } catch (Throwable e) {
        logger.error("Exception while analyzing file\n" +
        "CAUTION: metadata may still have useful content in it!\n" +
        "Exception: " + e, e);

        return metadata;
    }
}
役に立ちましたか?

解決

Forkparser Tika 1.0のクラスは、残念ながらメタデータ抽出をサポートしていません。今のところ、フォークされたパーサープロセスへの通信チャネルは、サックスイベントのパスバックのみをサポートしているが、メタデータのエントリはサポートしていないためです。ファイルを提案することをお勧めします ティカ これを修正するための改善の問題。

あなたが考慮したいと思うかもしれない回避策の1つは、抽出されたメタデータをから取得することです <meta> のタグ <head> XHTMLドキュメントのセクションは、フォークされたパーサーによって返されます。それらは利用可能であり、通常返されるメタデータエントリのほとんどを含む必要があります メタデータ 物体。

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