2016-05-20 11 views
0

最新のtmアップグレードで何かが間違っているようです。私のコードは以下のようにテストデータ -R tmパッケージアップグレード - コーパスをデータフレームに変換する際のエラー

data = c('Lorem ipsum dolor sit amet, consectetur adipiscing elit', 
      'Vestibulum posuere nisl vel lobortis vulputate', 
      'Quisque eget sem in felis egestas sagittis') 
ccorpus_clean = Corpus(VectorSource((data))) 
ccorpus_clean = tm_map(ccorpus_clean,removePunctuation,lazy=TRUE) 
ccorpus_clean = tm_map(ccorpus_clean,stripWhitespace,lazy=TRUE) 
ccorpus_clean = tm_map(ccorpus_clean,tolower,lazy=TRUE) 
ccorpus_clean = tm_map(ccorpus_clean,removeNumbers,lazy=TRUE) 
ccorpus_clean = tm_map(ccorpus_clean,stemDocument,lazy=TRUE) 
ccorpus_clean = tm_map(ccorpus_clean,removeWords,stopwords("english"),lazy=TRUE) 
ccorpus_clean = tm_map(ccorpus_clean,removeWords,c("hi"),lazy=TRUE) 
ccorpus_clean = tm_map(ccorpus_clean,removeWords,c("account","can"),lazy=TRUE)  
ccorpus_clean = tm_map(ccorpus_clean,PlainTextDocument,lazy=TRUE) 
ccorpus_clean = tm_map(ccorpus_clean,stripWhitespace,lazy=TRUE); 
ccorpus_clean; 
df = data.frame(text=unlist(sapply(ccorpus_clean , `[[`, "content")), stringsAsFactors=FALSE) 

すべてはうまくいきました。しかし突然私は"、lazy = TRUE"を使う必要がありました。それがなければ、コーパスの変換は機能しなくなりました。変換が動作し、レイジーでR tm In mclapply(content(x), FUN, ...) : all scheduled cores encountered errors in user code

が、コーパスの変換はバックデータフレームに以下のエラーで停止 - - 怠惰な問題は、ここで説明されて

ccorpus_clean = tm_map(ccorpus_clean,stripWhitespace,lazy=TRUE) 
ccorpus_clean 

<>
メタデータ:コーパス固有:0、文書レベル(索引付き):0
内容:文書:5

UseMethodで
df = data.frame(text=unlist(sapply(ccorpus_clean , `[[`, "content")), stringsAsFactors=FALSE) 

エラー(「メタ」は、X):「メタ」の該当メソッドはクラスのオブジェクトに適用されない
「が試すエラー」また
:警告メッセージ:mclapplyで
( X $の内容[i]は、機能(D)tm_reduce(D、$怠惰$マップをX)):
スケジュールされたすべてのコアが編集ユーザーコードで

をエラーに遭遇した - これはあまりにも

を失敗しますUseMethodで
data.frame(text = sapply(ccorpus_clean, as.character), stringsAsFactors = FALSE) 

エラー( "メタ"、X): 'メタ' の該当メソッドがクラスのオブジェクトに適用されません "してみてください - エラー"

Rバージョン - version.string Rバージョン3.2.3(2015-12-10)/ tm-0.6-2

+0

.Rprofileファイルに 'options(mc.cores = 1)'を置いて(Rを再起動すると)助けになりますか? – knb

答えて

1

非常に複雑に見えます。方法:

data <- c("Lorem ipsum dolor sit amet account: 999 red balloons.", 
      "Some English words are just made for stemming!") 

require(quanteda) 

# makes the texts into a list of tokens with the same treatment 
# as your tm mapped functions 
toks <- tokenize(toLower(data), removePunct = TRUE, removeNumbers = TRUE) 
# toks is just a named list 
toks 
## tokenizedText object from 2 documents. 
## Component 1 : 
## [1] "lorem" "ipsum" "dolor" "sit"  "amet"  "account" "red"  "balloons" 
## 
## Component 2 : 
## [1] "some"  "english" "words" "are"  "just"  "made"  "for"  "stemming" 

# remove selected terms 
toks <- removeFeatures(toks, c(stopwords("english"), "hi", "account", "can")) 

# apply stemming 
toks <- wordstem(toks) 

# make into a data frame by reassembling the cleaned tokens 
(df <- data.frame(text = sapply(toks, paste, collapse = " "))) 
##          text 
## 1 lorem ipsum dolor sit amet red balloon 
## 2   english word just made stem 
+0

ありがとうKen。これを試してみましょう。機能がtmからquantedaにほとんど変わらないことを願っています。私たちは歴史的なデータを持っていますが、私たちは再実行したくありません。 – myloginid

+0

同じ機能ですが、より簡単なAPIです。そして、あなたは 'quanteda :: corpus(yourTmCorpus)'を使って** tm **コーパスから** quanteda **コーパスを直接作ることができます。私はそれを手伝ってうれしいです。 –

+0

HI Ken ..あまりにも少ない単語を削除する方法はありますか?私は "dfmSparse-class"以外のドキュメントでは何も見ません。我々は前にこのような何かをやっていた - TrigramTokenizer < - 関数(x)はNGramTokenizer(X、Weka_control(分= 2、最大= 3)) dtmmm < - DocumentTermMatrix(ccorpus_clean、コントロール=リスト(トークン化= TrigramTokenizer)) dtmmm < - removeSparseTerms(dtmmm、0.995) – myloginid

1

私は同様の問題があり、tmパッケージをアップグレードすることによっては発生していないようです。 quantedaを使用したくない場合は、コアの数を1に設定する(Lazy = TRUEではなく)。なぜそれが私のために働いたのか分かりません。

corpus = tm_map(corpus, tolower, mc.cores = 1) 

あなたは、この問題は、並列コンピューティングの問題によって引き起こされている場合、診断に興味がある場合は、この行のタイプを試してみてください

getOption("mc.cores", 2L) 

それは2つのコアを返す場合、1にコアを設定すると、問題を解決します。詳細な説明については、this answerを参照してください。

関連する問題