2014-05-13 61 views
2

我正在尋找從PDF中提取文本以進行數據挖掘任務。 我正在查看的PDF包含多個報告,每個報告在文檔目錄中都有其自己的第一級條目。此外,PDF開頭還有一個書面目錄,其中包含每個報告的頁碼(「從頁面到頁面」)。按第一個目錄級別批量分割PDF文件?

我正在尋找一種方式來之一:

  • 斯普利特PDF到單獨的報表,以每個那些轉儲到一個文本文件。

  • 直接將PDF的每個部分轉儲到.txt文件中。

到目前爲止,我已經能夠轉儲到整個文件到使用PDFminer(蟒蛇).txt的,如下:

# Not all imports are needed for this task 
from pdfminer.pdfparser import PDFParser 
from pdfminer.pdfdocument import PDFDocument 
import sys 
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter 
from pdfminer.pdfpage import PDFPage 
from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter 
from pdfminer.layout import LAParams 
from cStringIO import StringIO 

def myparse(data): 

    fp = file(data, 'rb') 
    rsrcmgr = PDFResourceManager() 
    retstr = StringIO() 
    codec = 'utf-8' 
    laparams = LAParams() 
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams) 
    # Create a PDF interpreter object. 
    interpreter = PDFPageInterpreter(rsrcmgr, device) 
    # Process each page contained in the document. 

    for page in PDFPage.get_pages(fp): 
     interpreter.process_page(page) 
    #fp.close() 
    #device.close() 
    str = retstr.getvalue() 
    #retstr.close() 
    return str 

t1 = myparse("part2.pdf") 
text_file = open("part2.txt", "w") 
text_file.write(t1) 
text_file.close() 

而且,這個返回的表的整個結構內容:

# Open a PDF document. 
fp = open('solar.pdf', 'rb') 
parser = PDFParser(fp) 
password = "" 
document = PDFDocument(parser, password) 

# Get the outlines of the document. 
outlines = document.get_outlines() 
for (level,title,dest,a,se) in outlines: 
print (level, title, a) 

任何想法如何從這裏開始?任何使用python,R或bash的工具對我來說都是最容易使用的,但只要它能夠根據文檔的第一個大綱級別進行批量分割,任何解決方案都將非常棒。

謝謝 馬蒂亞斯

回答

2

我發現這個使用sejda控制檯一個簡單的解決方案:

from subprocess import call 
import os 

pdfname = "example.pdf" 


outdir = "C:\\out\\%s" % pdfname 
if not os.path.exists(outdir): 
    os.makedirs(outdir) 



sejda = 'C:\\sejda\\bin\\sejda-console.bat' 
call = sejda 
call += ' splitbybookmarks' 
call += ' --bookmarkLevel 1' 
call += ' -f "%s"' % pdfname 
call += ' -o "%s"' % outdir 
print '\n', call 
subprocess.call(call) 
print "PDFs have been written to out-directory" 

Abviously這需要sejda程序:http://www.sejda.org/

相關問題