IT grow. 2018. 11. 18. 21:26
반응형

논문크롤링을 해올 때 , 한글이 깨져서 wordcloud가 제대로 출력이 안된적이 있따.


나의 추측은 다음과 같았다.


1.Sys.setlocale의 혼동

--> 왜냐하면 나는 다음과 같이 설정을 한 적이 있었다.

Sys.setlocale(category = "LC_ALL", locale ="us")

Sys.setlocale(category = "LC_ALL",locale ="korean")

이 두개를 번걸아 가면서 작업을 한 적이 있다 . 
영어와 한국어를 다뤄야 하는 부분이 있었기 때문이다.

결론은 이 문제는 아니였다.

왜냐하면 

Sys.getlocale() 를 하게되면 내가 설정해주는 언어로 제대로 바뀌고 있었다....


2. tdm_modi <- TermDocumentMatrix(modi_data)

TermDocumentMatrix를 사용할 때 언어가 깨지는 것을 작업도중에 확인할 수 있었다.

그래서 만들어준 Matrix를 다음과 같이 UTF-8 설정을 해주어 보았다.

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


결과는 false .. 안된다


구글링중 나같이 오류가 나는 사람이 있었다.


그의 조언은 다음과 같았다.


우선 출처 사이트 : https://www.facebook.com/groups/krstudy/permalink/765747536932854/

 

글쓴이는 다음처럼 말하고 있다.

작성하신 코드에서 Corpus 함수를 쓰셨는데, 함수로 생성한 "SimpleCorpus" 문제 때문입니다. tm 패키지 매뉴얼에서 TermDocumentMatrix 함수설명 가운데, "control" argument 부분을 옮겨보겠습니다

"This is different for a SimpleCorpus. In this case all options are processed in a fixed order in one pass to improve performance. It always uses the Boost(http://www.boost.org) Tokenizer (via Rcpp) and takes no custom functions as option arguments."

SimpleCorpus
대해서는 tokenizer "언제나" Boost 녀석을 쓴다고 되어 있네요

따라서 작성하신 코드에서 Corpus VCorpus 바꾸고, as.matrix(tdm.ja) 해보세요. 그럼 깨지지 않고 매트릭스가 나오는 것을 확인하실 있을 겁니다.


쉽게 말해서 Corpus 앞에 V를 붙여서 사용하라고 하는 것인데 , 그래서 그냥 해봤다.


우선 Corpus 하는 부분을 VCorpus로 바꿔주었다.

modi_data <- VCorpus(DataframeSource(df))

 

깨짐 현상이 발생했던

tdm_modi <- TermDocumentMatrix(modi_data)

이 부분도 해주었다.

> head(profile,10)

                 word freq

미치는         미치는   10

일본의         일본의    3

활용한         활용한    3

account       account    2

and               and    2

it기반의     it기반의    2

management management    2

units           units    2

공급사슬     공급사슬    2

교과서인가 교과서인가    2

 

결과값이다..

한글이 안깨지고 실행이된다..!!

 

중복되는 부분도 제거해 주고

word freq

1      미치는   10

2      일본의    3

3      활용한    3

4     account    2

5         and    2

6    it기반의    2

7  management    2

8       units    2

9    공급사슬    2

10 교과서인가    2

 

Wordcloud로 실행해 보면

 

다음과 같이 제대로 한글이 안깨지고 실행이 된다.



결국 원인은 Corpus --> VCorpus를 사용해서 해야한다.


그런데 왜 그런걸까??


https://stats.stackexchange.com/questions/164372/what-is-vectorsource-and-vcorpus-in-tm-text-mining-package-in-r


위 사이트에서는 다음과 같이 말하고 있다.


VCorpus in tm refers to "Volatile" corpus which means that the corpus is stored in memory and would be destroyed when the R object containing it is destroyed. Contrast this with PCorpus or Permanent Corpus which are stored outside the memory say in a db.

-->tm에있는 VCorpus는 "휘발성 (Volatile)"코퍼스를 말하며 이는 코퍼스가 메모리에 저장되어 있고이를 포함하고있는 R 객체가 파괴되면 파괴된다는 것을 의미합니다.

이말은 잘 와닿지 않는다.


그래서 조금더 찾아 보았다.

출처 : http://angerhang.github.io/statsWithR/tutorials/textMiningIntro.html


Corpustm텍스트 문서를 저장하고 조작하기 위해 사용 하는 기본 구조 VCorpus (휘발성 코퍼스)와 PCorpus (영원한 코퍼스)의 두 가지 유형이 있는데,이 두 구현의 주요 차이점은 전자는 R 객체로 메모리에 보관하고 후자는 R 환경 외부에 저장된 문서를 처리한다는 점


1. 텍스트가 포함된 문서 모음

2. 일종의 말 뭉치  


확 이해가 되진 않는다.


더 찾게 되면 올려야겠다.

아무튼 Corpus --> VCorpus 로 하자.


출처사이트 : https://www.boost.org/


반응형