Ngramsを使用するテキスト予測モデルを作成しています。 DTMに変換するテキスト文書(ツイート)があります。 DTMは7.3Mbです。次のコードを使用してNgramに変換します。DTMからngramを作成すると、あまりにも多くのメモリが必要になる
createNgramTable <- function(x)
{
m <- matrix(nrow = x$ncol, ncol = 2)
m[,1] <- x$dimnames$Terms
m[,2] <- colSums(as.matrix(x))
colnames(m) <- c("ngram", "freq")
m <- m[order(m[,2], decreasing=TRUE),]
return(m)
}
このコードは、1列という用語及びIは、次に良い測定のためにそれをソートカラム2と出現数とマトリクスを作成します。それは小さなデータセットで動作しますが、上記のDTMで実行すると失敗します。 Rはこの機能を実行するために必要な8Gb以上のRAMを割り当てようとします。私は何をしているのですか?そのような記憶豚です。どうすればそれをやるのを避けることができますか?ここで
はDTM用str()
です:
List of 6
$ i : int [1:226963] 1 1 1 2 2 2 2 2 2 2 ...
$ j : int [1:226963] 9142 22286 25985 5235 6822 8736 10336 15883
20888 22652 ...
$ v : num [1:226963] 1 1 1 1 1 1 2 1 1 1 ...
$ nrow : int 23601
$ ncol : int 44619
$ dimnames:List of 2
..$ Docs : chr [1:23601] "1" "2" "3" "4" ...
..$ Terms: chr [1:44619] "''iran" "''true" "''when" "'-)" ...
- attr(*, "class")= chr [1:2] "DocumentTermMatrix" "simple_triplet_matrix"
- attr(*, "weighting")= chr [1:2] "term frequency" "tf"
DTMでcolSumsを実行するのではなく、すべてのDocs全体の出現回数の合計を取得したい場合は、DocsをまとめてまとめたCorpusにDTMを作成できますか? – Lamia
'as.matrix(x)'は最低でも4GBの23601x44619の行列を作成します – HubertL