【问题标题】:parse pdf file using mapreduce program in hadoop在hadoop中使用mapreduce程序解析pdf文件
【发布时间】:2013-09-15 02:19:06
【问题描述】:

我需要解析 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。

【问题讨论】:

    标签: parsing pdf hadoop mapreduce pdfbox


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2012-03-14
          • 2014-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-27
          • 1970-01-01
          • 1970-01-01
          • 2014-11-06
          相关资源
          最近更新 更多