0

Office.PARAGRAPH_COUNT如果我有以下代码可以从 PDF中读取段落数 ( ):

TikaInputStream pdfStream = TikaInputStream.get(new File("some-doc.pdf"));

ContentHandler handler = new DefaultContentHandler();
Metadata pdfMeta = new Metadata();
ParseContext pc = new ParseContext();

Parser parser = TikaConfig.getDefaultConfig().getParser();

parser.parse(pdfStream, handler, pdfMeta, pc);

int pdfParagraphCount = pdfMeta.getInt(Office.PARAGRAPH_COUNT);

Tika 是否获得pdfParagraphCount

  • 只需查询 PDF 的元数据以获取计数?或通过
  • 在解析器读取整个 PDF 时应用一些“段落计数”算法?

如果是前者,保存计数的元数据字段是否可写?意思是,会不会是错的?任何带有 iText 或 PDFbox 的小丑都可以操纵该字段并使其不正确吗?

有什么方法可以让 Tika 在阅读 PDF 文件时计算段落(正确地,通过应用某种算法或策略)?

本质上,我需要 PDF 中的段落数,并且我需要它非常准确,没有机会或损坏/不正确的可写元数据字段(因为我自己不生成原始 PDF)。提前致谢。

4

1 回答 1

0

Tika 将文档本身的元数据返回给您。它不计算任何元数据,你得到的只是那里的东西。(Tika 有时会做一些工作来规范文件格式之间的事情,以便元数据在不同文档类型之间保持一致,但这主要只是映射到标准元数据方案)。

不过,您也有点不走运,我需要它完全准确,这将是 PDF 等文件格式的问题。PDF 不是基于行/段落的文件格式。当然,您可以生成一个 PDF,其中所有内容都相对定位在行和段落中,但您也可以构建一个 PDF,其中每个字符一次一个地绝对放置在页面上。Tika(以及下面的 Apache PDFBox)将尽最大努力将其转回有用的文本块,但如果有人真的想惹你生气,他们可以生成一个基本上不可能自动分类为段落的 PDF……

于 2013-02-21T11:42:36.457 回答