@Vineet은 문서 용어 매트릭스를 비 스파 스 매트릭스로 변환하기 위해 R이 603Gb를 할당하려고했던 이유를 보여주는 수학입니다. R에있는 행렬의 각 숫자 셀은 8 바이트를 소비합니다. 문제의 문서 용어 행렬의 크기에 따라, 수학 보이는 같은 :
> #
> # calculate memory consumed by matrix
> #
>
> rows <- 472029 #
> cols <- 171548
> # memory in gigabytes
> rows * cols * 8/(1024 * 1024 * 1024)
[1] 603.3155
라는 단어 주파수를 계산하려면, 당신은 1 그램을 생성 한 다음 주파수로 요약 더 낫다 분포.
quanteda
패키지의 코드는 다음과 같습니다.
words <- tokenize(...)
ngram1 <- unlist(tokens_ngrams(words,n=1))
ngram1freq <- data.frame(table(ngram1))
안부
렌
2017년 11월 24일 UPDATE : 여기서textstat_frequency()
함수를 사용하여 문서의 특성 행렬의 빈도 분포를 생성 quanteda 패키지의 전체 예제 상위 20 개 기능에 대해서는 barplot()
입니다.
이 접근 방식에서는 n-gram을 빈도 분포로 집계하지 않아도됩니다. &
library(quanteda)
myCorpus <- corpus(data_char_ukimmig2010)
system.time(theDFM <- dfm(myCorpus,tolower=TRUE,
remove=c(stopwords(),",",".","-","\"","'","(",")",";",":")))
system.time(textFreq <- textstat_frequency(theDFM))
hist(textFreq$frequency,
main="Frequency Distribution of Words: UK 2010 Election Manifestos")
top20 <- textFreq[1:20,]
barplot(height=top20$frequency,
names.arg=top20$feature,
horiz=FALSE,
las=2,
main="Top 20 Words: UK 2010 Election Manifestos")
... 그 결과 barplot :
당신이 직접 원하는 주파수를 압축을 해제하는 방법 찾기 'dtm'? 그 물체는 기억 속에 존재하는 것 같습니다. 당신은 정말로 터무니없이 큰 매트릭스로 변환해야합니까? –
dtm은 드문 드문 한 행렬이므로 zero 항목은 0으로 저장되지 않으며 메모리를 절약합니다. 'as.matrix()'로 변환하자마자 zero 엔트리는 true로 채워진다. 따라서이 변환을 피하고 희소 행렬을 조작하십시오. dtm으로 무엇을 할 계획입니까? –
또 다른 것은 중요하지 않은 용어를 삭제하기 위해 조건에 tf-idf 가중치 또는 다른 가중치 옵션을 사용할 수 있습니다. 이렇게하면 매트릭스의 크기가 상당히 줄어 듭니다. –