所謂的 Word Cloud(又稱 Tag Cloud 或 weighted list)是一個用來表示一群文字中每個字出現頻率多寡的方式,出現次數較多的字就會用較大的字型大小顯示,反之較少出現的字眼,就會用小型的字型表示,這樣的視覺化表示發法可以讓人一目了然哪些字是比較重要的關鍵字,這種表示法在許多部落格中也常常使用。

要繪製 Word Cloud 有許多工具可以使用,以下介紹各種可以產生 Word Cloud 的免費工具。


Wordle 是一個用來製作 Word Cloud 的線上工具,這個工具可以讓使用者輸入一串文字,或是直接輸入網址來產生 Word Cloud,下面這個是用筆者的部落格製作出來的 Word Cloud:

wordle

這個工具可以即時讓使用者編輯已經產生好的 Word Cloud,例如要更改字型、配色等等,或是要刪除某些單字,都可以很方便的使用這個工具來處理。

補充一點,這個線上工具是用 Java Applet 寫成的,所以要使用的話,必須先安裝 Java

Tagxedo

Tagxedo 與 Wordle 類似,也是一個用來製作 Word Cloud 的線上工具,一樣可以輸入文字或網址,然後及時編輯各種字型與顏色,除此之外還可選擇將 Word Cloud 製作成一些圖樣,例如:

tagxedo

這個工具是用微軟的 Silverlight 所開發的,所以使用前要先安裝 Silverlight。

使用 R 繪製 Word Cloud

除了上面這些線上工具之外,也可以使用 R 來製作 Word Cloud,以下是一些 R 的範例:

require(XML)
require(tm)
require(wordcloud)
require(RColorBrewer)= "http://cran.r-project.org/web/packages/available_packages_by_date.html"= readHTMLTable(u)[[1]]
ap.corpus <- Corpus(DataframeSource(data.frame(as.character(t[,3]))))
ap.corpus <- tm_map(ap.corpus, removePunctuation)
ap.corpus <- tm_map(ap.corpus, tolower)
ap.corpus <- tm_map(ap.corpus, function(x) removeWords(x, stopwords("english")))
ap.tdm <- TermDocumentMatrix(ap.corpus)
ap.m <- as.matrix(ap.tdm)
ap.v <- sort(rowSums(ap.m),decreasing=TRUE)
ap.d <- data.frame(word = names(ap.v),freq=ap.v)
table(ap.d$freq)
pal2 <- brewer.pal(8,"Dark2")
png("wordcloud_packages.png", width=1280,height=800)
wordcloud(ap.d$word,ap.d$freq, scale=c(8,.2),min.freq=3,
max.words=Inf, random.order=FALSE, rot.per=.15, colors=pal2)
dev.off()

這是畫出來的圖:

wordcloud

接著再看另一個範例,這是拿 http://cran.r-project.org/web/packages 網頁上的 packages 敘述所製作成的 Word Cloud:

require(XML)
require(tm)
require(wordcloud)
require(RColorBrewer)= "http://cran.r-project.org/web/packages/available_packages_by_date.html"= readHTMLTable(u)[[1]]
ap.corpus <- Corpus(DataframeSource(data.frame(as.character(t[,3]))))
ap.corpus <- tm_map(ap.corpus, removePunctuation)
ap.corpus <- tm_map(ap.corpus, tolower)
ap.corpus <- tm_map(ap.corpus, function(x) removeWords(x, stopwords("english")))
ap.tdm <- TermDocumentMatrix(ap.corpus)
ap.m <- as.matrix(ap.tdm)
ap.v <- sort(rowSums(ap.m),decreasing=TRUE)
ap.d <- data.frame(word = names(ap.v),freq=ap.v)
table(ap.d$freq)
pal2 <- brewer.pal(8,"Dark2")
png("wordcloud_packages.png", width=1280,height=800)
wordcloud(ap.d$word,ap.d$freq, scale=c(8,.2),min.freq=3,
max.words=Inf, random.order=FALSE, rot.per=.15, colors=pal2)
dev.off()

這是畫出來的圖:

wordcloud_packages

參考資料:Word Cloud in R