zoukankan      html  css  js  c++  java
  • Apache Tika

    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.     }  
  • 相关阅读:
    构建了一个简单的时间序列数据集来说明索引功能
    在HTML文件的表单中添加{%csrf_token%}便可以解决问题
    在 Django 模板中遍历复杂数据结构的关键是句点字符
    unicode可以通过编码(encode)成为特定编码的str
    Java NIO系列教程(八) SocketChannel
    Java NIO系列教程(七) FileChannel
    Java NIO系列教程(六) Selector
    Java NIO系列教程(五) 通道之间的数据传输
    Java NIO系列教程(四) Scatter/Gather
    Java NIO系列教程(三) Buffer
  • 原文地址:https://www.cnblogs.com/chenying99/p/2679107.html
Copyright © 2011-2022 走看看