分析文本內容基本的步驟:提取文本中的詞語 -> 統計詞語頻率 -> 詞頻屬性可視化。詞頻:能反映詞語在文本中的重要性,一般越重要的詞語,在文本中出現的次數就會越多。詞雲:讓詞語的頻率屬性可視化,更加直觀清晰。文本下載地址(http://www.yuandn.com/booktxt/59797/#do ...
分析文本內容基本的步驟:提取文本中的詞語 -> 統計詞語頻率 -> 詞頻屬性可視化。詞頻:能反映詞語在文本中的重要性,一般越重要的詞語,在文本中出現的次數就會越多。詞雲:讓詞語的頻率屬性可視化,更加直觀清晰。文本下載地址(http://www.yuandn.com/booktxt/59797/#download 效果圖是將老九門12章後面內容刪除後結果)
目錄:
- 效果示例圖
- 分詞包介紹及安裝
- 詞雲包介紹安裝
- 分詞統計
- 詞雲展現
效果示例圖:
分詞包介紹及安裝:
- R分詞包:Rwordseg、rJava,rJava提供java的庫,供Rwordseg調用。Rwordseg是一個R環境下的中文分詞工具,引用了Ansj包,Ansj是一個開源的java中文分詞工具,基於中科院的ictclas中文分詞演算法,採用隱馬爾科夫模型(HMM),江湖傳言,Rwordseg有三個很牛逼的地方一是分詞準確,二是分詞速度超快,三是可以導入自定義詞庫,甚至還可以導入搜狗輸入法的細胞詞庫(sqel格式)
- Rwordseg依賴包rJava,首先你必須確認你的系統中已經有可用的Java。 linux 系統下檢查命令:java –version
- centos下安裝命令如下,註意安裝的順序,同時 Rwordseg 並未發佈至CARN
- 命令: R (進入R命令行)
- R命令: install.packages("rJava")
- R命令: install.packages("Rwordseg",repos="http://R-Forge.R-project.org")
- Windows系統下安裝命令,在windows系統的Rstudio 環境下未線上安裝成功,從 https://r-forge.r-project.org/R/?group_id=1054 網站下載基於 windows 的安裝包 (Rwordseg_0.2-1.zip),本地安裝
- 命令: install.packages("rJava")
- 命令: install.packages("d:\\Rwordseg_0.2-1.zip",repos = NULL,type = "source")
詞雲包介紹安裝:
- 詞雲本身對於分析數據用處不大,但在當前這個看臉的時代,給領導彙報工作或做報告的時候,利用詞雲的可視化效果可以產生錦上添花的效應
- R裡面繪製詞雲的包有wordcloud,wordcloud2, 相比wordcloud,新的wordcloud2 能更有效的利用詞與詞的間隔來插入數據,可以根據圖片或者文字來繪製定製化的詞雲
- wordcloud2是基於wordcloud2.js封裝的一個R包,使用HTML5的canvas繪製,瀏覽器的可視化具有動態和交互效果
- wordcloud2 已發佈至CARN,安裝命令如下:
- 命令: install.packages("wordcloud2")
分詞統計:
- 下載 txt 文件,我是在windows Rstudio 完成分詞清洗統計的工作,將清洗後的數據保存為 .rda 文件以便後續發佈至 FastRWeb
- 在研究過程中,發現人員未被識別,先普及一下自定義詞典知識,代碼示例及解釋如下:
> library(rJava) > library(Rwordseg) > > str <- c("齊鐵嘴趴著車窗,張大佛爺來到長沙火車站外面,二月紅看熱鬧") > segmentCN(str) [1] "齊" "鐵" "嘴" "趴" "著" "車窗" "張大" "佛爺" "來到" "長沙" "火車站" [12] "外面" "二月紅" "看熱鬧" > > #載入文件的方式增加詞典未驗證通過 > installDict("d:\\dict.txt","mydict",dicttype = "text") Error in installDict("d:\\dict.txt", "mydict", dicttype = "text") : Wrong path of the dic file! > segmentCN(str) [1] "齊" "鐵" "嘴" "趴" "著" "車窗" "張大" "佛爺" "來到" "長沙" "火車站" [12] "外面" "二月紅" "看熱鬧" > > #顯示當前手動添加的詞庫 > listDict() [1] Name Type Des Path <0 行> (或0-長度的row.names) > > #刪除自定義詞庫 > uninstallDict(removedict='mydict') > > #參數isNameRecognition 可用來人的名字識別,預設為false > #查看函數 getOption("isNameRecognition") > segment.options(isNameRecognition = TRUE) > segmentCN(str) [1] "齊鐵嘴" "趴" "著" "車窗" "張大" "佛爺" "來到" "長沙" "火車站" "外面" "二月紅" [12] "看熱鬧" > > #自定義詞典,讓某片語放入記憶體 > insertWords(c("張大佛爺","二月紅")) > segmentCN(str) [1] "齊鐵嘴" "趴" "著" "車窗" "張大佛爺" "來到" "長沙" "火車站" "外面" [10] "二月紅" "看熱鬧" > > #刪除詞典 > deleteWords(c("張大佛爺","二月紅"))
View Code -
- 分詞代碼及解釋如下:
#載入分詞工具包 library(rJava) library(Rwordseg) #自定義分詞,啟用名字識別 segment.options(isNameRecognition = TRUE) insertWords(c("佛爺","張啟山","二爺","二月紅","八爺","九爺")) #參數returnType表示返回的分詞格式是按空格間隔的格式 #執行完成後,會自動在相同目錄生成一個"待分析文件名. .segment.txt"的文本文件 text=segmentCN("d:\\9th.txt",returnType = "tm") #讀入分詞文件,它是一個長字元 text1=readLines("d:\\9th.segment.txt",encoding = "UTF-8") #word是一個長list #正則表達式:\\s表示 空格,回車,換行等空白符 #word1 向量 word = lapply(X = text1, FUN = strsplit, "\\s") word1=unlist(word) #統計詞頻 df=table(word1) df=sort(df,decreasing = T) #把辭彙詞頻存入數據框 df1 = data.frame(word = names(df), freq = df) # 過濾掉1個字和詞頻小於10的記錄 d <- subset(df1,nchar(as.character(df1$word)) >1 & df1$freq >= 10) # 輸出結果,將結果保存為.rda文件 save(d,file = "d:\\9th.rda")
View Code -
詞雲展現:
- worldcloud2提供兩個基本的函數:wordcloud2 和 letterCloud
- wordcloud2 : 提供基本的詞雲功能
- etterCloud : 使用選定的詞繪製詞雲
- 利用上一步清除的數據,顯示可視化圖雲,示例代碼如下, 效果與上面的示意圖對應
#載入包和清洗後的數據 library(wordcloud2) data <- load("d:\\9th.rda") #預設樣式展視數據 wordcloud2(d,shape = "star") #個性化背景和顏色 wordcloud2(d, color = "random-light", backgroundColor = "grey") #自定義字元模式 letterCloud(d,word = "B", color = "random-light", backgroundColor = "black",wordSize = 0.3) #自定義圖片模式 wordcloud2(d, figPath='d:\\ma.png')
View Code -
代碼中 d:\\ma.png 圖片樣式如下,你可選擇不同圖片繪出不同效果,下圖是隨便從網上截的,僅作演示用