web-dev-qa-db-ja.com

R tmパッケージvcorpus:コーパスをデータフレームに変換する際のエラー

tmパッケージを使用して、次のコードを使用して一部のデータをクリーンアップしています。

mycorpus <- Corpus(VectorSource(x))
mycorpus <- tm_map(mycorpus, removePunctuation)

次に、データをデータフレームの元の形式で含むテキストファイルをエクスポートするために、コーパスをデータフレームに変換し直します。私は以下を試しました:

dataframe <- as.data.frame(mycorpus)

しかし、これはエラーを返します:

"as.data.frame.default。(mycorpus)のエラー:クラス" c(vcorpus、> corpus ")をdata.frameに強制できません"

コーパスをデータフレームに変換するにはどうすればよいですか?

15
lmcshane

コーパスは実際には、いくつかの追加属性を持つ単なる文字ベクトルです。だからそれを文字に変換するのが最善です、そしてそれを次のようにdata.frameに保存できます:

library(tm)
x <- c("Hello. Sir!","Tacos? On Tuesday?!?")
mycorpus <- Corpus(VectorSource(x))
mycorpus <- tm_map(mycorpus, removePunctuation)

dataframe <- data.frame(text=unlist(sapply(mycorpus, `[`, "content")), 
    stringsAsFactors=F)

戻る

              text
1        Hello Sir
2 Tacos On Tuesday

更新:tmの新しいバージョンでは、sapplylapplyを実際に使用するas.list.SimpleCorpusメソッドを更新したようです。今、私はあなたが使う必要があると思います

dataframe <- data.frame(text=sapply(mycorpus, identity), 
    stringsAsFactors=F)
22
MrFlick

コーパスクラスのオブジェクトには、contentを通じてアクセス可能なget属性があります。

library("tm")

x <- c("Hello. Sir!","Tacos? On Tuesday?!?")
mycorpus <- Corpus(VectorSource(x))
mycorpus <- tm_map(mycorpus, removePunctuation)

attributes(mycorpus)
# $names
# [1] "content" "meta"    "dmeta"  
# 
# $class
# [1] "SimpleCorpus" "Corpus"      
# 

df <- data.frame(text = get("content", mycorpus))

head(df)
#               text
# 1        Hello Sir
# 2 Tacos On Tuesday
4
mlegge

Data.frameに変換し、最も頻度の高い単語を並べ替えて、ワードクラウドにプロットできます!

library(tm)
library("wordcloud")
library("RColorBrewer")

x <- c("Hello. Sir!","Tacos? On Tuesday?!?", "Hello")
mycorpus <- Corpus(VectorSource(x))
mycorpus <- tm_map(mycorpus, removePunctuation)

dtm <- TermDocumentMatrix(mycorpus)
m <- as.matrix(dtm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(Word = names(v),freq=v)
head(d, 10)

#           Word freq
#hello     hello    2
#sir         sir    1
#tacos     tacos    1
#tuesday tuesday    1

#plot in a wordcloud
set.seed(1234)
wordcloud(words = d$Word, freq = d$freq, min.freq = 1,
          max.words=200, random.order=FALSE, rot.per=0.35, 
          colors=brewer.pal(8, "Dark2"))

enter image description here

3
Jalles10

MrFlickによって投稿された古い回答はtmの以前のバージョンでのみ機能し、式からコンテンツを削除することで修正できました。

dataframe<-data.frame(text=unlist(sapply(mycorpus, `[`)), stringsAsFactors=F)
2
user4258767

これは、テキスト分析で自分が使用した代替アプローチです。基本的には、ドキュメントフレームをデータフレームに変換するときに、マトリックスをドキュメント用語として参照します。その後、変数名をRフレンドリにする追加の行を実行できます。

データベース<-as.data.frame(as.matrix(mycorpus))

colnames(データベース)<-make.names(colnames(データベース))

このアプローチが出力に関して他の答えとどのように(または)異なるのかはわかりませんが、この構文の実装ははるかに簡単で簡単です。お役に立てれば!

0
Shawne