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("[by ninja.hzw]" + e);
- }
- return result;
- }