4

ForkParserは、Tika バージョン 0.9 で導入された新しい Tika パーサーで、org.apache.tika.fork. 新しいパーサーは、新しい jvm プロセスをフォークして、渡されたファイル ストリームを分析します。これは、Tika のメタデータ抽出プロセスに割り当てるメモリの量を制限する良い方法であると考えました。ただし、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;
    }
}
4

1 に答える 1

3

残念ながら、Tika 1.0のForkParserクラスはメタデータの抽出をサポートしていません。これは、フォークされたパーサー プロセスへの通信チャネルが SAX イベントの受け渡しのみをサポートしており、メタデータ エントリはサポートしていないためです。これを修正するには、 TIKAの改善に関する問題を提出することをお勧めします。

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

于 2011-12-02T09:44:17.543 に答える