대한민국 헌법은 국가법령정보센터 웹사이트에서 확인할 수 있다. 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#")
헌법 전문 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)
최근 문재인 대통령이 발의한 대통령 개정안을 제외한 총 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, "호"))
}
동일한 방식으로 가장 최근, 30년전 8번째 헌법(1980년)과 첫 헌법(1947년) 비교 가능하다.
make_comp("01", "09")
가장 최근, 30년전 8번째 헌법(1980년)과 9번째 헌법(1988년) 비교해보자.
make_comp("08", "09")