Почему мой объект метаданных Tika не заполняется при использовании ForkParser? - PullRequest
4 голосов
/ 02 декабря 2011

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;
    }
}

1 Ответ

3 голосов
/ 02 декабря 2011

Класс ForkParser в Tika 1.0, к сожалению, не поддерживает извлечение метаданных, поскольку на данный момент канал связи с разветвленным процессом синтаксического анализатора поддерживает только возврат событий SAX, но не записей метаданных.Я предлагаю вам исправить проблему TIKA , чтобы исправить это.

Один из способов, который вы можете рассмотреть, - это извлечь извлеченные метаданные из тегов <meta> в разделе <head>документ XHTML, возвращаемый разветвленным парсером.Они должны быть доступны и содержать большинство записей метаданных, обычно возвращаемых в объекте Метаданные .

...