java - 无法在 CentOS 上使用 Tika 解析 Outlook 正文

标签 java apache-tika

我正在尝试使用 Tika 解析 Outlook 消息的 html 正文。当我在 Windows 计算机上运行以下方法时,它工作正常,并且我得到了电子邮件正文的纯文本表示形式。

private String parseHtml(InputStream stream) throws Exception {
    ContentHandler contenthandler = null;
    try {
        Metadata metadata = new Metadata();
        Parser parser = new AutoDetectParser();
        contenthandler = new BodyContentHandler();
        parser.parse(stream, contenthandler, metadata, new ParseContext());
        System.out.println(contenthandler.toString());
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    return contenthandler != null ? contenthandler.toString() : null;
}

但是,当我在 CentOS VM 和物理服务器上运行相同的代码时,我得到了所有 Outlook 标记。 windows 中发生了一些事情,允许 Tika 检测 centos 上不可用的文档类型。元数据显示,当我调试时:

Windows:Content-Encoding=US-ASCII Generator=Microsoft Word 14(过滤媒体)Content-Type=text/html;字符集=us-ascii Linux:Content-Encoding=US-ASCII Content-Type=text/plain;字符集=US-ASCII

最佳答案

将评论提升为答案...

您缺少一些 Tika jar 或其依赖项

如果您使用命令行 Tika App jar,那么您需要的一切都在其中,并且它独立运行。同样,Tika Server jar 是完全独立的。

对于 OSGi 类型,您需要 Tika Core 和 Tika Bundle,但这应该是它,因为 bundle 包含 Tika 解析器及其依赖项/引用。

否则,如果您从 Java 使用 Tika,则需要 Tika Core、Tika Parsers 以及它们各自的所有依赖项。如果您依赖 tika-coretika-parsers,Maven 可以为您提取依赖项,但您仍然需要确保您的部署方法继承了这些依赖项。

如果您错过了 Tika Parsers jar 和/或其依赖项,那么您仍然拥有 Tika,但没有解析器,因此解析不会返回内容。您可以通过 Tika Config 对象获取可用的解析器,并从中检查您是否拥有所需的所有解析器。

关于java - 无法在 CentOS 上使用 Tika 解析 Outlook 正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24560242/

相关文章:

java - 问题: ArrayList size increasing

outlook - 使用 tika 解析 Outlook pst

java - 添加字段 SolrJ Tika 时出错

java - 从远程 ftp 服务器提取文件内容,而不写入本地磁盘中的文件

java - fragment 返回与 View (CardStackAdapter)相关的所有方法作为空对象引用

java - 你能重铸一个枚举吗?

java - DynamoDB-Java 如果存在则写入,如果不存在则更新

hadoop - Tika文本提取在HDFS上不起作用

java - 如何使用 Apache Tika 从 .wps 文件中提取文本?

java - 如何解决 JBoss 中的 OutOfMemoryError 错误?