16-3. 웹문서 텍스트마이닝
- 한글 웹문서의 자연어 처리와 정보 추출 -
1) 텍스트 마이닝
- 텍스트 마이닝(text mining)이란, 다양한 알고리즘을 이용하여 대용량의 텍스트 문서로부터 트렌드와 관심어를 찾아내는 기법이다.
2) 자연어 처리
- 자연어 처리(Natural Language Processing)란,
컴퓨터로 사람 언어를 분석, 이해, 생성하는 기술을 일컫는다.
- 품사 분석 : SimplePos09()
- str_match()를 이용한 N(체언), P(용언) 추출
3) 워드 클라우드
- 워드 클라우드(word cloud)는 텍스트의 키워드, 개념을 직관적으로 파악하도록 핵심 단어를 시작적으로 보여주는 기법이다.
4) 웹문서의 텍스트마이닝 실습
(1) '네이버 영화'에서 영화 <머니볼>의 네티즌 140자 평을 '크롤링'한다.
(2) '단어-문서 행렬'을 산출한다.
(3) 출현 빈도가 높은 단어들의 '워드 클라우드'를 생성한다.
(4) 단어 사이의 상관관계를 보여주는 '동시 발생 행렬'을 산출한다.
(5) 동시 발생 행렬을 바탕으로 단어들의 '네트워크'를 생성한다.
- 패키지 설치
install.packages("xml2") # to read html
install.packages("rvest") # to use 'html_nodes'
install.packages("KoNLP") # korean natural language processing
install.packages("tm") # corpus, term-document matrix, etc. 정보추출 도구
install.packages("stringr") # to use 'str_match' string 처리
install.packages("wordcloud") # word cloud
# install.packages("qgraph") # qgraph of co-occurence matrix 네트워크
- 인코딩(UTF-8)방식 변경 (한글 인코딩)
Tools_Global options 메뉴에서 Code_Saving으로 가서 UTF-8로 변경
- 크롤링(crawling)
- 웹페이지를 그대로 가져와서 데이터를 추출해 내는 행위이다.
- 데이터를 개인 하드에 소장하는 것은 합법이나, 배포는 불법이다.
- 네이버 영화 <머니볼> 네티즌 140자 평
# 크롤링 대상 URL
reviews <- c()
# 140자평 저장 벡터
for(page in 1:10){
url <- paste(url_base, page, sep='') # from page 1 to 70 1~10페이지까지 데이터 수집
htxt <- read_html(url)
comment <- html_nodes(htxt, 'div')%>%html_nodes('div.input_netizen')%>%
html_nodes('div.score_result')%>%html_nodes('ul')%>%html_nodes('li')%>%
html_nodes('div.score_reple')%>%html_nodes('p') # exact location of comments 140자평 위치
review <- html_text(comment) # extract only texts from comments 실제 리뷰 text 파일만 추출
review <- repair_encoding(review, from = 'utf-8') # repair faulty encoding 인코딩 변경
review <- str_trim(review) # trim whitespace from start and end of string 앞뒤 공백 문자 제거
reviews <- c(reviews, review) # save results 결과값 저장
}
6) 자연어 처리
- 용언, 체언 추출 function
ext_func <- function(doc){
doc_char <- as.character(doc)
ext1 <- paste(SimplePos09(doc_char)) # 품사 분석
ext2 <- str_match(ext1, '([A-Z가-힣]+)/[NP]') # 용언, 체언 선택
keyword <- ext2[,2]
keyword[!is.na(keyword)] # NA 값 제외
}
7) 정보 추출
- 단어-문서 행렬
corp <- Corpus(VectorSource(reviews)) # generate a corpus 말뭉치(corpus) 생성
tdm <- TermDocumentMatrix(corp, # generate a term-document matrix 용어-문서 행렬 산출
control=list(
tokenize=ext_func,
removePunctuation=T,
removeNumbers=T,
wordLengths=c(4,8)))
tdm_matrix <- as.matrix(tdm) # save as a matrix 행렬로 변환
Encoding(rownames(tdm_matrix)) <- "UTF-8" # encoding 인코딩
word_count <- rowSums(tdm_matrix) # sum of term frequencies of each word 각단어별 총출현빈도 계산
word_order <- word_count[order(word_count, decreasing=T)] # sort in descending order 내림차순 정렬
doc <- as.data.frame(word_order) # save as a data frame 데이터 프레임으로 변환
8) 워드 클라우드 구현
- wordcloud() 함수
library(wordcloud)
windowsFonts(font=windowsFont("맑은 고딕")) # set font
set.seed(1234) # 동일한 워드 클라우드 생성 (난수 고정)
wordcloud(words=rownames(doc), # 키워드
freq=doc$word_order, # 빈도
min.freq=2, # 최소 출현 빈도
max.words=100, # 출력 키워드 수
random.order=FALSE, # 고빈도 키워드 중앙 배치
scale=c(5,1), # 키워드 크기 범위
rot.per=0.35, # 회전 키워드 비율
family="font", colors=brewer.pal(8,"Dark2"))
9) 고급 텍스트 마이닝
'공부 > R & Python' 카테고리의 다른 글
16-2. Convolutional Neural Network (0) | 2020.03.06 |
---|---|
16-1. 딥러닝과 텍스트 마이닝-Neural Network (0) | 2020.03.06 |
15-3. Partial Least Square (0) | 2020.03.06 |
15-2. 주성분 회귀분석(Principle Component Regression) (0) | 2020.03.06 |
15-1. 주성분 분석과 부분 최소자승법-주성분분석(Principle Component Analysis) (0) | 2020.03.06 |