1 대한민국 헌법

대한민국 헌법은 국가법령정보센터 웹사이트에서 확인할 수 있다. RSelenium으로 웹브라우저를 구동시켜서 대한민국 헌법 웹사이트에 접속해서 헌법 데이터를 가져온다.

# 0. 환경설정 -----
library(tidyverse)
library(rvest)
library(diffr)
library(RSelenium)
library(tidyverse)

# 1. 데이터 ----
## 1.1. 현재 헌법전문 -----
rem_driver <- rsDriver(browser="chrome")
remdrv_client <- rem_driver[["client"]]

remdrv_client$navigate("http://www.law.go.kr/lsEfInfoP.do?lsiSeq=61603#")

2 헌법 데이터

헌법 전문 id를 크롬 검사(inspection) 기능으로 확인하여 getElementText() 함수로 분석처리 가능한 형태 텍스트 데이터로 가져온다. 각 장으로 나눠 보기 좋게 하고, 다시 각조로 나눈다. 그리고, 보기 좋은 형태로 리스트에 이름을 붙어 시각화한다.

## 1.2. 헌법전문 저장 -----
const_web_eleml <- remdrv_client$findElement(using = "id", "conScroll")
const_web_txt <- const_web_eleml$getElementText()[[1]]

# 2. 데이터 정제 ----
## 2.1. 각장
const_lvl_01 <- str_split(const_web_txt, "제[0-9]+장|부[\\s]+칙") %>% flatten
# listviewer::jsonedit(const_lvl_01)

## 2.2. 각조
const_lvl_02 <- map(const_lvl_01, str_split, pattern="\n 제[0-9]+조")

# names(const_lvl_02[[1]]) <- "전문"
# names(const_lvl_02[[12]]) <- "부칙"

for(i in 2:11) {
  const_lvl_02[[i]] <- setNames(const_lvl_02[[i]], const_lvl_02[[i]][[1]][1])
}

const_lvl_03 <- flatten(const_lvl_02)
listviewer::jsonedit(const_lvl_03)

3 헌법 개정이력

최근 문재인 대통령이 발의한 대통령 개정안을 제외한 총 9개 헌법 개정안 데이터가 GitHub에 데이터형태와 웹에서 보기 좋은 형태로 나와있다.

diffr 팩키지를 활용하여 각 헌법 개정본간 차이를 보기 편하게 시각화하는 함수를 만들어 비교해보자.

# 0. 환경설정 -----
library(tidyverse)
library(diffr)
library(glue)

Attaching package: 'glue'
The following object is masked from 'package:dplyr':

    collapse
# 1. 헌법 개정 이력 비교 함수 -----

get_const <- function(version) {
  const_url <- glue("https://raw.githubusercontent.com/jkiimm/constitution/master/build/assets/data/", version, "/provision.md")
  const_resp <- read_lines(const_url)
  const_resp <- str_replace_all(const_resp, "#", "")
  return(const_resp)
}

make_comp <- function(first, second) {
  file1 <- tempfile() 
  writeLines(get_const(first), con = file1)
  file2 <- tempfile() 
  writeLines(get_const(second), con = file2)
  diffr(file1, file2, before = glue("헌법: 제", first, "호"), after = glue("헌법: 제", second, "호"))
}

3.1 1948년 헌법 vs. 1988년 헌법

동일한 방식으로 가장 최근, 30년전 8번째 헌법(1980년)과 첫 헌법(1947년) 비교 가능하다.

make_comp("01", "09")

3.2 1988년 헌법 vs. 1980년 헌법

가장 최근, 30년전 8번째 헌법(1980년)과 9번째 헌법(1988년) 비교해보자.

make_comp("08", "09")