본문 바로가기
R

[R.아르] Term Document Matrix 생성시 한글 인코딩이 깨질때

by LightBlogger 2017. 10. 18.

다음과 같이 텍스트를 불러올 때는 잘 불러와졌는데


> text <- readLines("text.txt", encoding="UTF-8") 
Warning message:
In readLines("text.txt", encoding = "UTF-8") :
  incomplete final line found on 'text.txt'
> text
[1] "컴퓨터는 수치 연산을 위해 설계되었다. 컴퓨터 발명 초기에는 문자를 표현해야 하는 요구가 없었다. "                                                                           
[2] "그러나 곧 문자를 표현해야 하는 요구가 발생했다. 이기종 컴퓨터끼리 문자 데이터를 교환하기 위해서는 표준이 필요하다."
> 


말뭉치를 만들 때까지도 괜찮았는데


> text <- Corpus(VectorSource(text)) 
> inspect(text)
<<SimpleCorpus>>
Metadata:  corpus specific: 1, document level (indexed): 0
Content:  documents: 2

[1] 컴퓨터는 수치 연산을 위해 설계되었다. 컴퓨터 발명 초기에는 문자를 표현해야 하는 요구가 없었다.                    
[2] 그러나 곧 문자를 표현해야 하는 요구가 발생했다. 이기종 컴퓨터끼리 문자 데이터를 교환하기 위해서는 표준이 필요하다.
> 


TermDocumentMatrix를 만들고 나서는 사정없이 한글이 깨지는 경우가 있다.


> tdm <- TermDocumentMatrix(text, control=list(tokenize=extractNoun))
> as.matrix(tdm)
                          Docs
Terms                      1 2
  臾몄옄瑜\xbc             1 1
  諛쒕챸                   1 0
  \xec꽕怨꾨릺\xec뿀\xeb떎 1 0
  \xec닔移\x98             1 0
  \xec뾾\xec뿀\xeb떎       1 0
  \xec뿰\xec궛\xec쓣       1 0
  \xec슂援ш\xb0\u0080     1 1
  \xec쐞\xed빐             1 0
  珥덇린\xec뿉\xeb뒗       1 0
  而댄벂\xed꽣             1 0


이는 TermDocumentMatrix 함수 내에서 한글 인코딩이 깨져서 그렇다.


다음과 같이 TermDocumentMatrix > 행렬 이름 > Terms 부분의 인코딩을 다시 지정해주면 정상적으로 한글이 출력된다.


Encoding(tdm$dimnames$Terms) = 'UTF-8'


> Encoding(tdm$dimnames$Terms) = 'UTF-8'
> as.matrix(tdm)
            Docs
Terms        1 2
  문자를     1 1
  발명       1 0
  설계되었다 1 0
  수치       1 0
  없었다     1 0
  연산을     1 0
  요구가     1 1
  위해       1 0
  초기에는   1 0
  컴퓨터     1 0


샘플 문장은 오영은 님의 '한글 인코딩의 이해' 중 일부분이다.





반응형

댓글