猿问

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

在创建自定义 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 实际上需要时间,而不是使进程停止。


慕斯王
浏览 172回答 2
2回答

繁花不似锦

在 OP 提出问题后更新:EmbeddedDocumentExtractor我知道您在开始提问时已经在制作一个实现 tika's 的自定义类:“关于创建自定义 EmbeddedDocumentExtractor 类,”所以看看 tika github 我看到这EmbeddedDocumentExtractor是一个由名为 的类实现的接口ParsingEmbeddedDocumentExtractor,它有一个具体的方法parseEmbedded。我假设这是您要使用的方法,但限制为n。我建议您创建一个自定义类来实现EmbeddedDocumentExtractor并继承自ParsingEmbeddedDocumentExtractor.&nbsp;在这个类中,您定义了一个名为 COUNT_LIMIT 的变量。然后重写 parseEmbedded 方法来执行以下操作:分离 InputStream 中的文件将这些分离的文件放在使用限制的for循环中在每个文件上调用父方法。所以它看起来像这样:class MyEmbeddedDocumentExtractor implements EmbeddedDocumentExtractor extends ParsingEmbeddedDocumentExtractor{private static int COUNT_LIMIT = 10;...@Override parseEmbedded(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InputStream stream, ContentHandler handler, Metadata metadata, boolean outputHtml)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throws SAXException, IOException {&nbsp;// separate the files in the InputStreamfor(int i = 0; i < COUNT_LIMIT; i++){&nbsp; &nbsp; &nbsp; &nbsp; super.parseEmbedded(streamOfOneFile, handler, metadata, outputHtml)&nbsp; &nbsp; }}}

慕侠2389804

根据您的需要,也许可以尝试 RecursiveParserWrapper;您可以在 RecursiveParserWrapperHandler 中设置最大嵌入深度。
随时随地看视频慕课网APP

相关分类

Java
我要回答