2016-07-14 1 views
1

私はコーパスにおおよそ75MBのデータを持っています。次のコマンドを使用しようとしていますコーポスのストップワードとトローラ機能を削除R

tm_map(doc.corpus, removeWords, stopwords("english")) 
tm_map(doc.corpus, tolower) 

この2つの機能だけでは、少なくとも40分は実行されています。私はtdm行列を私のモデルに使用しているので、プロセスのスピードアップを模索しています。

私は非常に頻繁にgc()memory.limit(10000000)のようなコマンドを試してみましたが、私は私の処理速度を高速化することはできませんよ。

私は4GB RAMのシステムを持ち、入力データを読み込むためにローカルデータベースを実行しています。

スピードアップのためのご提案をお待ちしております。

+0

を試してみてください?テキストを20MBの塊に分割し、別のコアで実行してください。ストップワードを削除するのは辞書のタスクとコンテキストフリーなので、うまくいくと思います。また、Rはこれらの処理には非常に遅いので、速度が重要であれば、Cのように速く書き換えることを検討してください。 – FisherDisinformation

+0

@ArtificialBreeze Rで並列化できますか?タイムラグを減らすことを見て、Rと一緒に働くことは快適です! –

+0

私は通常、1) 'parallel'パッケージを使います。これは' apply'などの独自の類義語を持っています。あるいは2) 'compiler'を使ってインラインCまたはC++でコードの一部をコード化します。 'インライン'パッケージ私はあなたが 'parallel'パッケージを見てみるべきだと思います。 – FisherDisinformation

答えて

2

のリストに含まれていないのでたぶんあなたはquantedaを与えることができ、あなたの計算を並列化

library(stringi) 
library(tm) 
library(quanteda) 

txt <- stri_rand_lipsum(100000L) 
print(object.size(txt), units = "Mb") 
# 63.4 Mb 

system.time(
    dfm <- dfm(txt, toLower = TRUE, ignoredFeatures = stopwords("en")) 
) 
# Elapsed time: 12.3 seconds. 
#  User  System verstrichen 
#  11.61  0.36  12.30 

system.time(
    dtm <- DocumentTermMatrix(
    Corpus(VectorSource(txt)), 
    control = list(tolower = TRUE, stopwords = stopwords("en")) 
) 
) 
# User  System verstrichen 
# 157.16  0.38  158.69 
+0

に合意しています。私は 'quanteda'を使った方が速いようです。私は両方のtdmが同じかどうか分からない! 'quantuma'は' tm'で生成された 'sparse matrix'と同じですか? –

+1

dfmSparseクラスは、dfmクラスの疎行列バージョンであり、MatrixパッケージからdgCMatrixクラスを継承しています。これは、典型的なテキストベースの特徴数が多くのゼロを含む傾向があるので、特徴数が関心対象であるときに作成されるデフォルトのオブジェクトタイプである。 dfmのその後の変換がゼロカウントでセルを保存する限り、dfmはまばらに残るはずです。 tmは、TermDocumentMatrixクラスまたはDocumentTermMatrixクラス(パッケージスラムの単純な三つ組行列を継承しています)のオブジェクトを、まばらな用語 - ドキュメント行列またはドキュメント用語行列を含んでいます。 – lukeA

0

まず私は

tm_map(doc.corpus, content_transformer(tolower)) 

を試してみたtolower()getTransformations()

+0

も上記の構文を試しました!パフォーマンスの改善はありません –

+0

私はどのようにコーパスを作成しているのか、私は100MB以上のコーパスを持つこのような問題に直面していない原因を示している可能性があります&2PM、そして私のRAMは4倍大きいですが、 –

+0

'corpus < - コーパス(VectorSource(vector_list)) skipWords funcs < - list(tolower、removePunctuation、removeNumbers) 、stripWhitespace、skipWords) a < - tm_map(コーパス、FUN = tm_reduce、tmFuns = funcs) a < - tm_map(a、PlainTextDocument) ' –

関連する問題