君子博学而日参省乎己 则知明而行无过矣

博客园 首页 新随笔 联系 订阅 管理

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。

提取文件内容其实很简单 – Apache Tika 初探

 

Apache宣布几个新的顶级项目,其中有一个就是Tika,一个文件内容提取的工具包,他支持的格式很多(详细):

    * HyperText Markup Language
* XML and derived formats
* Microsoft Office document formats
* OpenDocument Format
* Portable Document Format
* Electronic Publication Format
* Rich Text Format
* Compression and packaging formats
* Text formats
* Audio formats
* Image formats
* Video formats
* Java class files and archives
* The mbox format

Tika整体代码设计非常优雅,通过Tika类目发布给用户,并将相关接口包装成简单的方法供大家调用。

 //优雅的Facade类包装了底层功能
Tika tika = new Tika();//自动根据文件类型选择Parse类
System.out.println(tika.parseToString(new URL("http://www.taobao.com")));
System.out.println(tika.parseToString(new File("TikaSample.class")));

基于Tika,我们可以快速提取各种类型的文件内容,整体设计模式可以快速加入新的Parse来扩展新的文件类型,同Lucene之类的结合以来可以快速 搭建多类型的文件搜索引擎。 

 

摘录: 

 

  1. /** 
  2.      * 解析各种类型文件 
  3.      * @param 文件路径 
  4.      * @return 文件内容字符串 
  5.      */  
  6.     public static String parse(String path) {  
  7.         String result = "";  
  8.         TikaConfig tikaConfig = TikaConfig.getDefaultConfig();  
  9.         try {  
  10.             result = ParseUtils.getStringContent(new File(path), tikaConfig);  
  11.         }catch (Exception e) {  
  12.             log.debug("[by ninja.hzw]" + e);  
  13.         }  
  14.         return result;  
  15.     }  
posted on 2012-09-10 17:47  刺猬的温驯  阅读(1961)  评论(0编辑  收藏  举报