1. 깔끔한 텍스트 데이터 분석 방식

깔끔한(tidy) 데이터 분석 방법론이 정립되어 다양한 분야에 적용되고 있고, 텍스트 데이터(tidyverse)라고 예외는 아니다. 사실 텍스트 데이터는 다양한 형태로 넘쳐자고 있지만 이에 대한 대응은 특히, 한국어를 R언어로 활용한 사례는 많지 않다.

텍스트 데이터를 분석하기 좋은 웹사이트가 여러분의 손을 기다리고 있습니다. 단, 텍스트 데이터는 모두 영어로 되어 있습니다.

텍스트 데이터를 분석하는 다양한 방식이 존재한다. 텍스트 데이터 분석방법으로 무료 전자책 Text Mining with R에 내용을 중심으로 살펴보자.

깔끔한 텍스트 작업흐름

원본 텍스트 데이터가 있다면 이를 unnest_tokens() 함수를 통해 텍스트를 깔끔한 형태로 정제를 한후 dplyr를 활용하여 데이터를 가공한 후에 요약하고 나서 이를 ggplot에 담아 시각화한다.

2. 구텐베르그 전자책 가져오기 {#gutenberg} 1

gutenbergr 팩키지가 있어 힘들게 구텐베르그 프로젝트 웹사이트 들어가서 검색하고 이를 다운로드 받아 R로 가져오는 과정을 자동화해서 R 내부에서 처리할 수 있게 되었다.

2.1. 구텐베르그 메타데이터

구텐베르그 팩키지 메타데이터(gutenberg_metadata)에 구텐베르그 프로젝트에서 관리하는 도서정보가 한 눈에 볼 수 있도록 정리해놨다. 표본으로 100개 뽑아서 살펴보고, 언어별로 어떤 언어가 가장 많은 도서데이터로 추출가능하지 살펴본다.

# 0. 환경설정 ------------------------------
# https://ropensci.org/tutorials/gutenbergr_tutorial.html
# if (!require("devtools")) install.packages("devtools")
# devtools::install_github("ropenscilabs/gutenbergr")
# library(gutenbergr)
# library(tidyverse)
# library(DT)
# library(stringr)

# 1. 구텐베르그 팩키지 사용법 --------------
gutenberg_metadata %>% sample_n(100) %>% 
    datatable()
gutenberg_metadata %>% count(language, sort=TRUE) %>% 
    mutate(percent = n / sum(n),
           cumpcnt = scales::percent(cumsum(percent)))
# A tibble: 103 x 4
   language     n     percent cumpcnt
      <chr> <int>       <dbl>   <chr>
 1       en 42719 0.821566629   82.2%
 2       fr  2658 0.051118334   87.3%
 3       de  1387 0.026674616   89.9%
 4       fi  1341 0.025789949   92.5%
 5       nl   723 0.013904648   93.9%
 6       it   672 0.012923823   95.2%
 7       pt   537 0.010327519   96.2%
 8       es   470 0.009038983   97.1%
 9       zh   408 0.007846607   97.9%
10       el   216 0.004154086   98.3%
# ... with 93 more rows

2.2. 다운로드 가능한 도서

구텐베르그 프로젝트에 등록된 도서가 많지만, 텍스트 분석을 위해서 결국 원문이 이용가능해야 된다. 이를 정리한 것이 gutenberg_works 함수로 이중 100개만 표본으로 뽑아서 어떤 전자책이 다운로드 가능하지 살펴보자. 그리고, 위키피디어 에드거 앨런 포에 대한 저작물을 찾아보자.

# 2. 영문&다운로드 가능 저작물 --------------

gutenberg_works() %>% sample_n(100) %>% 
    datatable()
# gutenberg_works(str_detect(author, "Poe"))

gutenberg_works(author == "Poe, Edgar Allan") %>% 
    datatable()

2.3. 에드거 앨런 포 저작물 다운로드

전자책마다 고유한 식별자가 붙어있다. 예를 들어, 어셔가의 붕괴(The Fall of the House of Usher)는 932, 아몬틸라도의 술통(The Cask of Amontillado)는 1063번으로 고유 ID가 붙어있다.

R에서 도서정보를 저장하는 방식은 데이터프레임 한 행이 도서의 한줄에 해당된다. 따라서, 다운로드받은 두권의 책의 총 행수를 비교하는 방법은 행수를 개수하면 된다.

# 3. 저작물 다운로드 --------------
## 3.1. 책 한권 -------------------
usher_house <- gutenberg_download(932)
datatable(usher_house)
## 3.2. 책 두권 -------------------
poe_books <- gutenberg_download(c(932, 1063), meta_fields = "title")
datatable(poe_books)