为了账号安全,请及时绑定邮箱和手机立即绑定

限制在 Tika 中解析的嵌入式文件的数量

限制在 Tika 中解析的嵌入式文件的数量

慕斯王 2023-04-13 15:43:17
在创建自定义 EmbeddedDocumentExtractor 类时,我需要解析文件中的嵌入文档并对有限数量的嵌入文档(比如 10 个)执行一些操作。如果我处理一个包含 1000 个嵌入的文件,每个嵌入都会被处理,这绝对是浪费时间。有没有办法限制只解析前几个嵌入文件?public void parseEmbedded(InputStream stream, ContentHandler handler, Metadata metadata, boolean outputHtml) throws SAXException, IOException {          if(fileCount >= COUNT_LIMIT){              //skip file          }          else{             //perform op          }}通过这种方法,比较文件计数(已处理的嵌入文件的数量)和 COUNT_LIMIT 实际上需要时间,而不是使进程停止。
查看完整描述

2 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

在 OP 提出问题后更新:

EmbeddedDocumentExtractor我知道您在开始提问时已经在制作一个实现 tika's 的自定义类:

“关于创建自定义 EmbeddedDocumentExtractor 类,”

所以看看 tika github 我看到这EmbeddedDocumentExtractor是一个由名为 的类实现的接口ParsingEmbeddedDocumentExtractor,它有一个具体的方法parseEmbedded。我假设这是您要使用的方法,但限制为n

我建议您创建一个自定义类来实现EmbeddedDocumentExtractor并继承自ParsingEmbeddedDocumentExtractor. 在这个类中,您定义了一个名为 COUNT_LIMIT 的变量。然后重写 parseEmbedded 方法来执行以下操作:

  1. 分离 InputStream 中的文件

  2. 将这些分离的文件放在使用限制的for循环中

  3. 在每个文件上调用父方法。

所以它看起来像这样:

class MyEmbeddedDocumentExtractor implements EmbeddedDocumentExtractor extends ParsingEmbeddedDocumentExtractor{


private static int COUNT_LIMIT = 10;


...


@Override parseEmbedded(

            InputStream stream, ContentHandler handler, Metadata metadata, boolean outputHtml)

            throws SAXException, IOException {


 // separate the files in the InputStream


for(int i = 0; i < COUNT_LIMIT; i++){

        super.parseEmbedded(streamOfOneFile, handler, metadata, outputHtml)

    }

}


}


查看完整回答
反对 回复 2023-04-13
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

根据您的需要,也许可以尝试 RecursiveParserWrapper;您可以在 RecursiveParserWrapperHandler 中设置最大嵌入深度。

查看完整回答
反对 回复 2023-04-13
  • 2 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信