본문 바로가기
R

[R.아르] 문장에서 보통명사만 추출하기(2)

by LightBlogger 2016. 12. 6.

2016/12/06 - [R] - [R.아르]문장에서 보통명사만 추출하기(1)에 이어 


본격적으로 추출해 보자.


역시 만료 저작물 중 하나인 <운수 좋은 날>의 텍스트를 UTF-8 형식으로 저장한다.


(주소: https://gongu.copyright.or.kr/gongu/wrt/wrt/view.do?wrtSn=9002094&menuNo=200030)



이후 순서는 루틴이므로 고민 없이 차례대로 진행하면 되겠다.


1. 텍스트 읽어오기

2. 말뭉치(Corpus) 로 변환

3. Term Document Matrix 로 변환

4. 표(matrix)로 변환

5. 각 행의 합을 구함

6. 빈도역순으로 정렬


Corpus 등으로 변환하려면 tm 패키지를 불러와야 한다.


불러오는 김에 멀티코어를 사용하지 않음도 정의해 주고,


사전도 변경해 주자. 일련의 준비작업이다.


library(KoNLP)

library(tm)

useSejongDic()

options(mc.cores=1)



이제 다음과 같이 입력할 것이다.


각 라인의 의미를 주석으로 표기하였다.


text <- readLines("text.txt", encoding="UTF-8") 

#1.텍스트읽어오기


doc <- Corpus(VectorSource(text)) 

#2.말뭉치변환


doc <- TermDocumentMatrix(doc,  #3.TermDocumentMatrix변환

control=list(                               #아래로옵션을나열

tokenize=words,                         #미리만들어둔함수(보통명사추출)로문장을자름

removeNumbers=T,                     #숫자제거

removePunctuation=T,                 #문장부호제거

wordLengths=c(1, 5)                    #1~5음절로이루어진단어만추출

))


doc <- as.matrix(doc) 

#4.Matrix로변환


doc <- rowSums(doc)

#5.행의합(총빈도)


doc <- doc[order(doc, decreasing=T)]

#빈도역순정렬


as.data.frame(doc[1:20])

#상위20개단어보기


wordLengths=는 기본이 (3, inf) 로 설정되어 있다. 


이는 영어 기준으로 1~2개의 알파벳으로 이루어진 단어가 별로 의미가 없기 때문



위와 같이 파악할 수 있다.


김첨지를 왜 보통명사로 파악했는지는 모를 일이다.


특정 단어를 제외하고 싶다면 옵션 항목의 [stopwords=]을 이용한다.



마지막으로 혹시 워드클라우드를 만들고 싶다면 


1. 결과를 데이터프레임으로 변환


2. wordcloud 라이브러리를 호출


3. 다음 명령을 입력


하면 된다.


set.seed(1234)

wordcloud(words = rownames(doc), freq = doc$doc, min.freq = 1,

          max.words=200, random.order=FALSE, rot.per=0.35, 

          family="font",

          colors=brewer.pal(8, "Dark2"))


세세한 옵션들은 수치를 직접 조정해 보자.





반응형

댓글