2017-05-23 6 views
0

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" 
+1

DTMでcolSumsを実行するのではなく、すべてのDocs全体の出現回数の合計を取得したい場合は、DocsをまとめてまとめたCorpusにDTMを作成できますか? – Lamia

+0

'as.matrix(x)'は最低でも4GBの23601x44619の行列を作成します – HubertL

答えて

0

より多くの情報がなければ、私は多くを語ることはできませんが、私の推測では、それは、これらのステートメントのいずれかのいずれかである:m[,2] <- colSums(as.matrix(x))またはm[order(m[,2], decreasing=TRUE),]

以下のような質問があります。マトリックスに変換する必要がありますか?あなたはリストを渡す必要がありますか?メモリを節約するために、leanerアプローチやdata.tableのような参照型を使用してみませんか?

希望すると便利です。

関連する問題