1. 程式人生 > >R語言:實現文字分析例項(基礎篇)

R語言:實現文字分析例項(基礎篇)

#1載入軟體包:
#1.1資料欲處理包:
#Snowball(處理帶空格的語句)
#rJava(rmmseg4j的支援包)
#rmmseg4j(處理中文的分詞,把不帶空格的分為帶空格的。)
#1.2文字分析包:
#tm
 
#資料處理##
library (RODBC)
excel_file <- odbcConnectExcel("D:\\r\\lab\\tm\\data\\處理例項.xls")
sheet_data <- sqlFetch(excel_file,"data")
close (excel_file)
 
library (Snowball)
library (rJava)
library (rmmseg4j)
library (tm)
tmp <-  as.character(sheet_data[[3]])
pinglun<-tmp[which(tmp!="")]#刪除無效資料
 
#中文特色,空格分詞
#a<-mmseg4j(pinglun[1]);a      #分詞,新增空格
#b<-unlist(strsplit(a," "));b  #使用空格把字串分為list
pinglun<-mmseg4j(pinglun)#空格視為一個單詞,所以中文很吃虧,需要先分詞。否則可能會把一句話視為一個單詞(DocumentTermMatrix出現錯誤結果)
 
#建立語義庫
ovid <- Corpus(VectorSource(pinglun))#由於pinglun是向量,所以要使用VectorSource
#ovid <- Corpus(DataframeSource(as.data.frame(pinglun)))#由於pinglun是向量,所以要轉化為data.frame後再使用DataframeSource
#還可以讀取目錄DirSource引數,讀取目錄中的不同txt檔案(實際後文writeCorpus(ovid)也會產生n個txt)
#完成後,會建立length(pinglun)個 text documents。
 
#檢視建立的語義庫
#inspect(ovid)
#儲存ovid,在工作目錄中寫入length(pinglun)個txt文字,每個文字包含一個document
#writeCorpus(ovid)
 
#使用語義庫做後續處理
#去掉多餘空白
ovid <- tm_map(ovid, stripWhitespace)
#去掉停止詞,未成功???
#ovid<- tm_map(ovid, removeWords,)
 
#建立詞條 -文件關係矩陣
dtm <- DocumentTermMatrix(ovid)
inspect(dtm[1:5,100:105])
 
#對矩陣進行處理
#找到在“5個以上的不同文件”中出現的詞條:findFreqTerms(x, lowfreq = 0, highfreq = Inf)。
findFreqTerms(dtm, 5)
#找到同vancl這個詞條的相關係數在0.2以上的其他詞條
findAssocs(dtm, "vancl", 0.2)#如果欲比較的詞條不在總dtm中,則返回錯誤,如果相關係數設定過高,則返回1
#展示:
#   vancl   優惠券   瀏覽器   google 加減乘除   誰也不   chrome     vjia 
#    1.00     0.38     0.33     0.29     0.29     0.29     0.20     0.20 
#刪除稀疏詞條(removed which have at least a sparse percentage of empty )
dtm_099<-removeSparseTerms(dtm, 0.99)
#返回新詞條(原有詞條dtm不變),其中刪除了“出現詞條的文件數目佔總文件數目”小於1%(1-0.99=0.01=1%)的(稀疏)詞條。
#驗證:length(which(inspect(removeSparseTerms(dtm, 0.99)[,i])==1))/4275一定大於0.01,其中i=1--
 
#使用字典提取dtm
d <- Dictionary(c("不滿意", "不值得", "不知道"))
dtm_d<-DocumentTermMatrix(ovid, list(dictionary = d))#dtm_d中只提取了字典(d)中包含的詞條。