Tika通用的内容分析工具

       上一篇博客说讲到使用SVNKit来操作svn上的数据,其中在实例DisplayFile中,从svn上获得了文本文件,并打印了文件的内容,我们解析文本文件的方式是直接是有流的方式读取,但是不是所有的文件都能使用流的方式读取的,比如office系列的文件通常使用POI来读取,PDF格式的文件可以使用Pdfbox来读取,但是要知道文件的格式还有好多种,比如,xml,图片,音频,zipjava类等等,而且这些都一个项目中最常用的文件类型,那我们如何读取这些文件呢?我们学会了使用POI还要学会使用Pdfbox等一些列的文件解析工具吗?答案一定是否定的,因为我们有了Tika

 

什么是Tika?

 

Tika是一个内容抽取的工具集合(atoolkitfor text extracting)。它集成了POI, Pdfbox 并且为文本抽取工作提供了一个统一的界面。其次,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
  • TikaAPI十分便捷,核心是Parser interface,其中定义了一个parse方法:

public voidparse(InputStream stream, ContentHandlerhandler, Metadata metadata)

 

stream参数传递需要解析的文件流,文本内容会被传入handler,而元数据会更新至metadata

 

可以使用TikaParserUtils工具来根据文件的mime-type来得到一个适当的Parser来进行解析工作。或者Tika还提供了一个AutoDetectParser根据不同的二进制文件的特殊格式 (比如说Magic Code),来寻找适合的Parser

提示:主要tika-xx.jar,解析相应的文件必须有相应的jar.例如:excel文件必须用到poi-xx.jar


importorg.apache.tika.metadata.Metadata;   
importorg.apache.tika.parser.AutoDetectParser;   
importorg.apache.tika.parser.ParseContext;   
importorg.apache.tika.parser.Parser;   
importorg.apache.tika.sax.BodyContentHandler;   
importorg.xml.sax.ContentHandler;   
import java.io.*;   
   
public class TiKaUtil{   
   
    public static String parseFile(Filefile){   
        Parser parser = newAutoDetectParser();   
        InputStream input = null;   
        try{   
            Metadata metadata = newMetadata();   
           metadata.set(Metadata.CONTENT_ENCODING, "utf-8");   
           metadata.set(Metadata.RESOURCE_NAME_KEY, file.getName());   
            input = newFileInputStream(file);   
            ContentHandler handler = newBodyContentHandler();//当文件大于100000时,newBodyContentHandler(1024*1024*10);    
            ParseContext context = newParseContext();   
           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(Stringargt0[])throws Exception{   
        parseFile(new File("D:\\svntest\\svnkittest\\branches\\doImport.txt"));   
    }   

总结:

通过SVNKit+Tika+lucene你是否可以想象其实这就是一个confluence。其实这是一个很有意思的事。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 28
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值