1

我需要解析PDF文档。我有一个Java程序来解析PDF文件。(当我解析PDF时,我使用了PDF中那些段落的字体信息。我不会将其转换为文本,因为如果我将PDF转换为文本文件我将丢失我的字体信息。所以我直接使用 Apache PDFBox 解析带有字体信息的 pdf。我使用以下代码加载 pdf 文件

String inputFile = "/home/Desktop/CTT/bcreg20130702a.pdf";
File input = new File(inputFile);
pd = PDDocument.load(input);

现在我需要编写一个 map-reduce 程序来解析 PDF 文档。我不能直接使用 PDF 文件作为 mapreduce 程序中 map() 函数的输入。我使用 WholeFileInputFormat 将整个文档作为单个拆分传递。但它给了我 BytesWritable(value) 和 filename(key)。

我也有那个 PDF 的 SequenceFileFormat。

如何将 PDFBox 与此 SequenceFileFormat 或 WholeFileInputFormat 一起使用?它还应该保留它的字体信息。没有字体信息我无法解析我的pdf。

4

3 回答 3

3

您可以创建一个 SequenceFile 来包含 PDF 文件。SequenceFile 是一种二进制文件格式。您可以将 SequenceFile 中的每条记录设为 PDF。为此,您将创建一个派生自 Writable 的类,该类将包含 PDF 和您需要的任何元数据。然后,您可以使用任何 Java PDF 库(例如 PDFBox)来操作 PDF。

于 2013-09-11T10:22:48.453 回答
1

您说您正在使用自己的自定义 InputFormat(WholeFileInputFormat) 代替 BytesWritable 使用 PDDocument 对象作为 Map 的值,并将 pdf 的全部内容加载到 WholeFileRecordReader(custome Reader) 的 nextKeyValue() 中的 PDDocument 中。还要确保你的 isSplitable() 返回 false 以便加载整个 pdf。

于 2013-09-13T05:13:37.970 回答
-2

Map-Reduce 需要来自 HDFS 的输入路径。因此,您可以将本地文件上传到某个路径/文件夹中的 HDFS(使用 java API),并将其用作 Map-Reduce 的输入。

于 2013-09-11T09:14:13.013 回答