一.寫在前面的話~
剛吃飯的時候同學問我,你為什么要用R做文本分析,你不是應該用R建模么,在我和她解釋了一會兒后,她囑咐我好好寫這篇博文,嗯為了娟兒同學,細細說一會兒文本分析。
文本數據挖掘(Text Mining)是指從文本數據中抽取有價值的信息和知識的計算機處理技術。顧名思義,文本數據挖掘是從文本中進行數據挖掘(Data Mining)。從這個意義上講,文本數據挖掘是數據挖掘的一個分支。
文本分析是指對文本的表示及其特征項的選取;文本分析是文本挖掘、信息檢索的一個基本問題,它把從文本中抽取出的特征詞進行量化來表示文本信息。
在拉勾網上搜索文本分析的相關工作,甚至還會發現專門招聘這方面人才的公司(並且大部分都是目前來說高不可攀的公司。。)。


隨便進入了一個職位,看其要求:

編程能力、文本挖掘項目經驗、大規模數據處理或統計基礎。。瞬間覺得自己弱爆了有木有!!
再找一下相關的文獻,不要再說文本分析和統計學沒有關系啦~

博主剛剛接觸R語言和文本分析,所以只是試探了一下下皮毛,為了將二者結合,試着對《紅樓夢》進行分析,首先對《紅樓夢》進行分詞處理,並統計詞頻,同時畫出標簽雲。

閑話的最后,大家一起翻譯這篇文章好不好233
http://jmlr.org/proceedings/papers/v37/kusnerb15.pdf
二.利用R對《紅樓夢》進行分析
(一)需要加載的包
需要用到rJava,Rwordseg,wordcloud
安裝步驟:
1.安裝java:
http://www.java.com/zh_CN/download/windows_xpi.jsp
2.安裝rJava:
在R的命令框輸入
install.packages("rJava")
錯誤解決方案:
錯誤1.錯誤: ‘rJava’程輯包或名字空間載入失敗,
解決方案:換路徑
錯誤2.

解決方案:
在R中輸入
Sys.setenv(JAVA_HOME='C:/Program Files/Java/jre1.8.0_73') #注意:要根據你的java路徑更改

3.安裝Rwordseg:
下載地址:
https://r-forge.r-project.org/R/?group_id=1054
點這兒下載Rwordseg
解壓后將文件放入R下library文件夾下
4.安裝wordcloud
在R的命令框輸入
install.packages("wordcloud")
利用Rwordseg分詞包進行分詞
(二)分析過程
1.基礎導入
library(rJava)
library(Rwordseg)
library(RColorBrewer)
library(wordcloud)
2.讀入數據
將需要分析的文本放入記事本中,保存到相應路徑,並在R中打開。這兒我導入的是《紅樓夢》的文本。
lecture<-read.csv("E:/Rtagcloud/hongloumeng.txt", stringsAsFactors=FALSE,header=FALSE)
3.優化詞庫
對於文言文和人物名字分詞結果不是很理想的問題,有一個很好的解決方案,就是導入搜狗細胞詞庫(http://pinyin.sogou.com/dict/),以本例作為例子,分別導入了文言文常用詞庫、紅樓夢常用詞庫、紅樓夢成員名字詞庫,這三個詞庫,讓分詞效果更為理想。
installDict("C:\\Users\\Administrator\\Desktop\\紅樓夢詞匯大全.scel","hongloumeng1") installDict("C:\\Users\\Administrator\\Desktop\\紅樓夢群成員名字詞庫.scel","hongloumeng2") installDict("C:\\Users\\Administrator\\Desktop\\紅樓夢詞匯.scel","hongloumeng3")
為了讓大家更直觀的理解優化詞庫,舉如下例子:
先導入rJava和Rwordseg兩個包
library(rJava)
library(Rwordseg)
利用Rwordseg對“朝辭白帝彩雲間,千里江陵一日還。兩岸猿聲啼不盡,輕舟已過萬重山。”進行分詞,結果如下
接着到http://pinyin.sogou.com/dict/detail/index/22394 下載李白詩集的細胞詞庫,並把它放到E盤,在R中輸入以下代碼安裝詞典:
installDict("e:/李白詩集.scel","libai")
安裝好后,輸入同樣的代碼,結果如下
可見利用細胞詞庫可以得到更好的分詞結果。
4.分詞+統計詞頻
words=unlist(lapply(X=res, FUN=segmentCN)) #unlist將list類型的數據,轉化為vector #lapply()返回一個長度與X一致的列表,每個元素為FUN計算出的結果,且分別對應到X中的每個元素。 word=lapply(X=words, FUN=strsplit, " ") v=table(unlist(word)) #table統計數據的頻數
結果v的部分截圖如下,可以看出此時已經統計好詞頻了:

5.對詞頻進行排序
# 降序排序 v=rev(sort(v))
6.創建數據框
d=data.frame(詞匯=names(v), 詞頻=v)
7.過濾掉1個字的結果和詞頻小於100的結果
篩選標准大家可以根據自己的需求進行修改
d=subset(d, nchar(as.character(d$詞匯))>1 & d$詞頻>=100)
8.詞頻結果輸出
根據自己的具體需求改變路徑和文件名稱
write.csv(d, file="E:/Rtagcloud/hongloumengfcresult.csv", row.names=FALSE)
詞頻統計結果(節選)如下:

9.畫出標簽雲
(1)讀入詞頻統計數據
路徑和文件名稱根據自己的需求更改
mydata<-read.csv("E:/Rtagcloud/hongloumengfcresult.csv",head=TRUE)
(2)設置字體類型和字體顏色
mycolors <- brewer.pal(12,"Paired") windowsFonts(myFont=windowsFont("銳字巔峰粗黑簡1.0"))
字體下載地址:
http://www.zhaozi.cn/
大家可以根據自己的喜好選擇喜歡的字體
brewer.pal配色如下,大家可以根據喜好選擇:

(3)畫出標簽雲
wordcloud(mydata$詞匯,mydata$詞頻,random.order=FALSE,random.color=TRUE,colors=mycolors,family="myFont")


所有代碼:
library(rJava) library(Rwordseg) library(RColorBrewer) library(wordcloud) #讀入數據 lecture<-read.csv("E:/Rtagcloud/hongloumeng.txt", stringsAsFactors=FALSE,header=FALSE) #文本預處理 res=lecture[] #分詞+頻數統計 installDict("E:\\紅樓夢詞匯大全.scel","hongloumeng1") installDict("E:\\紅樓夢群成員名字詞庫.scel","hongloumeng2") installDict("E:\\紅樓夢詞匯.scel","hongloumeng3") words=unlist(lapply(X=res, FUN=segmentCN)) #unlist將list類型的數據,轉化為vector #lapply()返回一個長度與X一致的列表,每個元素為FUN計算出的結果,且分別對應到X中的每個元素。 word=lapply(X=words, FUN=strsplit, " ") v=table(unlist(word)) #table統計數據的頻數 # 降序排序 v=rev(sort(v)) d=data.frame(詞匯=names(v), 詞頻=v) #創建數據框 #過濾掉1個字和詞頻小於200的記錄 d=subset(d, nchar(as.character(d$詞匯))>1 & d$詞頻>=100) #輸出結果 write.csv(d, file="E:/Rtagcloud/hongloumengfcresult.csv", row.names=FALSE) #畫出標簽雲 mydata<-read.csv("E:/Rtagcloud/hongloumengfcresult.csv",head=TRUE) mycolors <- brewer.pal(12,"Paired") windowsFonts(myFont=windowsFont("銳字巔峰粗黑簡1.0")) wordcloud(mydata$詞匯,mydata$詞頻,random.order=FALSE,random.color=TRUE,colors=mycolors,family="myFont")
以下是博主畫的其它標簽雲(對啦對啦就是上癮啦233):
《時間簡史》


這只是很簡單很簡單的文本分析入門,繼續努力~
