gpt4 book ai didi

java - Tika 在增量读取期间传递解析器信息

转载 作者:行者123 更新时间:2023-11-30 11:33:00 27 4
gpt4 key购买 nike

我知道 Tika 有一个非常好的包装器,它让我可以像这样从解析文件中获取一个 Reader:

Reader parsedReader = tika.parse(in);

但是,如果我使用它,我无法指定我想要的解析器和我想要传递的元数据。例如,我想传递额外的信息,比如要使用的处理程序、解析器和上下文,但如果我使用这种方法,我就做不到。据我所知,它是唯一一个让我取回 Reader 实例并增量读取而不是取回整个已解析字符串的方法。

我想包括的事情的例子:

        Parser parser = new AutoDetectParser();
BodyContentHandler handler = new BodyContentHandler(-1);
Metadata metadata = new Metadata();
metadata.set(Metadata.RESOURCE_NAME_KEY, fileName); //This aids in the content detection
ParseContext context = new ParseContext();
context.set(Parser.class, parser);
parser.parse(is, handler, metadata, context);

但是,直接在解析器上调用 parse 不会返回读取器,我唯一的选择(在文档中注意到)是返回一个完全解析的字符串,这可能不利于内存使用。我知道我可以限制返回的字符串,但我想远离它,因为我想要完全解析的信息,但以增量方式。两全其美,这可能吗?

最佳答案

关于 Apache Tika 的许多伟大事物之一是它是开源的,所以你可以看到它是如何工作的。 Tika facade 的类你用的是here

您感兴趣的该类(class)的关键部分是这一点:

public Reader parse(InputStream stream, Metadata metadata)
throws IOException {
ParseContext context = new ParseContext();
context.set(Parser.class, parser);
return new ParsingReader(parser, stream, metadata, context);
}

您会看到 Tika 如何获取解析器和流,并将其处理到 Reader。做一些类似的事情,你就准备好了。或者,编写您自己的 ContentHandler 并直接调用它以获得完全控制!

关于java - Tika 在增量读取期间传递解析器信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16284019/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com