zoukankan      html  css  js  c++  java
  • Apache tica详述

    Tika是一个内容抽取的工具集合(a toolkit for text extracting)。它集成了POIPdfbox 并且为文本抽取工作提供了一个统一的界面。其次,Tika也提供了便利的扩展API,用来丰富其对第三方文件格式的支持。

    在当前的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

    相关包下载地址http://download.csdn.net/download/an74520/7658941

    [java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
     
    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. 
     */  
    public class TiKaUtil {  
      
        public static 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();  
                }  
            }  
            return null;  
      
        }  
      
        public static void main(String argt0[])throws Exception{  
            parseFile(new File("E:\学习手册pdf\HOST.txt"));  
        }  
    }  
  • 相关阅读:
    git 强制覆盖本地
    给mysql添加账户并且赋予权限
    laravel 地址栏传参不了问题
    订单系统开发02
    熵——信息增益
    熵——导读
    熵——自信息
    tensorflow在文本处理中的使用——skip-gram & CBOW原理总结
    霍夫曼树
    tensorflow在文本处理中的使用——Word2Vec预测
  • 原文地址:https://www.cnblogs.com/zengda/p/4491284.html
Copyright © 2011-2022 走看看