Apache Tika和文档元数据

lis*_*sak 7 java apache metadata documents apache-tika

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

word count, author, title, timestamps, language etc.
Run Code Online (Sandbox Code Playgroud)

这不容易.我的策略是使用模板方法模式用于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);
}
Run Code Online (Sandbox Code Playgroud)

我尝试为ODS,MS office,pdf文档执行此操作,并且元数据有很大不同.MSOffice接口列出了MS文档的元数据键和一些Dublic Core元数据列表.但是如何实现这样的应用呢?

可以取悦任何有经验的人分享他的经验吗?谢谢

Gag*_*arr 6

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

您可能只想使用AutoDetectParser,如果您需要对基于mimetype的元数据句柄执行任何特殊操作,例如

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
}
Run Code Online (Sandbox Code Playgroud)