這裏要對有關鑽石公主號事件的評論做詞雲分析,通過用戶自定義詞典和停用詞來對評論進行分詞
引入包
library(wordcloud2)
library(jiebaR)
library(RColorBrewer)
讀入數據並分詞。這裏我們的數據是每一行爲一個評論,一開始我用的read.table和read.csv來讀入,以‘’爲分隔符,但總出現某個換行以/n的形式出現在數據中,所以我們採用readLines函數來進行數據導入。user.txt是用戶自定義詞典,用來來保留一些相關詞彙,防止像“鑽石公主號”這樣的詞彙被分成“鑽石”,“公主”,“號”。
mydata<-readLines(con <- file("comment2.7-2.9.txt", encoding = "UTF-8"))
wk = worker(user='user.txt')
human_future_txt1<-segment(mydata,wk)
過濾掉一個字的詞並查看一下剩下多少詞
human_future <- subset(human_future_txt1, nchar(human_future_txt1)>1)
length(human_future)
去掉停用詞再看剩下多少詞,關於停用詞也是由一個txt文件存儲,同樣使用readLines來讀入,使用停用詞是爲了防止像一些特殊符號、數字和“一個”這種沒有實際意義的詞彙加入到詞頻統計。
stopwords_CN<-readLines(con <- file("hit_stopwords.txt", encoding = "UTF-8"))
for(j in 1:length(stopwords_CN)){
human_future <- subset(human_future,human_future!=stopwords_CN[j])
}
length(human_future)
進行詞頻統計和排序,選取最頻繁的前100個詞來做詞雲
human_future_freq<-table(human_future)
human_future_freq<-human_future_freq[!grepl('[0-9]+',names(human_future_freq))]
human_future_result<-human_future_freq[order(human_future_freq, decreasing = TRUE)]
human_future_front <- human_future_result[1:100]
最後作詞雲,顏色這裏設置了從一個藍色主題色系中抽取了顏色較深的前6個,每個顏色有4個,也就是說最頻繁的前24個顏色是依次漸淺,剩下的76個設置成天空藍。結果如圖
wordcloud2(human_future_front,
color=c(rep(rev(brewer.pal(9, "Blues"))[1:6],each=4),rep("skyblue",76)),
shape='cardioid',size=0.6,minSize = 0, gridSize = 0,
fontFamily = 'Segoe UI', fontWeight = 'bold',backgroundColor = "white",
minRotation = -pi/4, maxRotation = pi/4, shuffle = TRUE,
rotateRatio = 0.4, ellipticity = 0.65)