2013-04-29 64 views
2

我知道提卡有一個非常漂亮的包裝,讓我得到了讀者回從解析像這樣一個文件:提卡通過解析器信息中增加閱讀

Reader parsedReader = tika.parse(in); 

但是,如果我用這個,我不能指定我想要的解析器和我想要傳入的元數據。例如,我想傳遞額外的信息,如使用哪個處理程序,解析器和上下文,但如果使用此方法,則無法執行此操作。據我所知,這是唯一一個讓我得到一個Reader實例並遞增讀取而不是獲取整個解析的字符串。

的事情

例子我想包括:

 Parser parser = new AutoDetectParser(); 
     BodyContentHandler handler = new BodyContentHandler(-1); 
     Metadata metadata = new Metadata(); 
     metadata.set(Metadata.RESOURCE_NAME_KEY, fileName); //This aids in the content detection 
     ParseContext context = new ParseContext(); 
     context.set(Parser.class, parser); 
     parser.parse(is, handler, metadata, context); 

然而,在解析器調用解析直接不返回一個讀者,我唯一的選擇(在文檔中發現)是完全返回分析過的字符串,這對內存使用可能不是很好。我知道我可以限制返回的字符串,但是我希望遠離那個,因爲我想要完全解析的信息,但是以增量方式。兩全其美,這可能嗎?

回答

1

關於Apache Tika的許多偉大事情之一是它是開源的,所以你可以看到它是如何工作的。對於Tika facade您正在使用的類是here

該類您有興趣的關鍵位是該位:

public Reader parse(InputStream stream, Metadata metadata) 
     throws IOException { 
    ParseContext context = new ParseContext(); 
    context.set(Parser.class, parser); 
    return new ParsingReader(parser, stream, metadata, context); 
} 

你看有提卡是如何採取解析器和流和處理它給一個讀者。做類似的事情,你就定了。或者,編寫您自己的ContentHandler並直接調用以完全控制!