Apache Tika 的进度报告?

Posted

技术标签:

【中文标题】Apache Tika 的进度报告?【英文标题】:Progress reporting with Apache Tika? 【发布时间】:2019-10-09 14:37:16 【问题描述】:

我正在使用带有 Java 的 Apache Tika 从 PDF 和 Zip 文件中提取文本。现在在处理大文件时,我想向我的应用程序添加进度报告。为此,我需要估计提取大小来计算完成的百分比(通过将其与写入输出的字节数相匹配)。

我搜索了很多,在任何地方都找不到与此相关的任何内容。

apache tika 是否提供任何类型的进度报告? 有什么解决方法吗?

编辑: 我正在使用org.apache.tika 组中的 apache tika tika-parserstika-server 的 Java 库。并通过Java直接调用它们,代码如下。

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

【问题讨论】:

您在处理文件中的嵌入资源吗?如果是这样,怎么办?以及您如何首先调用 Apache Tika - 服务器、应用程序、Java 代码、Python 等? 不,我没有明确处理任何嵌入式资源。我正在使用org.apache.tika 组中的 tika 库 tika-servertika-parsers Tika Server 是一个独立的可运行 REST 服务器,您可以在主 JVM 之外运行它,或者在您的程序中使用 Tika Core + Parsers!贴出你实际使用的代码 我在问题中发布了代码。 【参考方案1】:

我做错了。对于进度报告,而不是估计输出字节和提取大小,我计算了输入流上的读取字节数。

将输入字符串包装在 AWS SDK 或 Apache Tika 提供的 CountingInputStream 类中,并将读取的字节与总内容字节匹配以获得百分比。

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;

【讨论】:

以上是关于Apache Tika 的进度报告?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据嵌套循环中的多个变量报告进度(对于进度条)?

加快进度7/22日进度报告

本周进度报告

暑假进度报告一

如何使用 C# BackgroundWorker 报告本机 C++ 代码的进度?

postgres 9.6 新的进度报告工具