Parsing 使用hadoop中的mapreduce程序解析pdf文件

Parsing 使用hadoop中的mapreduce程序解析pdf文件,parsing,pdf,hadoop,mapreduce,pdfbox,Parsing,Pdf,Hadoop,Mapreduce,Pdfbox,我需要解析PDF文件。我有一个java程序来解析PDF文件。(当我解析PDF时,我使用PDF中这些段落的字体信息。我不会将其转换为文本,因为如果我将PDF转换为文本文件,我将丢失我的字体信息。因此,我直接使用Apache PDFBox解析带有字体信息的PDF。我使用以下代码加载PDF文件 String inputFile = "/home/Desktop/CTT/bcreg20130702a.pdf"; File input = new File(inputFile); pd = PDDocum

我需要解析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(值)和filename(键)

我还有那个PDF的SequenceFileFormat


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

Map Reduce需要HDFS的输入路径。因此,您可以将本地文件上载到HDFS(使用java API)您可以创建一个SequenceFile来包含PDF文件。SequenceFile是一种二进制文件格式。您可以将SequenceFile中的每个记录都设置为PDF。为此,您可以创建一个从Writable派生的类,该类将包含PDF和所需的任何元数据。然后您可以使用任何java PDF库(如PDFBox)来操作PDF。

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