9

個々の単語ではなく、多くが繰り返されるフレーズのリストからワード クラウドを作成しようとしています。私のデータは次のようになります。データ フレームの 1 つの列はフレーズのリストです。

df$names <- c("John", "John", "Joseph A", "Mary A", "Mary A", "Paul H C", "Paul H C")

これらすべての名前が、それらを構成する単語ではなく、頻度が表示される個々のフレーズとして扱われるワード クラウドを作成したいと考えています。私が使用しているコードは次のようになります。

df.corpus <- Corpus(DataframeSource(data.frame(df$names)))
df.corpus <- tm_map(client.corpus, function(x) removeWords(x, stopwords("english")))
#turning that corpus into a tDM
tdm <- TermDocumentMatrix(df.corpus)
m <- as.matrix(tdm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
pal <- brewer.pal(9, "BuGn")
pal <- pal[-(1:2)]
#making a worcloud
png("wordcloud.png", width=1280,height=800)
wordcloud(d$word,d$freq, scale=c(8,.3),min.freq=2,max.words=100, random.order=T, rot.per=.15, colors="black", vfont=c("sans serif","plain"))
dev.off()

これによりワード クラウドが作成されますが、それはフレーズではなく、各コンポーネント ワードのものです。それで、「A」の相対頻度がわかります。「Joseph A」、「Mary A」などの相対頻度の代わりに、「H」、「John」など、私が望むものです。

これを修正するのはそれほど複雑ではないと確信していますが、理解できません! 助けていただければ幸いです。

4

2 に答える 2

11

問題は、 の各要素がdf$namesの関数によって「ドキュメント」として扱われていることですtm。たとえば、文書John Aには単語Johnandが含まれていますA。名前をそのままにして、それらの出現回数を数えたいだけのように思えます-そのtableために使用できます。

library(wordcloud)
df<-data.frame(theNames=c("John", "John", "Joseph A", "Mary A", "Mary A", "Paul H C", "Paul H C"))
tb<-table(df$theNames)
wordcloud(names(tb),as.numeric(tb), scale=c(8,.3),min.freq=1,max.words=100, random.order=T, rot.per=.15, colors="black", vfont=c("sans serif","plain"))

ここに画像の説明を入力

于 2014-11-14T20:34:16.217 に答える
4

RWeka とその依存関係をインストールしてから、これを試してください。

library(RWeka)
BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 2))
# ... other tokenizers
tok <- BigramTokenizer
tdmgram <- TermDocumentMatrix(df.corpus, control = list(tokenize = tok))
#... create wordcloud

上記の tokenizer-line は、テキストを長さ 2 のフレーズに分割します。
より具体的には、minlength 2 と maxlength 2 のフレーズを作成します
。Weka の一般的な NGramTokenizer アルゴリズムを使用すると、さまざまなトークナイザー (例: minlength 1、maxlength 2) を作成できます。おそらく、さまざまな長さを試してみたいと思うでしょう。上記で使用した冗長な「BigramTokenizer」の代わりに、tok1、tok2 と呼ぶこともできます。

于 2014-11-14T20:19:11.117 に答える