Прогресс отчеты с Apache Tika? - PullRequest
0 голосов
/ 09 октября 2019

Я использую Apache Tika с Java для извлечения текста из файлов PDF и Zip. Теперь при обработке больших файлов я хочу добавить отчеты о прогрессе в мое приложение. Для этого мне понадобится приблизительный размер извлечения, чтобы рассчитать процент выполненных операций (сопоставив его с количеством байтов, записанных в вывод).

Я много искал и нигде не могу найти ничего, связанного с этим.

Предоставляет ли apache tika какие-либо отчеты о прогрессе? Есть ли обходной путь для этого?

Редактировать: я использую Java-библиотеки Apache Tika tika-parsers, tika-server из группы org.apache.tika. И напрямую вызывать их через Java с помощью следующего кода.

AutoDetectParser parser = new AutoDetectParser();
ParseContext context = getParseContext(extractionPolicy, parser);
Metadata metadata = new Metadata();
parser.parse(inputStream, handler, metadata, context);
return metadata;

1 Ответ

0 голосов
/ 14 октября 2019

Я поступил неправильно. Для отчета о ходе выполнения вместо оценки выходных байтов и размера извлечения я посчитал прочитанные байты во входном потоке.

Оберните входную строку в класс CountingInputStream, предоставляемый либо AWS SDK, либо Apache Tika, и сопоставьтечитать байты с общим содержанием байтов, чтобы получить процент.

CountingInputStream inputStream;
Long totalContentLength;

private int getProgressPercentage(){
    Long processedBytes = this.inputStream.getByteCount();
    if (0 < totalContentLength && processedBytes <= totalContentLength) {
        int percent = (int) ((processedBytes * 100.0 / totalContentLength));
        LOGGER.info("Processed bytes: {}, Total bytes: {}, Progress: {}%", processedBytes, totalContentLength, percent);
        return percent;
    }
    return 0;
}
...