用R進行文本分析初探——以《紅樓夢》為例


一.寫在前面的話~

  剛吃飯的時候同學問我,你為什么要用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):

《時間簡史》

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM