5

1859 個のドキュメント (行) と 25722 個 (列) を含む DocumentTermMatrix を作成しました。この行列でさらに計算を実行するには、通常の行列に変換する必要があります。as.matrix()コマンドを使いたい。ただし、次のエラーが返されます: サイズ 364.8 MB のベクトルを割り当てることができません。

> corp
A corpus with 1859 text documents
> mat<-DocumentTermMatrix(corp)
> dim(mat)
[1]  1859 25722
> is(mat)
[1] "DocumentTermMatrix"
> mat2<-as.matrix(mat)
Fehler: kann Vektor der Größe 364.8 MB nicht allozieren # cannot allocate vector of size 364.8 MB
> object.size(mat)
5502000 bytes

何らかの理由で、オブジェクトが通常の行列に変換されるたびに、オブジェクトのサイズが劇的に増加するように見えます。どうすればこれを回避できますか?

または、DocumentTermMatrix で通常のマトリックス操作を実行する別の方法はありますか?

4

5 に答える 5

10

手っ取り早い方法は、 のような外部パッケージから疎行列オブジェクトにデータをエクスポートすることMatrixです。

> attributes(dtm)
$names
[1] "i"        "j"        "v"        "nrow"     "ncol"     "dimnames"

$class
[1] "DocumentTermMatrix"    "simple_triplet_matrix"

$Weighting
[1] "term frequency" "tf"            

dtm オブジェクトには、DocumentTermMatrix の内部表現である i、j、および v 属性があります。使用する:

library("Matrix") 
mat <- sparseMatrix(
           i=dtm$i,
           j=dtm$j, 
           x=dtm$v,
           dims=c(dtm$nrow, dtm$ncol)
           )

これで完了です。

オブジェクト間の単純な比較:

> mat[1,1:100]
> head(as.vector(dtm[1,]), 100)

それぞれまったく同じ出力が得られます。

于 2012-12-12T17:24:58.007 に答える
0

R で使用できる RAM の量を増やすことはできますか? この投稿を参照してください: R プロセスで使用可能なメモリを増やす (または減らす)

また、R で大きなオブジェクトを操作しているときは、ときどき、gc()無駄なメモリを解放するために呼び出します。

于 2011-09-12T12:38:38.093 に答える
0

DocumentTermMatrix はスパース マトリックス表現を使用するため、これらすべてのゼロを格納するためのメモリをすべて占有することはありません。何をしたいかによっては、スパース行列を使用した線形代数ルーチンを提供するSparseMパッケージで運が良いかもしれません。

于 2011-09-11T18:26:50.993 に答える
0

ドキュメントの数は問題になりませんが、まばらな用語を削除してみてください。これにより、ドキュメント用語マトリックスの次元が大幅に削減される可能性があります。

inspect(removeSparseTerms(dtm, 0.7))

スパース性が 0.7 以上の項を削除します。

使用可能な別のオプションは、ドキュメント用語マトリックスを作成するときに、最小単語長と最小ドキュメント頻度を指定することです。

a.dtm <- DocumentTermMatrix(a.corpus, control = list(weighting = weightTfIdf, minWordLength = 2, minDocFreq = 5))

inspect(dtm)変更の前後に使用すると、大きな違いが見られます。さらに重要なのは、ドキュメントや用語に隠された重要な関係を台無しにしないことです。

于 2014-06-18T21:05:27.667 に答える