Excel로 PDF 데이터 및 테이블 스크래핑
저는 데이터 입력 업무의 생산성을 높일 수 있는 좋은 방법을 찾고 있습니다.
제가 원하는 것은 PDF에서 데이터를 긁어 엑셀에 입력하는 방법을 생각해 내는 것입니다.
좀 더 구체적으로 제가 작업하고 있는 데이터는 식료품점 전단지에서 가져온 것입니다.현재 상태로는 전단지에 있는 모든 거래를 수동으로 데이터베이스에 입력해야 합니다.전단지의 샘플은 http://weeklyspecials.safeway.com/customer_Frame.jsp?drpStoreID=1551 입니다.
제품, 가격 및 미리 정의된 옵션(로열티 카드, 쿠폰, 다양성 선택...)에 대한 열을 제공하고자 합니다.그런 것).
어떤 도움이라도 주시면 감사하겠으며, 제가 좀 더 구체적으로 말씀드릴 필요가 있다면 말씀해 주시기 바랍니다.
OP에 의해 링크된 특정 PDF를 본 후, 이것은 일반적인 테이블 형식을 표시하는 것이 아니라고 말해야 합니다.
셀 내부에는 많은 이미지가 포함되어 있지만, 셀이 모두 엄격하게 수직 또는 수평으로 정렬되어 있는 것은 아닙니다.
그럼 이건 '멋진' 테이블도 아니고, 같이 일하기엔 아주 추하고 어색한 테이블...
그렇게 말하고 나니 다음과 같이 덧붙여야겠습니다.
일반적으로 PDF에서 '멋진' 표를 추출하는 것은 매우 어렵습니다.
표준 PDF는 페이지에 그리는 내용의 의미론에 대한 힌트를 제공하지 않습니다. 구문에서 제공하는 유일한 차이점은 벡터 요소(선, 채우기,...), 이미지 및 텍스트 간의 차이입니다.
어떤 문자가 표의 일부인지 선의 일부인지 아니면 빈 영역 내의 외로운 단일 문자인지 여부는 PDF 소스 코드를 구문 분석하여 프로그래밍적으로 인식하기가 쉽지 않습니다.
PDF 파일 형식이 추출 가능하고 구조화된 데이터를 호스팅하는 데 적합하다고 생각되지 않아야 하는 이유에 대한 배경은 다음 기사를 참조하십시오.
문서에 대한 달러 업데이트가 매우 어려웠던 이유(Pro Publica-Website)
...하지만 TabulaPDF를 사용하면 매우 효과적입니다!
위의 내용을 말씀드렸으니 다음 내용을 추가하겠습니다.
(스캔된 페이지가 아닌 한) PDF에서 표 형태의 데이터를 추출할 수 있는 놀라운 오픈 소스 도구 제품군은 제가 서론 문단에서 말한 것과 모순됩니다. 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 페이지를 캡처하겠습니다. 여기 스크린샷이 나와 있습니다.
다음 명령을 사용했습니다.
~/svn-stuff/git.tabula-extractor/bin/tabula \
-p 651,652,653 -g -n -u -f CSV \
~/Downloads/pdfs/PDF32000_2008.pdf
생성된 CSV를 LibreOffice Calc로 가져온 후 스프레드시트는 다음과 같습니다.
제가 보기에 이것은 3개의 다른 PDF 페이지에 걸쳐 있는 표의 완벽한 추출처럼 보입니다. (테이블 셀에 사용된 새로운 줄도 스프레드시트로 만들었습니다.)
갱신하다
다음은 ASCIINEMA 스크린캐스트입니다. (또한 당신은 당신의 Linux/MacOSX/Unix 단말기에서 로컬로 다운로드하여 재생할 수 있습니다.)asciinema
구) tabula-extractor
:
언급URL : https://stackoverflow.com/questions/29868541/pdf-data-and-table-scraping-to-excel
'source' 카테고리의 다른 글
ImageView - 높이와 일치하는 너비가 있습니까? (0) | 2023.09.24 |
---|---|
반환된 파일의 순서에 대해서는 Dir()가 보증을 서주나요? (0) | 2023.09.24 |
창이 없는 응용프로그램 만들기 (0) | 2023.09.24 |
쿼리가 오라클 10g을 중단합니다. (0) | 2023.09.24 |
클랜 포맷이 내 코드를 깨뜨릴 수 있습니까? (0) | 2023.09.24 |