【问题标题】:How to read large files using TIka?如何使用 TIka 读取大文件?
【发布时间】:2015-09-13 18:38:36
【问题描述】:

我正在使用 Tika 解析大型 pdf 和 word 文档,但我收到了以下错误消息。

Your document contained more than 100000 characters, and so your requested limit has been reached. To receive the full text of the document, increase your limit. (Text up to the limit is however available).

如何提高限​​额?

【问题讨论】:

  • 完全取决于您如何调用 Apache Tika。你怎么称呼 Apache Tika?

标签: apache-tika


【解决方案1】:

假设您基本上遵循Tika example for extracting to plain text,那么您需要做的就是create your BodyContentHandler with a write limit of -1 禁用写入限制,如javadocs 中所述

您的代码将类似于 (inspired by the example):

BodyContentHandler handler = new BodyContentHandler(-1);

InputStream stream = ContentHandlerExample.class.getResourceAsStream("test.doc");
AutoDetectParser parser = new AutoDetectParser();
Metadata metadata = new Metadata();
try {
    parser.parse(stream, handler, metadata);
    return handler.toString();
} finally {
    stream.close();
}

【讨论】:

    【解决方案2】:

    我不同意@Gagravarr 使用 -1 的写入限制,因为在 -1 情况下将选择的默认值实际上是 100000。

    如果我没记错的话,Tika BodyContentHandler>WriteOutContentHandler 的文档指出:

    内部字符串缓冲区限制为 100k 个字符。

    然而实现这一点的最佳方法是传递一个 StringWriter 的对象作为参数来代替 -1。

    StringWriter any = new StringWriter();
    

    然后

    BodyContentHandler handler = new BodyContentHandler(any);

    【讨论】:

    • According to the code @Gagravarr 似乎是对的。为写入限制指定 -1 不会将限制设置为 100k 个字符,而是没有设置限制。
    【解决方案3】:

    @Gagravarr 和@Saad 提到的两个决定完全相同。 因为如果您查看源代码,您可以在后台看到:

    1. BodyContentHandler(-1); 构造自 WriteOutContentHandler(writeLimit),而后者又调用 WriteOutContentHandler(new StringWriter(), writeLimit);

    2. BodyContentHandler(Writer writer);WriteOutContentHandler(writer) 构造,而后者又调用WriteOutContentHandler(writer, -1);

    所以,根据最小惊讶和代码越少越好的原则,我宁愿使用@Gagravarr推荐的1-st选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多