Preprocessing Example For Korean in Text Mining
다루는 언어가
한국어
일 때 전처리 과정을 보여준다.
pacman::p_load("KoNLP",
"tm",
"stringr")
# useSystemDic() # 시스템 사전 설정
# useSejongDic() # 세종 사전 설정정
useNIADic() # NIADic 사전 설정 (추천)
Backup was just finished!
983012 words dictionary was built.
mytext <- c("이 문장은 K-pop 가사에 자주 등장합니다!!"NA"이 문장은 \t 2021년에 씌여졌습니다:)")",
"모든 문장들이 흥미롭다."NA)NAcorpus <- VCorpus(VectorSource(mytext)) # VectorSource : vector를 document로 해석석
corpus
<<VCorpus>>
Metadata: corpus specific: 0, document level (indexed): 0
Content: documents: 3
summary(corpus)
Length Class Mode
1 2 PlainTextDocument list
2 2 PlainTextDocument list
3 2 PlainTextDocument list
어떠한 영어표현들이 있는지 확인하며 필요없는 단어들은 제거한다.
myEnglish <- lapply(corpus, function(x){ str_extract_all(x$content, "[[:graph:]]{0,}([[:upper:]]{1}|[[:lower:]]{1})[[:lower:]]{0,}[[:graph:]]{0,}")})
table(unlist(myEnglish))
K-pop
1
텍스트 마이닝에서 숫자표현은 여러가지 의미를 가진다.
숫자 자체가 고유한 의미를 갖는 경우
는 단순히 제거하면 안되고,단지 숫자가 포함된 표현
이라면 모든 숫자는 하나로 통일한다.숫자가 문장에 아무런 의미가 없는 경우
는 제거를 한다.
# 숫자표현 확인NAmydigits <- lapply(corpus, function(x){str_extract_all(x$content,
"[[:graph:]]{0,}[[:digit:]]{1,}[[:graph:]]{0,}")})
table(unlist(mydigits))
2021년에
1
corpus <- tm_map(corpus, removeNumbers)
텍스트 마이닝에서 문장부호(“.”, “,” 등) 및 특수문자(“?”, “!”, “@” 등)은 일반적으로 제거한다. 그러나
똑같은 부호라도 특별한 의미가 있는 경우는 제거할 때 주의
를 해야한다.
# 특수문자 확인
mypuncts <- lapply(corpus, function(x){ str_extract_all(x$content,
"[[:graph:]]{0,}[[:punct:]]{1,}[[:graph:]]{0,}")})
table(unlist(mypuncts))
K-pop 등장합니다!! 씌여졌습니다:) 흥미롭다.
1 1 1 1
corpus <- tm_map(corpus, removePunctuation)
2개 이상의 공란이 연달아 발견될 경우 해당
공란을 1개로 변환
시키는 작업이다.
corpus <- tm_map(corpus, stripWhitespace)
수집된 문서들의 집합인 말뭉치(Corpus)를 토큰(Token) 으로 나누는 작업
이며, 토큰이 단어일 때는 단어 토큰화, 문장일 때는 문장 토큰화라고 부른다.
pacman::p_load("KoNLP")
myNounCorpus <- lapply(corpus, function(x){paste(extractNoun(x$content),collapse=' ')}) # extractNoun : 의미의 핵심이라고 할 수 있는 명사 추출 / 사전에 등록되어있는 명사 기준 NAwords_nouns <- lapply(myNounCorpus,
function(x){str_extract_all(x,boundary("word"))} #전체 말뭉치 단어를 확인인
)
table(unlist(words_nouns))
Kpop 가사 년 들이 등장 문장
1 1 1 1 1 3
씌여졌습니 합 흥미롭
1 1 1
빈번하게 사용되거나 구체적인 의미를 찾기 어려운 단어를 불용단어 또는 정지단어라 부른다.
영어는 "tm" 패키지를 통해 널리 알려진 불용어 목록이 있으나 한국어는 없다.
corpus1 <- tm_map(corpus, removeWords, words=c("이" ""다"))
같은 의미를 가진 단어라도 문법적 기능에 따라 다양한 형태를 가진다. 예를 들어, “go”는 “goes”, “gone” 등과 같이 변할 수 있다. 이 때,
문법적 또는 의미적으로 변화한 단어의 원형
을 찾아내는 작업을 말한다.
말뭉치(Corpus)에 대한 전처리를 거친 후 문서×단어 행렬(Document-Term Matrix, DTM)을 구축할 수 있다.
dtm <- DocumentTermMatrix(corpus1) # 문서x단어 행렬렬
inspect(dtm)
<<DocumentTermMatrix (documents: 3, terms: 7)>>
Non-/sparse entries: 8/13
Sparsity : 62%
Maximal term length: 6
Weighting : term frequency (tf)
Sample :
Terms
Docs kpop 가사에 등장합니다 문장들이 문장은 씌여졌습니다 흥미롭다
1 1 1 1 0 1 0 0
2 0 0 0 0 1 1 0
3 0 0 0 1 0 0 1
Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".