java - Apache Tika 通过 jar 提取元数据,但不在示例代码中

标签 java apache-tika

我已经能够使用以下行通过 tika-app 可执行 jar 提取元数据:

java -jar tika-app-1.13.jar --metadata example_received_regular.msg

它打印出所有元数据。但是当我尝试在 Java 程序中执行对同一文件的简单提取时,我没有得到任何结果。

public static void main(String[] args) throws Exception {
    Class<?> clazz = Class.forName("org.apache.tika.parser.ocr.TesseractOCRParser");
    FileInputStream des = new FileInputStream("/Users/jason/docstore/example_received_regular.msg");
    Tika tika = new Tika();
    AutoDetectParser parser = new AutoDetectParser();
    BodyContentHandler handler = new BodyContentHandler(-1);
    String detected = tika.detect(des);
    Metadata tikaMetadata = new Metadata();
    parser.parse(des, handler, tikaMetadata, new ParseContext());
    String[] names = tikaMetadata.names();
    for (String name : names) {
        System.out.println(name + ": " + tikaMetadata.get(name));
    }
    System.out.println(detected);
}

我的第一个想法是 tika-parser 库在运行时以某种方式不可用,因此我尝试在第一行加载 TesseractOCRParser,但该类加载得很好。执行该程序会产生以下输出:

X-Parsed-By: org.apache.tika.parser.EmptyParser
Content-Type: application/octet-stream
application/x-tika-msoffice

这似乎是我可以在任何地方找到的最基本的 Tika 元数据提取示例。 jar 的提取运行良好,但在本例中则不然。我错过了什么吗?

最佳答案

TikaCLI 程序利用一个特殊的 TikaInputStream 对象来填充元数据(与上面示例中的 FileInputStream 不同)。

您可以进行以下更改以打印元数据值:

public static void main(String[] args) throws Exception {
    File file = new File("/Users/jason/docstore/example_received_regular.msg");
    AutoDetectParser parser = new AutoDetectParser();
    BodyContentHandler handler = new BodyContentHandler(-1);
    Metadata tikaMetadata = new Metadata();
    InputStream input = TikaInputStream.get(file, tikaMetadata);
    parser.parse(input, handler, tikaMetadata, new ParseContext());
    String[] names = tikaMetadata.names();
    Arrays.sort(names);
    for (String name : names) {
        System.out.println(name + ": " + tikaMetadata.get(name));
    }
}

关于java - Apache Tika 通过 jar 提取元数据,但不在示例代码中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37956712/

相关文章:

java - 如何将 .doc 或 .docx 文件转换为 .pdf 文件?

java - Tika Parser 作为 gradle jar 中的运行时依赖项

java - 获取特定列 JPA、Spring boot

java - 升级到 Wildfly 18 后,EntityManager 已停止运行更新语句

java - 如果重新打开应用程序,SharedPreferences 不会保存

java - 在 Eclipse 中导入 Tika 1.13 时出现 NoClassDefFoundError

java - 无法读取同一个InputStream两次

java - 如何将java.util.Date转换为soap支持的日期格式 "yyyy-MM-dd' T'HH :mm:ss"with zone id

java - 搞乱 PATH 后找不到 Rake 命令 - 另外,rails 命令也不起作用

java - 使用 Apache Tika 解析 HTML 问题