2017-03-01 2 views
0

나는 Tabula라는 훌륭한 라이브러리를 발견했으며 거의 ​​그 트릭을 수행했습니다. 불행히도 첫 번째 페이지에는 타뷸라가 추출하기를 원하지 않는 쓸데없는 영역이 많이 있습니다. 문서에 따르면 추출 할 페이지 영역을 지정할 수 있습니다. 그러나 쓸모없는 영역은 내 PDF 파일의 첫 번째 페이지에만 있으므로 모든 후속 페이지에 대해 Tabula는 맨 위 섹션을 놓치게됩니다. 영역 조건을 으로 지정하는 방법이 있습니까? 만 PDF의 첫 번째 페이지에 적용됩니까?Tabula를 사용하여 PDF에서 표 추출

from tabula import read_pdf 

df = read_pdf(r"C:\Users\riley\Desktop\Bank Statements\50340.pdf", area=(530,12.75,790.5,561), pages='all') 

답변

1

나는 (은행 계산서를 파싱하는) 유사한 작업을하고 있으며 같은 문제가있었습니다. 지금까지 발견 한 문제를 해결할 수있는 유일한 방법은 각 페이지를 개별적으로 구문 분석하는 것입니다.

유일한 문제는 파일이 몇 페이지로 구성되어 있는지 미리 알아야한다는 것입니다. 지금은 Tabula로 직접하는 방법을 찾지 못했기 때문에 pyPdf 모듈을 사용하여 페이지 수를 얻으려고했습니다.

import pyPdf 
from tabula import read_pdf 

reader = pyPdf.PdfFileReader(open("C:\Users\riley\Desktop\Bank Statements\50340.pdf", mode='rb')) 
n = reader.getNumPages() 

df = [] 
for page in [str(i+1) for i in range(n)]: 
    if page == "1": 
      df.append(read_pdf(r"C:\Users\riley\Desktop\Bank Statements\50340.pdf", area=(530,12.75,790.5,561), pages=page)) 
    else: 
      df.append(read_pdf(r"C:\Users\riley\Desktop\Bank Statements\50340.pdf", pages=page)) 

각 페이지를 개별적으로 읽거나 동시에 모두 읽을 때 일부는 known and open issues입니다.

행운을 빈다.

2017년 8월 3일 편집 :

pyPDf 거치지 않고 PDF 파일의 페이지를 계산하는 간단한 방법을 찾을 수 FILE_PATH 물론

의 파일의 경로입니다

import re 
def count_pdf_pages(file_path): 
    rxcountpages = re.compile(r"/Type\s*/Page([^s]|$)", re.MULTILINE|re.DOTALL) 
    with open(file_path, "rb") as temp_file: 
     return len(rxcountpages.findall(temp_file.read()))