Tika 解析 大於10萬解決方法
阿新 • • 發佈:2019-01-31
Tika是一個內容抽取的工具集合(a toolkit for text extracting)。它集成了POI, Pdfbox 並且為文字抽取工作提供了一個統一的介面。其次,Tika也提供了便利的擴充套件API,用來豐富其對第三方檔案格式的支援。
在當前的0.2-SNAPSHOT版本中, Tika提供了對如下檔案格式的支援:
在當前的0.2-SNAPSHOT版本中, Tika提供了對如下檔案格式的支援:
- PDF - 通過Pdfbox
- MS-* - 通過POI
- HTML - 使用nekohtml將不規範的html整理成為xhtml
- OpenOffice 格式 - Tika提供
- Archive - zip, tar, gzip, bzip等
- RTF - Tika提供
- Java class - Class解析由ASM完成
- Image - 只支援影象的元資料抽取
- XML
Tika的API十分便捷,核心是Parser interface,其中定義了一個parse方法:public void parse(InputStream stream, ContentHandler handler, Metadata metadata)
用stream引數傳遞需要解析的檔案流, 文字內容會被傳入handler,而元資料會更新至metadata。
可以使用Tika的ParserUtils工具來根據檔案的mime-type
來得到一個適當的Parser來進行解析工作。或者Tika還提供了一個AutoDetectParser根據不同的二進位制檔案的特殊格式 (比如說Magic Code),來尋找適合的Parser。
提示:主要tika-xx.jar,解析相應的檔案必須有相應的jar.例如:excel檔案必須用到poi-xx.jar
[java] view plain copy print?- package com.miracle.tools;
- import org.apache.tika.metadata.Metadata;
- import org.apache.tika.parser.AutoDetectParser;
- import org.apache.tika.parser.ParseContext;
- import org.apache.tika.parser.Parser;
- import org.apache.tika.sax.BodyContentHandler;
- import org.xml.sax.ContentHandler;
- import java.io.*;
- /**
- * Created with IntelliJ IDEA.
- * User: lianan
- * Date: 14-3-3
- * Time: 上午10:05
- * To change this template use File | Settings | File Templates.
- */
- publicclass TiKaUtil {
- publicstatic String parseFile(File file){
- Parser parser = new AutoDetectParser();
- InputStream input = null;
- try{
- Metadata metadata = new Metadata();
- metadata.set(Metadata.CONTENT_ENCODING, "utf-8");
- metadata.set(Metadata.RESOURCE_NAME_KEY, file.getName());
- input = new FileInputStream(file);
- ContentHandler handler = new BodyContentHandler();//當檔案大於100000時,new BodyContentHandler(1024*1024*10);
- ParseContext context = new ParseContext();
- context.set(Parser.class,parser);
- parser.parse(input,handler, metadata,context);
- for(String name:metadata.names()) {
- System.out.println(name+":"+metadata.get(name));
- }
- System.out.println(handler.toString());
- return handler.toString();
- }catch (Exception e){
- e.printStackTrace();
- }finally {
- try {
- if(input!=null)input.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- returnnull;
- }
- publicstaticvoid main(String argt0[])throws Exception{
- parseFile(new File("E:\\學習手冊pdf\\HOST.txt"));
- }
- }
- 最後記得修改資料庫對應欄位的型別!