java - Apache Tika 和文档元数据

标签 java apache metadata documents apache-tika

我正在使用 Apache Tika 对各种文档(ODS、MS office、pdf)进行简单处理。我必须至少得到:

word count, author, title, timestamps, language etc.

这可没那么简单。我的策略是对 6 种类型的文档使用模板方法模式,首先找到文档类型,然后根据它单独处理它。

我知道 apache tika 应该不需要这样做,但是文档格式完全不同,对吗?

例如

InputStream input = this.getClass().getClassLoader().getResourceAsStream(doc);
ContentHandler textHandler = new BodyContentHandler();
Metadata metadata = new Metadata();
Parser parser = new OfficeParser();
parser.parse(input, textHandler, metadata, new ParseContext());
input.close();

for(String s : metadata.names()) {
    System.out.println("Metadata name : "  + s);
}

我尝试对 ODS、MS office、pdf 文档执行此操作,但 metadada 差异很大。 MSOffice 界面列出了 MS 文档的元数据键和一些 Dublic Core 元数据列表。但是应该如何实现这样的应用程序呢?

请有经验的 friend 分享下经验?谢谢

最佳答案

一般来说,解析器应该为所有文档格式中的同类事物返回相同的元数据键。但是,某些类型的元数据仅出现在某些文件类型中,因此您无法从其他文件类型中获取这些元数据。

您可能只想使用 AutoDetectParser,如果您需要对之后基于 mime 类型的元数据句柄做任何特殊操作,例如

Metadata metadata = new Metadata();
metadata.set(Metadata.RESOURCE_NAME_KEY, filename);
ParseContext context = new ParseContext();

Parser parser = new AutoDetectParser();
parser.parse(input, textHandler, metadata, new ParseContext());

if(metadata.get(CONTENT_TYPE).equals("application/pdf")) {
   // Do something special with the PDF metadata here
}

关于java - Apache Tika 和文档元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5129965/

相关文章:

apache - 如何防止服务器文件被在线查看?

tfs - 以编程方式获取TFS构建定义元数据

php - 将自定义元数据保存到 Shipstation 的 WooCommerce 订单中

java - setBorderPainted 是什么意思?

java - 从文本中找出一个单词的所有行号

java - GemFire 9 替换 GemfireUtilLauncher

video - 获取 MOV 视频的元数据

java - App Engine 和 Firestore 的内存问题

java - Java 9 运行代码如何使用使用非导出包的 Java 8 编译

c# - 在域子文件夹中的 Apache 后面托管 ASP.NET Core