2017-02-08 15 views
1

R에서 csv 파일을 사용하여 워드 클럭을 만들었습니다. tm 패키지에서 TermDocumentMatrix 메서드를 사용했습니다. 여기 내 코드는 다음과 같습니다.r에 TermDocumentMatrix를 읽고 쓰는 방법은 무엇입니까?

csvData <- read.csv("word", encoding = "UTF-8", stringsAsFactors = FALSE) 

Encoding(csvData$content) <- "UTF-8" 
# useSejongDic() - KoNLP package 
nouns <- sapply(csvData$content, extractNoun, USE.NAMES = F) 
#create Corpus 
myCorpus <- Corpus(VectorSource(nouns)) 

myCorpus <- tm_map(myCorpus, removePunctuation) 
# remove numbers 
myCorpus <- tm_map(myCorpus, removeNumbers) 
#remove StopWord 
myCorpus <- tm_map(myCorpus, removeWords, myStopwords) 

#create Matrix 
TDM <- TermDocumentMatrix(myCorpus, control = list(wordLengths=c(2,5))) 

m <- as.matrix(TDM) 

이 프로세스에는 시간이 너무 걸리는 것으로 보입니다. 나는 extractNoun이 지나치게 많은 시간을 소비했다고 생각한다. 코드를 더 효율적으로 만들려면 결과 TDM을 파일로 저장하고 싶습니다. 이 저장된 파일을 읽을 때 m <- as.matrix(saved TDM file)을 완전히 사용할 수 있습니까? 아니면 더 나은 대안이 있습니까?

답변

1

저는 전문가는 아니지만 때때로 NLP를 사용했습니다.

parSapplyparallel 패키지에서 사용합니다. 여기 http://stat.ethz.ch/R-manual/R-devel/library/parallel/doc/parallel.pdf

parallel는 R 기지와 함께 제공되는 설명서의이 바보 사용 예이다 : 그래서, nouns <- sapply(csvData$content, extractNoun, USE.NAMES = F)를 병렬화하고 빨라집니다 :)

+0

답장을 보내 주셔서 감사합니다. 그것은 효과가 있어요! 좋은 하루 보내십시오 ~ –

+0

한 번 더 질문에 답해주세요. 너 괜찮 으면. 나는 당신이 말한대로'parallel'을 사용합니다. 그러나 이것은 거대한 기억 누출을 가져 오는 것 같았다. 그래서 임시 측정 값 인'gc() '를 사용합니다. 혹시이 경험을 해 본 적이 있습니까? 그렇다면 방법이 있습니까? –

+0

나는 그것을 보지 못했다. 그것은 시스템에 따라 다릅니다. 만약 윈도우를 사용한다면'cl <-makeCluster (no_cores, type = "FORK")'를 사용하지만 XP 이후 Windows를 사용하지 않았다면 – pachamaltese

0

난 당신이 전화를 가지고 것으로 나타났습니다

library(parallel) 
no_cores <- detectCores() - 1 
cl<-makeCluster(no_cores) 
clusterExport(cl, "base") 

base <- 2 
parSapply(cl, as.character(2:4), 
      function(exponent){ 
      x <- as.numeric(exponent) 
      c(base = base^x, self = x^x) 
      }) 

~ 라이브러리 (tm) 명령도 쉽게 병렬 처리 할 수 ​​있습니다. 라이브러리의 경우 tm이 기능은 2017 년 3 월에 질문 1 개월 후에 업데이트되었습니다. 릴리스의 섹션이 표시됩니다 라이브러리 TM 버전 0.7 (2017년 3월 2일)을위한주의 사항 새로운 기능에

:

tm_parLapply()는 이제 내부의 병렬화에 사용됩니다 변환, 필터 및 용어 - 문서 행렬 구성. 선호 병렬 처리 엔진은 tm_parLapply_engine()을 통해 등록 될 수 있습니다. 기본값은 이전 버전에서 mclapply (패키지 병렬) 대신 병렬 처리를 사용하지 않는 것입니다. 당신이 tm_map 콘텐츠 변압기를 통해 신청하는 기능이있는 경우

library(parallel) 
cores <- detectCores() 
cl <- makeCluster(cores) # use cores-1 if you want to do anything else on the PC. 
tm_parLapply_engine(cl) 
## insert your commands for create corpus, 
## tm_map and TermDocumentMatrix commands here 
tm_parLapply_engine(NULL) 
stopCluster(cl) 

것은, 당신이 통과 clusterExport를 사용해야합니다 : TM을위한 병렬화를 설정하려면

는 다음 날 위해 일했다 명령 이 기능은 tm_map (MyCorpus, content_transformer (clean)) 명령 이전에 병렬 환경에 기능합니다. EG. 내 깨끗한 기능을 환경에 전달합니다.

clusterExport(cl, "clean") 

마지막으로 한 주석은 메모리 사용량을 주시하십시오. 컴퓨터가 디스크로 페이징 메모리를 시작하면 CPU는 더 이상 중요한 경로가 아니며 모든 병렬 처리가 차이를 만들지 않습니다.