InputStream stream = ...; // the document to be parsedReader reader = new ParsingReader(parser, stream, ...);try { ...; // read the document text using the reader} finally { reader.close(); // the document stream is closed automatically}
注意到,元数据处理还在 Apache Tika 开发团队的讨论之中,所以在 Tika V1.0 之前的版本,在元数据处理方面有可能会有一些(后向不兼容的)差异。
解析器实现
Apache Tika 自带一些解析器类来解析各种文档格式,如表 3 所示。
表 3. Tika 解析器类
格式 描述
Microsoft® Excel® (application/vnd.ms-excel) 在所有的 Tika 版本中都有对 Excel 电子数据表的支持,基于的是 POI 的 HSSF 库。
Microsoft Word®(application/msword) 在所有的 Tika 版本中都有对 Word 文档的支持,基于的是 POI 的 HWPF 库。
Microsoft PowerPoint® (application/vnd.ms-powerpoint) 在所有的 Tika 版本中都有对 PowerPoint 演示的支持,基于的是 POI 的 HSLF 库。
Microsoft Visio® (application/vnd.visio) 在 Tika V0.2 中加入了对 Visio 图表的支持,基于的是 POI 的 HDGF 库。
Microsoft Outlook® (application/vnd.ms-outlook) 在 Tika V0.2 中加入了对 Outlook 消息的支持,基于的是 POI 的 HSMF 库。
GZIP 压缩 (application/x-gzip) 在 Tika V0.2 中加入了对 GZIP 的支持,基于的是 Java 5 类库中的 GZIPInputStream 类。
bzip2 压缩 (application/x-bzip) 在 Tika V0.2 中加入了对 bzip2 的支持,基于的是 Apache Ant 的 bzip2 解析代码,而它最初基于的是 Aftex Software 的 Keiron Liddle 的工作成果。
MP3 音频(audio/mpeg) 在 Tika V0.2 中加入了对 MP3 文件的 ID3v1 标记的解析。如果找到,如下的元数据将被提取并设置:
TITLE Title
SUBJECT Subject
MIDI 音频 (audio/midi) Tika 使用 javax.audio.midi 内的 MIDI 支持来解析 MIDI 序列文件。很多卡拉 OK 文件格式都基于的是 MIDI 并包含嵌入文本歌曲形式的歌词,并且 Tika 知道该如何提取。
Wave 音频 (audio/basic) Tika 通过 javax.audio.sampled 包支持取样的 wave 音频(.wav 文件等)。只有取样元数据才被提取。
Extensible Markup Language (XML) (application/xml) Tika 使用 javax.xml 类解析 XML 文件。
HyperText Markup Language (HTML) (text/html) Tika 使用 CyberNeko 库解析 HTML 文件。
图像 (image/*) Tika 使用 javax.imageio 类从图像文件中提取元数据。
Java 类文件 Java 类文件的解析基于的是 ASM 库以及 JCR-1522 的 Dave Brosius 的工作成果。
Java Archive Files JAR 文件的解析是综合使用 ZIP 和 Java 这两种类文件解析器完成的。
OpenDocument (application/vnd.oasis.opendocument.*) Tika 使用 Java 语言中的内置 ZIP 和 XML 特性来解析多为 OpenOffice V2.0 或更高版本所用的 OpenDocument 文档类型。较早的 OpenOffice V1.0 格式也受支持,但它们目前不能像较新的格式那样被自动检测。
纯文本 (text/plain) Tika 使用 International Components for Unicode Java 库(ICU4J)来解析纯文本。
Portable Document Format (PDF) (application/pdf) Tika 使用 PDFBox 库来解析 PDF 文档。
Rich Text Format (RTF) (application/rtf) Tika 使用 Java 的内置 Swing 库来解析 RTF 文档。
TAR (application/x-tar) Tika 使用来自 Apache Ant 的 TAR 解析代码的调整版本来解析 TAR 文件。而此 TAR 代码基于的是 Timothy Gerard Endres 的工作成果。
ZIP (application/zip) Tika 使用 Java 的内置 ZIP 类来解析 ZIP 文件。
您可以使用您自己的解析器来扩展 Apache Tika,您对 Tika 所做的任何贡献都是受欢迎的。Tika 的目标是尽可能地重用现有的解析器库(比如 Apache PDFBox 或 Apache POI),因此 Tika 内的大多数解析器类都是适应于这些外部库。
Apache Tika 还包含一些不针对任何特定文档格式的通用解析器实现。其中最值得一提的是 AutoDetectParser 类,它将所有的 Tika 功能包装进一个能处理任何文档类型的解析器。这个解析器可自动决定入向文档的类型,然后会相应解析此文档。
现在,我们可以进行一些实际操作了。如下的这些类是我们在整个教程中要开发的:
BudgetScramble — 显示了如何使用 Apache Tika 元数据来决定哪个文档最近被更改以及在何时更改。
TikaMetadata — 显示了如何获得某个文档的所有 Apache Tika 元数据,即便没有数据(只显示所有的元数据类型)。
TikaMimeType — 显示了如何使用 Apache Tika 的 mimetypes 来检测某个特定文档的 mimetype。
TikaExtractText — 显示了 Apache Tika 的文件提取功能并将所提取的文本保存为合适的文件。
LanguageDetector — 介绍了 Nutch 语言的识别功能来识别特定内容的语言。
Summary — 总结了 Tika 特性,比如 MimeType、内容 charset 检测和元数据。此外,它还引入了 cpdetector 功能来决定一个文件的 charset 编码。最后,它显示了 Nutch 语言识别的实际使用。