2014-11-05 4 views
2

PDFMiner (코드는 Extracting text from a PDF file using PDFMiner in python?에 있음)를 사용하여 PDF 파일에서 텍스트를 추출하려고합니다. 나는 path/to/pdf를 제외한 코드를 변경하지 않았다. 놀랍게도이 코드는 동일한 문서의 여러 복사본을 반환합니다. 나는 다른 pdf 파일들과 같은 결과를 얻었습니다. 다른 주장을 전달해야합니까, 아니면 무언가를 놓치고 있습니까? 어떤 도움을 주셔서 감사합니다. 경우에 따라 코드를 제공합니다.pdfminer를 사용하여 pdf에서 텍스트를 추출하면 복수 사본이 제공됩니다.

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter 
from pdfminer.converter import TextConverter 
from pdfminer.layout import LAParams 
from pdfminer.pdfpage import PDFPage 
from cStringIO import StringIO 

def convert_pdf_to_txt(path): 
    rsrcmgr = PDFResourceManager() 
    retstr = StringIO() 
    codec = 'utf-8' 
    laparams = LAParams() 
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams) 
    fp = file(path, 'rb') 
    interpreter = PDFPageInterpreter(rsrcmgr, device) 
    password = "" 
    maxpages = 0 
    caching = True 
    pagenos=set() 
    fstr = '' 
    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True): 
     interpreter.process_page(page) 

     str = retstr.getvalue() 
     fstr += str 

    fp.close() 
    device.close() 
    retstr.close() 
    return fstr 

print convert_pdf_to_txt("test.pdf") 
+0

이 PDF 파일의 출처는 어디입니까? 모든 도구가 모두 동일한 도구로 만들어 졌습니까? 어떤 두뇌 대본 (brain-dead script)은 어딘가에 여러 텍스트 사본이있는 PDF를 작성하는 것이 가능할 수 있습니다. – kindall

+0

@kindall 질문 해 주셔서 감사합니다. 나는 과학 도구 일지에서 테스트 한 모든 pdf 파일을 다운로드 했으므로 동일한 도구로 작성했다고 가정합니다. – chemist

+0

샘플 문서를 공유하여 문제를 재현 할 수 있습니까? – mkl

답변

6

내 대답은 참조하는 스레드에서 올바르지 않습니다. 버그를 발견하고 내 대답을 잊어 버렸습니다.

문서가 pdfminer로 꽤 희소하기 때문에이 방법이 어떻게 작동하는지 완전히 설명 할 수는 없습니다. pdfminer 라이브러리를 조금 더 잘 아는 사람이 우리에게 통찰력을 줄 수 있기를 바랍니다.

내가 아는 전부는 당신이 text = retstr.getvalue()을 for 루프 외부에서 사용해야한다는 것입니다. 우리가 마치 final_text += text for 루프 안에있는 것처럼 마치 retstr이 업데이트되고 있다고 가정 할 수 있습니다. 모든 작업이 완료되면 모든 페이지에서 텍스트를 가져 오기 위해 text = retstr.getvalue()을 입력하면됩니다.

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter 
from pdfminer.converter import TextConverter 
from pdfminer.layout import LAParams 
from pdfminer.pdfpage import PDFPage 
from cStringIO import StringIO 

def convert_pdf_to_txt(path): 
    rsrcmgr = PDFResourceManager() 
    retstr = StringIO() 
    codec = 'utf-8' 
    laparams = LAParams() 
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams) 
    fp = file(path, 'rb') 
    interpreter = PDFPageInterpreter(rsrcmgr, device) 
    password = "" 
    maxpages = 0 
    caching = True 
    pagenos=set() 
    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages,password=password,caching=caching, check_extractable=True): 

     interpreter.process_page(page) 

    text = retstr.getvalue() 

    fp.close() 
    device.close() 
    retstr.close() 
    return text 

print convert_pdf_to_txt("test.pdf") 

희망이 있습니다.