[英]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方法以執行以下操作:
所以看起來像這樣:
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.