59doit
의미망 분석 #5 연이어 사용된 단어쌍 분석 (1) 본문
반응형
(4) 연이어 사용된 단어쌍 분석
엔그램(n-gram)
- 연이어 사용된 n개의 단어
두 단어 연속: 바이그램(bigram) 또는 2-gram
세 단어 연속: 트라이그램(trigram) 또는 3-gram
- 텍스트를 엔그램으로 토큰화하면
단어 앞뒤에 연이어 사용된 단어를 함께 살펴봄: 얼마나 자주 '연이어' 사용된 단어쌍인가?
단어가 연결될 때 생기는 의미와 맥락을 이해할 수 있음
대다수의 텍스트에 사용된 평범한 단어쌍이 아니라 분명한 의미를 드러내는 단어쌍 발견
# 엔그램으로 토큰화하기
#1 샘플 텍스트로 엔그램 토큰화해보기
tidytext::unnest_tokens()
token = "ngrams" n : 기준 단어 수
text <- tibble(value = "대한민국은 민주공화국이다. 대한민국의 주권은 국민에게 있고, 모든 권력은 국민으로부터 나온다.") text ## # A tibble: 1 x 1 ## value ## <chr> ## 1 대한민국은 민주공화국이다. 대한민국의 주권은 국민에게 있고, 모든 권력은 ~ |
#1-1) 바이그램 토큰화
text %>% unnest_tokens(input = value, output = word, token = "ngrams", n = 2) ## # A tibble: 9 x 1 ## word ## <chr> ## 1 대한민국은 민주공화국이다 ## 2 민주공화국이다 대한민국의 ## 3 대한민국의 주권은 ## 4 주권은 국민에게 ## 5 국민에게 있고 ## 6 있고 모든 ## 7 모든 권력은 ## 8 권력은 국민으로부터 ## 9 국민으로부터 나온다 |
#1-2) 트라이그램 토큰화
text %>% unnest_tokens(input = value, output = word, token = "ngrams", n = 3) ## # A tibble: 8 x 1 ## word ## <chr> ## 1 대한민국은 민주공화국이다 대한민국의 ## 2 민주공화국이다 대한민국의 주권은 ## 3 대한민국의 주권은 국민에게 ## 4 주권은 국민에게 있고 ## 5 국민에게 있고 모든 ## 6 있고 모든 권력은 ## 7 모든 권력은 국민으로부터 ## 8 권력은 국민으로부터 나온다 |
#1-3) 단어기준 토큰화
text %>% unnest_tokens(input = value, output = word, token = "words") ## # A tibble: 10 x 1 ## word ## <chr> ## 1 대한민국은 ## 2 민주공화국이다 ## 3 대한민국의 ## 4 주권은 ## 5 국민에게 ## 6 있고 ## 7 모든 ## 8 권력은 ## 9 국민으로부터 ## 10 나온다 |
#1-4) 유니그램 토큰화
text %>% unnest_tokens(input = value, output = word, token = "ngrams", n = 1) ## # A tibble: 10 x 1 ## word ## <chr> ## 1 대한민국은 ## 2 민주공화국이다 ## 3 대한민국의 ## 4 주권은 ## 5 국민에게 ## 6 있고 ## 7 모든 ## 8 권력은 ## 9 국민으로부터 ## 10 나온다 |
# 단어 기준 토큰화 = 유니그램 토큰화
# 기사 댓글로 바이그램 만들기
# 1 명사, 동사, 형용사 추출하기
- comment_pos 이용: 댓글을 형태소로 토큰화 후 품사별로 행 분리
- 명사, 동사, 형용사를 추출해 결합한 후 두 글자 이상만 남김
comment_pos # # A tibble: 70,842 x 3 # reply id word # <chr> <int> <chr> # 1 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 정말~ # 2 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 우리~ # 3 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 집/nc # 4 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 에/jc # 5 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 좋/pa # 6 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 은/et # 7 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 일/nc # 8 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 이/jc # 9 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 생기~ # 10 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 어/ec # # ... with 70,832 more rows |
comment_new <- comment_pos %>% separate_rows(word, sep = "[+]") %>% filter(str_detect(word, "/n|/pv|/pa")) %>% mutate(word = ifelse(str_detect(word, "/pv|/pa"), str_replace(word, "/.*$", "다"), str_remove(word, "/.*$"))) %>% filter(str_count(word) >= 2) %>% arrange(id) |
comment_new # # A tibble: 26,821 x 3 # reply id word # <chr> <int> <chr> # 1 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 우리 # 2 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 좋다 # 3 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 생기~ # 4 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 기쁘~ # 5 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 행복~ # 6 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 행복 # 7 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 축하~ # 8 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 행복 # 9 정말 우리 집에 좋은 일이 생겨 기쁘고 행복한 것처럼 나의 일인 ~ 1 기쁘~ # 10 와 너무 기쁘다 이 시국에 정말 내 일같이 기쁘고 감사하다 축하~ 2 기쁘~ # # ... with 26,811 more rows |
cf ) 바이그램으로 토큰화할 때는 형태소 추출 먼저
텍스트 원문을 바이그램으로 토큰화하면 원형은 같지만 표현만 다른 단어들이 개별 단어로 취급됨 ex)) '하다', '했다', '하며', '하므로'
표현이 아니라 의미 중심으로 분석해야 하므로 형태소를 먼저 추출한 다음 바이그램으로 토큰화해 야 함
#2 유의어 처리하기
comment_new <- comment_new %>% mutate(word = ifelse(str_detect(word, "감독") & !str_detect(word, "감독상"), "봉준호", word), word = ifelse(word == "오르다", "올리다", word), word = ifelse(str_detect(word, "축하"), "축하", word)) |
#3 한 댓글이 하나의 행이 되도록 결합하기
comment_new %>% select(word) ## # A tibble: 26,821 x 1 ## word ## <chr> ## 1 우리 ## 2 좋다 ## 3 생기다 ## 4 기쁘다 ## 5 행복한 ## 6 행복 ## 7 축하 ## 8 행복 ## 9 기쁘다 ## 10 기쁘다 ## # … with 26,811 more rows line_comment <- comment_new %>% group_by(id) %>% summarise(sentence = paste(word, collapse = " ")) line_comment ## # A tibble: 4,006 x 2 ## id sentence ## * <int> <chr> ## 1 1 우리 좋다 생기다 기쁘다 행복한 행복 축하 행복 기쁘다 ## 2 2 기쁘다 시국 기쁘다 감사하다 축하 진심 ## 3 3 우리나라 봉준호 불다 크다 영감 봉준호 공동각본쓴 한진 작가님 축하 축하 드리다… ## 4 4 봉준호 봉준호 우리나라 대한민국 자랑 세계 어디 우리 한국인 힘내다 삽시 ## 5 5 노벨상 탄느낌이네요 축하 ## 6 6 기생충 받다 박수 치다 감독상 기대다 봉준호 봉준호 ## 7 7 대한민국 영화사 쓰다 계시다 ## 8 8 아카데미상 받다 태극기 휘날리다 광해 명량 전부문 휩쓸어야겠 ## 9 9 다시한번 보이다 영화관 ## 10 10 대한민국 봉준호 대단 한국의 문화 자긍심 가지 ## # … with 3,996 more rows |
#4 바이그램으로 토큰화하기
bigram_comment <- line_comment %>% unnest_tokens(input = sentence, output = bigram, token = "ngrams", n = 2) bigram_comment ## # A tibble: 23,313 x 2 ## id bigram ## <int> <chr> ## 1 1 우리 좋다 ## 2 1 좋다 생기다 ## 3 1 생기다 기쁘다 ## 4 1 기쁘다 행복한 ## 5 1 행복한 행복 ## 6 1 행복 축하 ## 7 1 축하 행복 ## 8 1 행복 기쁘다 ## 9 2 기쁘다 시국 ## 10 2 시국 기쁘다 ## # … with 23,303 more rows |
반응형
'텍스트마이닝' 카테고리의 다른 글
의미망 분석 #6 연이어 사용된 단어쌍 분석 (2) (0) | 2022.12.27 |
---|---|
의미망 분석 #4 단어 간 상관 분석 (0) | 2022.12.26 |
의미망 분석 #3 동시 출현 네트워크 (2) (0) | 2022.12.26 |
의미망 분석 #2 동시 출현 네트워크 (1) (0) | 2022.12.25 |
의미망 분석 #1 동시 출현 단어 분석 (0) | 2022.12.25 |
Comments