fswdnr 发表于 2015-8-1 14:30:28

Apache Tika

  Tika是一个内容抽取的工具集合(a toolkit for 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
  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之类的结合以来可以快速 搭建多类型的文件搜索引擎。
  
  摘录:
  


[*]/**
[*]   * 解析各种类型文件
[*]   * @param 文件路径
[*]   * @return 文件内容字符串
[*]   */
[*]    public static String parse(String path) {
[*]      String result = "";
[*]      TikaConfig tikaConfig = TikaConfig.getDefaultConfig();
[*]      try {
[*]            result = ParseUtils.getStringContent(new File(path), tikaConfig);
[*]      }catch (Exception e) {
[*]            log.debug("" + e);
[*]      }
[*]      return result;
[*]    }
页: [1]
查看完整版本: Apache Tika