1 PDF 원문 데이터

기계판독 가능한 원문 PDF 파일을 다운로드 받아 OCR Annotation 라벨 데이터로 준비한다.

knitr::include_graphics("data/공고문.pdf")

2 PDF 파일 → 이미지

PDF 파일을 이미지로 변환시켜 특정된 텍스트 위치를 Bounding Box 로 표시하도록 준비한다.

library(magick)

smpl_img <- image_read_pdf("data/공고문.pdf")
smpl_img %>% 
  image_resize("20%")

3 PDF 파일 → 텍스트

기계판독 가능한 PDF 파일을 pdftools를 사용해서 단어 위치를 Bounding Box 정보와 함께 추출한다.

library(tidyverse)
library(pdftools)

smpl_dat <- pdftools::pdf_data("data/공고문.pdf")

smpl_tbl <- smpl_dat %>% 
  .[[1]]

smpl_tbl
# A tibble: 174 x 6
   width height     x     y space text        
   <int>  <int> <int> <int> <lgl> <chr>       
 1    38     33    56    60 TRUE  성남시      
 2    25     33   102    60 TRUE  공고        
 3    12     33   134    60 TRUE  제          
 4    26     33   153    60 TRUE  2020        
 5     6     33   186    60 TRUE  -           
 6    39     33   199    60 FALSE 1192호      
 7    64     62    56    85 TRUE  성남시      
 8   125     62   127    85 TRUE  도시계획변경
 9    85     62   259    85 TRUE  사전협상    
10    85     62   350    85 TRUE  운영지침    
# … with 164 more rows

4 텍스트 Annotation

smpl_draw_img <- image_draw(smpl_img) 

# smpl_tbl <- smpl_tbl %>% 
#   mutate(x = round(x * 10),        #reduce resolution to minimise inconsistent coordinates
#          y = round(y * 10)) %>% 
#   arrange(y, x) %>%                        #sort in reading order
#   mutate(group = cumsum(!lag(space, default = 0)))

rect(xleft   = smpl_tbl$x, 
     ybottom = smpl_tbl$y + smpl_tbl$height, 
     xright  = smpl_tbl$x + smpl_tbl$width, 
     ytop    = smpl_tbl$y, 
     border = "blue", lty = "solid", lwd = 3)

# rect(smpl_tbl$x + smpl_tbl$width, 
#      smpl_tbl$y + smpl_tbl$height,
#      smpl_tbl$x,
#      smpl_tbl$y, 
#      border = "green", lty = "solid", lwd = 3)

print(smpl_draw_img)
# A tibble: 1 x 7
  format width height colorspace matte filesize density
  <chr>  <int>  <int> <chr>      <lgl>    <int> <chr>  
1 PNG     2479   3504 sRGB       TRUE         0 300x300

 

데이터 과학자 이광춘 저작

kwangchun.lee.7@gmail.com