R을 이용한 PDF 에서 Table 추출하기
2024년 대학 입시 정보 pdf 파일에서 각 대학별 수시, 정시 모집 인원 데이터를 뽑는 작업을 하였다.
우선 rjava를 설치해야 한다. 아래 사이트 참고
https://r-pyomega.tistory.com/6
R 크롤링 rjava 설치하기
1. Java 설치 R language를 사용하기 위해서 종종 Java가 필요할 때가 있습니다 Selenium이나 한글 자연어 분석 package인 KoNLP을 사용할 때도 필수입니다 (package는 R의 특정 기능을 활용하기 위한 "도구모음
r-pyomega.tistory.com
그리고 나서 tabulizer 패키지를 설치한다.
https://blog.djnavarro.net/posts/2023-06-16_tabulizer/
Notes from a data witch - Extracting tables from pdf files with tabulizer
Something nicer than the last post
blog.djnavarro.net
그럼 본격적으로 pdf에서 table을 추출해보자
관심있는 테이블은 아래와 같다.
이걸 어떻게 r 을 이용하여 다루기 쉬운 데이터 프레임으로 바꿀 수 있을까?
#1. 패키지 설치 및 불러오기
Sys.setenv(JAVA_HOME='C:/Program Files/Java/jre-1.8')
# install.packages("rJava")
library(rJava)
# remotes::install_github(c("ropensci/tabulizerjars", "ropensci/tabulizer"))
library(tabulizer)
library(dplyr)
library(tidyr)
library(tibble)
library(purrr)
library(janitor)
library(knitr)
library(tidyverse)
#2. pdf 파일 불러오기
pdf_file <- "d:/mygpt/2024 대입 정보.pdf"
table1 <- extract_tables(pdf_file, pages = 16)
#3. 특정 page의 table을 추출하기
get_page_dims(pdf_file)
region <- c(140, 0, 800, 612)
mat <- extract_tables(
file = pdf_file,
pages = 16,
guess = FALSE,
area = list(region)
)[[1]]
df <- as.data.frame(mat)
df %>%select(-1) -> df1
colnames(df1) <- c("대학", "교과", "종합", "논술", "실기", "소계", "수능", "실기", "학생부", "소계", "합계")
df1 %>% kable()
이런 방식으로 대학별 모집 인원을 모두 추출하여 csv 파일로 만들었다.