簡體   English   中英

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

[英]Limit the number of Embedded files to be parsed in 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
          }
}

通過這種方法,存在一個比較,它實際上需要一些時間來比較fileCount(已處理的嵌入式文件數)和COUNT_LIMIT,而不是使進程停止。

OP提出問題后進行了更新:

我了解您在開始提問時已經在創建實現tika的EmbeddedDocumentExtractor的自定義類:

“在創建自定義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)
    }
}

}

根據您的需求,也許嘗試RecursiveParserWrapper; 您可以在RecursiveParserWrapperHandler中設置最大嵌入深度。 參見例如: https : //github.com/apache/tika/blob/2d73e91476325c235dc9a9be116e8d02c7658850/tika-parsers/src/test/java/org/apache/tika/parser/RecursiveParserWrapperTest.java#L204

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM