2016-04-07 13 views
1

私は出版物キーワードの単語雲を作ろうとしています。例: 教育データマイニング;共同学習;コンピュータサイエンス...などワードクラウドを作っていますが、組み合わせた単語を使っていますか?

私の現在のコードは、次の通りです:それはそれ自体で各単語を分割され、このコードでは、しかし

KeywordsCorpus <- Corpus(VectorSource(subset(Words$Author.Keywords, Words$Year==2012))) 
KeywordsCorpus <- tm_map(KeywordsCorpus, removePunctuation) 
KeywordsCorpus <- tm_map(KeywordsCorpus, removeNumbers) 

# added tolower 
KeywordsCorpus <- tm_map(KeywordsCorpus, tolower) 
KeywordsCorpus <- tm_map(KeywordsCorpus, removeWords, stopwords("english")) 

# moved stripWhitespace 
KeywordsCorpus <- tm_map(KeywordsCorpus, stripWhitespace) 

KeywordsCorpus <- tm_map(KeywordsCorpus, PlainTextDocument) 

dtm4 <- TermDocumentMatrix(KeywordsCorpus) 
m4 <- as.matrix(dtm4) 
v4 <- sort(rowSums(m4),decreasing=TRUE) 
d4 <- data.frame(word = names(v4),freq=v4) 

、しかし、私は必要なの組み合わせの言葉を持っていることです/フレーズ。たとえば、「Educational Data Mining」は、「教育的」「データ」「マイニング」の代わりに、私が提示しなければならない1つのフレーズです。言葉の各化合物をまとめる方法はありますか?セミコロンはセパレータとして役立ちます。

ありがとうございました。

答えて

3

は、ここでは、いずれかの統計学的に検出されたコロケーションから、または単にすべてのバイグラムを形成することにより、マルチワード表現を形成することを可能にするさまざまなテキストパッケージを使用してソリューションを、です。このパッケージは、quantedaと呼ばれます。

library(quanteda) 
packageVersion("quanteda") 
## [1] ‘0.9.5.14’ 

まず、トップ1500バイグラムコロケーションを検出し、("_"文字で連結)は、単一のトークンバージョンとテキストにこれらのコロケーションを置換するための方法。ここでは、米国大統領就任演説のテキストのパッケージの組み込みコーパスを使用しています。

### for just the top 1500 collocations 
# detect the collocations 
colls <- collocations(inaugCorpus, n = 1500, size = 2) 

# remove collocations containing stopwords 
colls <- removeFeatures(colls, stopwords("SMART")) 
## Removed 1,224 (81.6%) of 1,500 collocations containing one of 570 stopwords. 

# replace the phrases with single-token versions 
inaugCorpusColl2 <- phrasetotoken(inaugCorpus, colls) 

# create the document-feature matrix 
inaugColl2dfm <- dfm(inaugCorpusColl2, ignoredFeatures = stopwords("SMART")) 
## Creating a dfm from a corpus ... 
## ... lowercasing 
## ... tokenizing 
## ... indexing documents: 57 documents 
## ... indexing features: 9,741 feature types 
## ... removed 430 features, from 570 supplied (glob) feature types 
## ... complete. 
## ... created a 57 x 9311 sparse dfm 
## Elapsed time: 0.163 seconds. 

# plot the wordcloud 
set.seed(1000) 
png("~/Desktop/wcloud1.png", width = 800, height = 800) 
plot(inaugColl2dfm["2013-Obama", ], min.freq = 2, random.order = FALSE, 
    colors = sample(colors()[2:128])) 
dev.off() 

この結果、以下のプロットが得られます。 "generation's_task"や "fellow_americans"などのコロケーションに注意してください。

wcloud1.png

全てバイグラムで形成されたバージョンが容易であるが、低周波バイグラム機能の膨大な数になります。単語の雲のために、私は、2013年のオバマの住所だけでなく、より多くのテキストを選択しました。

### version with all bi-grams 
inaugbigramsDfm <- dfm(inaugCorpusColl2, ngrams = 2, ignoredFeatures = stopwords("SMART")) 
## Creating a dfm from a corpus ... 
## ... lowercasing 
## ... tokenizing 
## ... indexing documents: 57 documents 
## ... removed 54,200 features, from 570 supplied (glob) feature types 
## ... indexing features: 64,108 feature types 
## ... created a 57 x 9908 sparse dfm 
## ... complete. 
## Elapsed time: 3.254 seconds. 

# plot the bigram wordcloud - more texts because for a single speech, 
# almost none occur more than once 
png("~/Desktop/wcloud2.png", width = 800, height = 800) 
plot(inaugbigramsDfm[40:57, ], min.freq = 2, random.order = FALSE, 
    colors = sample(colors()[2:128])) 
dev.off() 

これが生成します。必要であれば

https://youtu.be/HellsQ2JF2k

wcloud2.png

+0

を余分な空白を除去、 'Corpus') "'、unlist(コーパス) 'を試してください。 –

+0

2つの関連するフレーズを同じバイグラムに結合するには、どの時点で 'stemDocument()'と 'stemCompletion()'を追加できますか? 「フリーソサエティ」、「フリーソサエティ」、「フリーソサイエティ」など –

+1

私はこの質問を理解していますが、** quantum **オブジェクトに適用されているこれらの関数は、別のパッケージのものであるため、使用できません。 –

0

Ok ..多くの研究の後、私は完璧な答えを見つけました。 まず、複数の単語を語りたい場合は、これを「バイグラム」といいます。 "tau"や "Rweka"のような利用可能なRパッケージがあります。

このリンクはあなたを助ける: This

-2

あなたのための最良の提案は、短い5分間のビデオ(下のリンク)に追従することですRコードを直接、ここには:

mycorpus <- Corpus(VectorSource(subset(Words$Author.Keywords,Words$Year==2012))) 

テキストクリーニングは句読点

を削除する場合に

mycorpus <- tm_map(mycorpus, content_transformer(tolower)) 

削除数字を下げる

mycorpus <- tm_map(mycorpus, removeNumbers) 

削除英語の共通のストップワード

mycorpus <- tm_map(mycorpus, removeWords, stopwords("english")) 

するテキストに変換

誰でもエラークラス「C( 『VCorpus』のオブジェクトに適用される「コロケーション」の `のない適用可能な方法の上につまずく場合

mycorpus <- tm_map(mycorpus, stripWhitespace) 
as.character(mycorpus[[1]]) 

バイグラム

minfreq_bigram<-2 
token_delim <- " \\t\\r\\n.!?,;\"()" 
bitoken <- NGramTokenizer(mycorpus, Weka_control(min=2,max=2, delimiters = token_delim)) 
two_word <- data.frame(table(bitoken)) 
sort_two <- two_word[order(two_word$Freq,decreasing=TRUE),] 
wordcloud(sort_two$bitoken,sort_two$Freq,random.order=FALSE,scale = c(2,0.35),min.freq = minfreq_bigram,colors = brewer.pal(8,"Dark2"),max.words=150) 
関連する問題