1 책의 명칭 및 편집 일반 용어1

국가기술표준원 (2009-12-28), “책의 명칭 및 편집 일반 용어”, KS X 0003 내용을 참조하여 책에 대한 한국어 표준용어 사전을 이해한다.

책의 명칭과 편집 일반용어가 필요한 곳은 일반 을 비롯하여 신문, 잡지, 교과서, 사전, 리플릿, 문서, 인쇄 광고물 등 종이 출판물과 웹북, 웹진, 모바일 콘텐츠 등 전자적 표기에 널리 쓰이는 모든 표현 매체를 아우른다.

library(tidyverse)
library(slickR)
library(pdftools)

book_pdf <- pdf_convert("data/KSX0003_20091228.pdf",format = 'png',verbose = FALSE)

한국어 표준책 용어 및 편집 일반 용어를 직접 살펴볼 수 있도록 준비한다.

# book_pdf_tbl <- tibble(page = glue::glue("fig/book/{book_pdf}") )
# 
# book_pdf_tbl %>% 
#   write_rds("data/book_pdf_tbl.rds")

book_pdf_tbl <- read_rds("data/book_pdf_tbl.rds")

  
slickR(book_pdf_tbl$page, height = 600)

2 책의 명칭 및 편집 일반 용어2

책은 다음과 같은 구성을 갖고 있다.

  • 책의 외부 명칭(1) : 책의 명칭은 출판, 인쇄, 편집의 여러 용어 중에서 가장 기본적이고 중요한 사항으로서 표지 등 장정을 구성하고 있는 요소들로 이루어져 있다.
  • 책의 외부 명칭(2) : 책의 표지를 펼치면 책의 제목, 저자명, 출판사명과 더불어 책 속의 면지, 띠지, 책날개 등이 나오는데 이 모든 것을 책의 외무 명칭(2)에서 다룬다.
  • 책의 내부 명칭 : 책의 내용에 관계되는 사항들의 명칭이다. 본문 편집 순서에 따라 머릿그림, 머리말, 추천사, 차례, 본문, 부록 등 책의 내용을 구성하는 요소들이다.
  • 본문 편집 판면의 명칭(1) : 제목이나 사진 등이 들어가는 본문의 내용을 편집할 때 알아야할 명칭들이다. 큰제목, 중간 제목, 캡션, 단간 등을 담고 있다.
  • 본문 편집 판면의 명칭(2) : 본문의 내용을 편집할 때 알아야 할 명칭들이다. 판면의 편집에 필요한 면주, 쪽번호, 행길이, 행간, 여백 등으로 이루어져 있다.
  • 편집 일반 용어 : 책을 편집할 때 기본적으로 알아야 할 용어와 현장에서 많이 쓰이고 있는 용어들이다.

2.1 PDF 에서 표 추출

PDF에서 바로 표를 추출할 경우 기계판독 가능한 표이기는 하지만 형태가 뭉개져서 제대로 사용할 수 없다.

library(tabulizer)

table_result <- list()

# locate_areas(file = "data/KSX0003_20091228.pdf", pages = 5)

for (i in c(5, 7, 9, 10:11, 13, 15:21)){
  out <- extract_tables("data/KSX0003_20091228.pdf", 
                        page = i, 
                        encoding = "UTF-8",
                        guess = FALSE,
                        method = 'stream',
                        area = list(c(108.70328,  65.78973, 697.26248, 527.02796)))
  
  table_result[[i]] <- as.data.frame(out)
}

table_result[[5]] %>% 
  reactable::reactable()

이런 문제를 PDF 파일으로 워드로 변환시킨 후에 워드에서 표를 추출하는 방식을 동원한다. 자세한 사항은 워드 파일에서 표(table) 추출 하는 방식을 참고한다.

PDF를 워드파일로 변경한 후에 officer 팩키지의 도움으로 테이블을 추출한다. 그리고 나서, 표를 추출한다.

library(officer)
library(reactable)
book_docx <- officer::read_docx("data/KSX0003_20091228.docx")
book_content <- docx_summary(book_docx) %>% as_tibble()

# book_content

table_cells <- book_content %>% 
  filter(content_type %in% "table cell") %>% 
  as_tibble()

cover_tbl <- table_cells %>% 
  filter(doc_index == 89) %>% 
  select(text, row_id, cell_id) %>% 
  pivot_wider(names_from = cell_id, values_from = text) %>% 
  select(-row_id) 

cover_first_tbl <- cover_tbl %>% 
  set_names(cover_tbl %>% slice(1)) %>% 
  filter(row_number() != 1) %>% 
  select(1,2,4,3) 

cover_first_tbl
# A tibble: 13 x 4
   순    `용 어` `대응 영어`          `용어 정의`                               
   <chr> <chr>   <chr>                <chr>                                     
 1 1     앞표지  front cover          책의 맨 겉장. 속장을 보호하기 위해 책 바깥쪽 앞뒤에 붙여 놓은 것으로,~
 2 2     표제    title                책의 본문 전체 내용을 압축, 상징적으로 앞표지 등에 표시한 제목.~
 3 3     책섶    gusset               책의 등쪽 제본 재료를 앞표지까지 연결하여 표지를 단단하게 받쳐주도록 한 ~
 4 4     모서리  corner               앞표지의 상하 귀퉁이. 양장본에서는 천이나 가죽을 표지 양 끝 모서리에 삼~
 5 5     표지턱  square               책 본문 속장과 표지 앞마구리 및 위·아래쪽에 튀어나온 난간 부분으로 양장~
 6 6     책꼬리  tail edge            제본된 책의 맨 아래 밑쪽의 마구리 부분.   
 7 7     도랑    groove               양장본의 두꺼운 앞<U+2219>뒤 표지와 책등의 경계에 도랑 모양의 골을 만들어 표지~
 8 8     머리챙  awning/visor         양장본의 책등쪽 위와 아래의 튀어나온 부분. 책의 머리띠를 보호하는 챙과 ~
 9 9     등글자  back title           책등이나덧표지,케이스의등쪽에넣는문자. 표제, 저자, 출판사 등의 표시.~
10 10    등턱    joint                양장 제본에서, 책 표지의 도랑과 책등 모서리의 튀어나온 부분으로 일명 ‘~
11 11    책등    spine/back           책 앞쪽 마구리의 반대 뒤쪽 부분. 양장본에서는 둥글거나 편편하게 마름하며~
12 12    책목    book neck            책의 본문 속장과 등쪽 위·아래 양 끝의 접속 부위.~
13 13    갈피끈  book-mark/ tassel/ ~ 책장 속에 끼워 넣은 가는 끈으로 읽던 곳이나 필요한 지면을 다시 찾을 때~

2.2 책 외부 (I) 명칭

책 외부(I) 명칭을 살펴보면 다음과 같다.

cover_first_tbl %>% 
  reactable::reactable(
    defaultColDef = colDef(
    header = function(value) gsub(".", " ", value, fixed = TRUE),
    cell = function(value) format(value, nsmall = 1),
    align = "center",
    minWidth = 70,
    headerStyle = list(background = "#f7f7f8")
    ),
    columns = list(
    순 = colDef(minWidth = 30),   # 50% width, 200px minimum
    `용 어` = colDef(minWidth = 100),   # 25% width, 100px minimum
    `용어 정의` = colDef(minWidth = 500)  # 25% width, 100px minimum
    ),
    bordered = TRUE,
    highlight = TRUE,
    filterable = TRUE
  )

워드 파일에서 이미지를 추출하는 방식은 워드 파일 압축을 풀면된다. 그렇게 하기 위해서 KSX0003_20091228.docx 파일명을 KSX0003_20091228.zip으로 바꾼 후에 압축을 풀어준다. 그러면 word/media 디렉토리에 이미지가 저장된다.

library(magick)

front_img <- image_read("data/KSX0003_20091228/word/media/image1.jpeg")
front_img

2.3 책 외부 (II) 명칭

책 외부 명칭(II)을 살펴보면 다음과 같다.

cover_ii_tbl <- table_cells %>% 
  filter(doc_index == 116) %>% 
  select(text, row_id, cell_id) %>% 
  pivot_wider(names_from = cell_id, values_from = text) %>% 
  select(-row_id) 

cover_second_tbl <- cover_ii_tbl %>% 
  set_names(cover_tbl %>% slice(1)) %>% 
  filter(row_number() != 1) %>% 
  select(1,2,4,3) 

cover_second_tbl %>% 
  reactable::reactable(
    defaultColDef = colDef(
    header = function(value) gsub(".", " ", value, fixed = TRUE),
    cell = function(value) format(value, nsmall = 1),
    align = "center",
    minWidth = 70,
    headerStyle = list(background = "#f7f7f8")
    ),
    columns = list(
    순 = colDef(minWidth = 40),   # 50% width, 200px minimum
    `용 어` = colDef(minWidth = 100),   # 25% width, 100px minimum
    `대응 영어` = colDef(minWidth = 150),   # 25% width, 100px minimum    
    `용어 정의` = colDef(minWidth = 500)  # 25% width, 100px minimum
    ),
    bordered = TRUE,
    highlight = TRUE,
    filterable = TRUE
  )

워드 파일에서 이미지를 추출하는 방식은 워드 파일 압축을 풀면된다. 그렇게 하기 위해서 KSX0003_20091228.docx 파일명을 KSX0003_20091228.zip으로 바꾼 후에 압축을 풀어준다. 그러면 word/media 디렉토리에 이미지가 저장된다.

second_img <- image_read("data/KSX0003_20091228/word/media/image2.jpeg")
second_img

3 책의 내부 순서 및 명칭

책의 내부 순서 및 명칭을 살펴보면 다음과 같다.

content_144_tbl <- table_cells %>% 
  filter(doc_index == 144) %>% 
  select(text, row_id, cell_id) %>% 
  pivot_wider(names_from = cell_id, values_from = text) %>% 
  select(-row_id) 

content_147_tbl <- table_cells %>% 
  filter(doc_index == 147) %>% 
  select(text, row_id, cell_id) %>%  
  pivot_wider(names_from = cell_id, values_from = text) %>% 
  select(-row_id) 

content_tbl <- bind_rows(content_144_tbl, content_147_tbl)

content_tbl <- content_tbl %>% 
  set_names(cover_tbl %>% slice(1)) %>% 
  filter(row_number() != 1) %>% 
  select(1,2,4,3) 

content_tbl %>% 
  reactable::reactable(
    defaultColDef = colDef(
    header = function(value) gsub(".", " ", value, fixed = TRUE),
    cell = function(value) format(value, nsmall = 1),
    align = "center",
    minWidth = 70,
    headerStyle = list(background = "#f7f7f8")
    ),
    columns = list(
    순 = colDef(minWidth = 40),   # 50% width, 200px minimum
    `용 어` = colDef(minWidth = 100),   # 25% width, 100px minimum
    `대응 영어` = colDef(minWidth = 150),   # 25% width, 100px minimum
    `용어 정의` = colDef(minWidth = 500)  # 25% width, 100px minimum
    ),
    bordered = TRUE,
    highlight = TRUE,
    filterable = TRUE
  )
 

데이터 과학자 이광춘 저작

kwangchun.lee.7@gmail.com