タグ: functions
-
投稿者投稿
-
2017年7月3日 10:48 AM #751
ishida
キーマスター2017年7月3日 11:56 PM #776hikaru_goto
ゲスト先日, twitter でお答えいただいた者です。
おかげさまで,分析のフェーズに進めたのですが
docDF() を使って,分析データを作る際にdocDF(“Users/hikaru1122/Dropbox/02-research/00-working/2017/vcd/analysis/text/”, でエラー:
SET_STRING_ELT() can only be applied to a ‘character vector’, not a ‘integer’というエラーが出ました。グーグルで検索しても,解決策がわかりません。
実行したコードは次のとおりです。
hoge = docDF(“/textfile/hozon/shiteru/folder/”, type = 1, pos = c(“名詞”,”形容詞”))フォルダには1080個のテキストファイルがあって,file1.txt〜file1080.txtという名前をつけています。
よろしくお願いします。
2017年7月4日 12:21 PM #778ishida
キーマスターdocDF()の内部に指定されたパス指定“Users/hikaru1122/…” ではなく“/Users/hikaru1122/… のはず) がまちがっているようですが、これは、この掲示板へのコピーのミスだとします。
どうもメモリを確保できなくなったように思われます。docDF()関数は、形態素に加えて品詞大分類、品詞小分類まで保存しますので、かなりメモリを圧迫します。
動作確認として、ファイル100 個程度のサブセットで動作するか試してみてください。
あるいは、品詞情報が不要であれば docMlatrix2(“ファイルのあるフォルダへのパス”) 関数も試してみてください。2017年7月4日 12:46 PM #779hikaru_goto
ゲストお返事、ありがとうございます。
確かに、読み込むテキストファイルを100個にしたら動くみたいです。
docMlatrix2 も試してみようと思います。2017年7月4日 2:26 PM #780ishida
キーマスターもしも多数のファイルから単語文書行列を作成したい場合は、面倒ですが、ファイル集合を複数に分けて、それぞれから単語文書行列を作成してから、メモリの効率の良い疎行列に変換して、最後に結合するという手段もあります。概略以下のような処理になります。
library(RMeCab) ## 文書集合1 x <- docMatrix2("folder1") ## 文書集合2 y <- docMatrix2("folder2") ## 文書集合3 z <- docMatrix2("folder3") ## 疎な行列に変換 library(Matrix) x_s <- as(x, "dgCMatrix") y_s <- as(y, "dgCMatrix") z_s <- as(z, "dgCMatrix") ## 行名の共通集合を取得 words <- intersect(rownames(x_s), intersect(rownames(y_s), rownames(z_s))) ## 行名(行数)を統一 x_s <- x_s[words, ] y_s <- y_s[words, ] z_s <- z_s[words, ] ## 結合 cbind2 (x_s, y_s, z_s)問題は、それぞれの行列の行数を揃えないといけないので、すべての疎行列(の行名)から、必要とする単語だけを抽出する必要があり、この整形が若干手間がかかります。
さらに疎な行列のままだと、適用できる分析関数が限られるので、その場合、再度、通常の行列に戻す必要がありますが、その際、再びメモリ不足を警告される恐れはあります。2017年7月6日 9:43 AM #787ishida
キーマスターこの件ですが、RMeCab内部で、読み込み可能なファイル数に制限を設定しているのを失念しておりました。
RMeCabを開発した頃は、Rのメモリ周りの余裕が厳しかったための処理なのですが、いまは不要だと思います。
時期バージョン(RMeCab0.99998)から解除します。 -
投稿者投稿
- フォーラム「RMeCab」には新規投稿および返信を追加できません。