R語言:實現文字分析例項(基礎篇)
阿新 • • 發佈:2019-01-02
#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)中包含的詞條。