• 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.     }  
  • 相关阅读:
    P4357 [CQOI2016]K远点对(KDTree)
    P4475 巧克力王国(KDTree)
    P4148 简单题(KDTree)
    P2479 [SDOI2010]捉迷藏
    P4169 [Violet]天使玩偶/SJY摆棋子
    P4455 [CQOI2018]社交网络
    P4575 [CQOI2013]图的逆变换
    P3755 [CQOI2017]老C的任务
    P5057 [CQOI2006]简单题
    批量修改文件名
  • 原文地址:https://www.cnblogs.com/chenying99/p/2679107.html
Copyright © 2020-2023  润新知