source

Excel로 PDF 데이터 및 테이블 스크래핑

ittop 2023. 9. 24. 13:05
반응형

Excel로 PDF 데이터 및 테이블 스크래핑

저는 데이터 입력 업무의 생산성을 높일 수 있는 좋은 방법을 찾고 있습니다.

제가 원하는 것은 PDF에서 데이터를 긁어 엑셀에 입력하는 방법을 생각해 내는 것입니다.

좀 더 구체적으로 제가 작업하고 있는 데이터는 식료품점 전단지에서 가져온 것입니다.현재 상태로는 전단지에 있는 모든 거래를 수동으로 데이터베이스에 입력해야 합니다.전단지의 샘플은 http://weeklyspecials.safeway.com/customer_Frame.jsp?drpStoreID=1551 입니다.

제품, 가격 및 미리 정의된 옵션(로열티 카드, 쿠폰, 다양성 선택...)에 대한 열을 제공하고자 합니다.그런 것).

어떤 도움이라도 주시면 감사하겠으며, 제가 좀 더 구체적으로 말씀드릴 필요가 있다면 말씀해 주시기 바랍니다.

OP의해 링크된 특정 PDF를 본 후, 이것은 일반적인 테이블 형식을 표시하는 것이 아니라고 말해야 합니다.

셀 내부에는 많은 이미지가 포함되어 있지만, 셀이 모두 엄격하게 수직 또는 수평으로 정렬되어 있는 것은 아닙니다.

Page 6 from the PDF linked in the OP

그럼 이건 '멋진' 테이블도 아니고, 같이 일하기엔 아주 추하고 어색한 테이블...


그렇게 말하고 나니 다음과 같이 덧붙여야겠습니다.

일반적으로 PDF에서 '멋진' 표를 추출하는 것은 매우 어렵습니다.

표준 PDF는 페이지에 그리는 내용의 의미론에 대한 힌트를 제공하지 않습니다. 구문에서 제공하는 유일한 차이점은 벡터 요소(선, 채우기,...), 이미지 및 텍스트 간의 차이입니다.

어떤 문자가 표의 일부인지 선의 일부인지 아니면 빈 영역 내의 외로운 단일 문자인지 여부는 PDF 소스 코드를 구문 분석하여 프로그래밍적으로 인식하기가 쉽지 않습니다.

PDF 파일 형식이 추출 가능하고 구조화된 데이터호스팅하는 적합하다고 생각되지 않아야 하는 이유에 대한 배경은 다음 기사를 참조하십시오.

문서에 대한 달러 업데이트가 매우 어려웠던 이유(Pro Publica-Website)

...하지만 TabulaPDF를 사용하면 매우 효과적입니다!

위의 내용을 말씀드렸으니 다음 내용을 추가하겠습니다.

Tabula-Extractor는 루비로 쓰여있습니다.배경에서는 PDFBox(Java로 작성됨)와 몇 가지 다른 서드파티 립을 사용합니다.Tabula-Extractor를 실행하려면 JRuby-1.7이 설치되어 있어야 합니다.


Tabula-Extractor 설치하기

Tabula-Extractor의 'bleed-edge' 버전을 GitHub 소스 코드 저장소에서 직접 사용하고 있습니다.시스템에 JRuby-1.7.4_0이 이미 존재하기 때문에 작업을 시작하는 것은 매우 쉬웠습니다.

mkdir ~/svn-stuff
cd ~/svn-stuff
git clone https://github.com/tabulapdf/tabula-extractor.git git.tabula-extractor

Git PDFBox 를를 e에 ./bin/서브디렉토리

명령줄 옵션 탐색:

~/svn-stuff/git.tabula-extractor/bin/tabula -h

Tabula helps you extract tables from PDFs

Usage:
       tabula [options] <pdf_file>
where [options] are:
         --pages, -p <s>:   Comma separated list of ranges, or all. Examples:
                            --pages 1-3,5-7, --pages 3 or --pages all. Default
                            is --pages 1 (default: 1)
          --area, -a <s>:   Portion of the page to analyze
                            (top,left,bottom,right). Example: --area
                            269.875,12.75,790.5,561. Default is entire page
       --columns, -c <s>:   X coordinates of column boundaries. Example
                            --columns 10.1,20.2,30.3
      --password, -s <s>:   Password to decrypt document. Default is empty
                            (default: )
             --guess, -g:   Guess the portion of the page to analyze per page.
             --debug, -d:   Print detected table areas instead of processing.
        --format, -f <s>:   Output format (CSV,TSV,HTML,JSON) (default: CSV)
       --outfile, -o <s>:   Write output to <file> instead of STDOUT (default:
                            -)
       --spreadsheet, -r:   Force PDF to be extracted using spreadsheet-style
                            extraction (if there are ruling lines separating
                            each cell, as in a PDF of an Excel spreadsheet)
    --no-spreadsheet, -n:   Force PDF not to be extracted using
                            spreadsheet-style extraction (if there are ruling
                            lines separating each cell, as in a PDF of an Excel
                            spreadsheet)
            --silent, -i:   Suppress all stderr output.
  --use-line-returns, -u:   Use embedded line returns in cells. (Only in
                            spreadsheet mode.)
           --version, -v:   Print version and exit
              --help, -h:   Show this message

OP가 원하는 테이블 추출

OP의 괴물 PDF에서 이 추한 표를 추출하려고 하지도 않습니다.충분히 모험심을 느끼고 있는 독자들에게 연습으로 남겨두겠습니다.

대신 '멋진' 표를 추출하는 방법을 시연해 보겠습니다.공식 PDF-1.7 사양에서 651-653 페이지를 캡처하겠습니다. 여기 스크린샷이 나와 있습니다.

Pages 651-653 of the official PDF-1.7 specification

다음 명령을 사용했습니다.

 ~/svn-stuff/git.tabula-extractor/bin/tabula \
   -p 651,652,653 -g -n -u -f CSV            \
    ~/Downloads/pdfs/PDF32000_2008.pdf

생성된 CSV를 LibreOffice Calc로 가져온 후 스프레드시트는 다음과 같습니다.

Screenshot from LibreOffice after importing the CSV

제가 보기에 이것은 3개의 다른 PDF 페이지에 걸쳐 있는 표의 완벽한 추출처럼 보입니다. (테이블 셀에 사용된 새로운 줄도 스프레드시트로 만들었습니다.)


갱신하다

다음은 ASCIINEMA 스크린캐스트입니다. (또한 당신은 당신의 Linux/MacOSX/Unix 단말기에서 로컬로 다운로드하여 재생할 수 있습니다.)asciinema구) tabula-extractor:

asciicast

언급URL : https://stackoverflow.com/questions/29868541/pdf-data-and-table-scraping-to-excel

반응형