2011-09-11 20 views
5

1859個のドキュメント(行)と25722(列)を含むDocumentTermMatrixを作成しました。この行列をさらに計算するために、それを規則的な行列に変換する必要があります。 as.matrix()コマンドを使用します。ただし、次のエラーを返します。サイズ364.8 MBのベクトルを割り当てることができません。tmパッケージエラー "ベクトルが大きすぎるため、DocumentTermMatrixを通常の行列に変換できません"

> 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で通常のマトリックス操作を実行する別の方法がありますか?

答えて

0

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

+0

お返事ありがとうございます。残念ながら、SparseMは、各行ペア間のJaccard類似度を計算する必要があるため、役立たないようには思えません。これは、ビーガンパッケージのvegdist()関数を使用して行います。これは疎な行列では機能しません。 – Christian

10

Matrixなどの外部パッケージから疎な行列オブジェクトにデータをエクスポートするのはすばやく簡単です。

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

$class 
[1] "DocumentTermMatrix" "simple_triplet_matrix" 

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

dtmオブジェクトには、ドキュメント・マトリックスの内部表現である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) 

は、それぞれあなたの正確な同じ出力が得られます。

0

文書の数は問題になるはずはありませんが、希薄な用語を削除してみるとよいでしょう。文書用語行列の次元が非常に小さくなる可能性があります。

inspect(removeSparseTerms(dtm, 0.7)) 

少なくともスパース性が0.7の用語を削除します。

使用可能な別のオプションは、あなたがあなたの変更前と後の文書用語行列

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

使用inspect(dtm)を作成するとき、あなたはもっと重要なのはあなた、大きな違いを見ることができます最小の語長と最小文書頻度を指定することですあなたの文書や用語に隠された重要な関係を壊すことはありません。

0

文書は1859個しかないので、計算に必要な距離行列はかなり小さいです。 slamパッケージ(特にcrossapply_simple_triplet_matrix関数)を使用すると、まずDTMを密行列に変換するのではなく、距離行列を直接計算することができます。これはあなた自身がJaccardの類似性を計算しなければならないことを意味します。私は正常にお試しください。something similar for the cosine distance matrix on a large number of documents.

関連する問題