데이터 전처리

R을 이용한 PDF 에서 Table 추출하기

r-code-for-data-analysis 2023. 11. 13. 23:20

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을 추출해보자

2024 대입 정보.pdf
9.84MB

 

관심있는 테이블은 아래와 같다. 

 

이걸 어떻게 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 파일로 만들었다. 

2024_University irregular recruitment number of CSAT.csv
0.01MB
2024_University regular recruitment number of CSAT.csv
0.01MB
2024_korean College Scholastic Ability Test, CSAT.csv
0.01MB

728x90
반응형