Data Analysis

R/텍스트마이닝

[텍스트마이닝] 텍스트 마이닝 관련 실습

Holy_Water 2022. 11. 16. 17:21

관련 용어

 

1) 웹 크롤링
웹 코롤링(web crawling): 웹을 탐색하는 컴퓨터 프로그램(크롤러)를 이용하여 여러 인터넷 사이트의 웹 페이지 자료를 수집해서 분류하는 과정
크롤러(crawler): 자동화된 방법으로 월드와이드 웹(www)을 탐색하는 컴퓨터 프로그램
2) 스크래핑
스크래핑(scraping)이란 웹사이트이 내용을 가져와 원하는 형태로 가공하는 기술.
웹사이트의 데이터를 수집하는 모든 작업. 크롤링도 스크래핑 기술의 일종.
3) 파싱
파싱(parsing): 어떤 페이지(문서, HTML 등)에서 사용자가 원하는 데이터를 특정 패턴이나 순서로 추출하여 정보를 가공하는 것.
HTML 소스를 문자열로 수집한 후 실제 HTML 태그로 인식할 수 있도록 문자열을 의미있는 단위로 분해하고, 계층적인 트리 구조를 만드는 과정

 

(1) 패키지 설치 및 준비

실습: 웹 문서 요청과 파싱 관련 패키지 설치 및 로딩

install.packages("httr")
library(httr)
install.packages("XML")
library(XML)

 

(2) url 요청

실습: 웹 문서 요청

url <- "http://media.daum.net"
web <- GET(url)

 

 

(3) HTML 파싱

실습: HTML 파싱하기

html <- htmlTreeParse(web, useInternalNodes = T, trim = T, encoding = "utf-8")
rootNode <- xmlRoot(html)

 

(4) 태그(tag) 자료 수집
실습: 태그 자료 수집하기

news <- xpathSApply(rootNode, "//a[@class = 'link_txt']", xmlValue)
news

 

실습: 자료 전처리하기 

단계 1: 자료 전처리 - 수집한 문서를 대상으로 불용어 제거

news_pre <- gsub("[\r\n\t]", ' ', news)
news_pre <- gsub('[[:punct:]]', ' ', news_pre)
news_pre <- gsub('[[:cntrl:]]', ' ', news_pre)
# news_pre <- gsub('\\d+', ' ', news_pre) # corona19(covid19) 때문에 숫자 제거 생략
news_pre <- gsub('[a-z]+', ' ', news_pre)
news_pre <- gsub('[A-Z]+', ' ', news_pre)
news_pre <- gsub('\\s+', ' ', news_pre)
news_pre

 

단계 2: 기사와 관계 없는 'TODAY', '검색어 순위' 등의 내용은 제거

news_data <- news_pre[1:59]
news_data

 

(6) 파일 저장 및 읽기

실습: 수집한 자료를 파일로 저장하고 읽기

setwd("C:/Users/tj-bu/Documents/Rwork/") 
write.csv(news_data, "news_data.csv", quote = F)
news_data <- read.csv("news_data.csv", header = T, stringsAsFactors = F)
str(news_data)
names(news_data) <- c("no", "news_text")
head(news_data)
news_text <- news_data$news_text
news_text

 

 

(7) 토픽분석 

실습: 세종 사전에 단어 추가

user_dic <- data.frame(term = c("펜데믹", "코로나19", "타다"), tag = 'ncn')
buildDictionary(ext_dic = 'sejong', user_dic = user_dic)

 

실습: 단어 추출 사용자 함수 정의하기

단계 1: 사용자 정의 함수 작성

exNouns <- function(x) { paste(extractNoun(x), collapse = " ")}

 

단계 2: exNouns() 함수를 이용하어 단어 추출

news_nouns <- sapply(news_text, exNouns)
news_nouns

 

단계 3: 추출 결과 확인

str(news_nouns)