R語言 文本挖掘 tm包 使用



#清除內存空間
rm(list=ls()) 
#導入tm包
library(tm)
library(SnowballC)
#查看tm包的文檔
#vignette("tm")


##1.Data Import  導入自帶的路透社的20篇xml文檔
#找到/texts/crude的目錄,作為DirSource的輸入,讀取20篇xml文檔
reut21578 <- system.file("texts", "crude", package = "tm") 
reuters <- Corpus(DirSource(reut21578), readerControl = list(reader = readReut21578XML))

##2.Data Export  將生成的語料庫在磁盤上保存成多個純文本文件
writeCorpus(reuters)

##3.Inspecting Corpora 查看語料庫 
#can use inspect(),print(),summary()
#由於是從xml讀取過來,所以現在的corpus還是非常雜亂
inspect(reuters)
print(reuters) 
summary(reuters)


##4.Transformations 
#對於xml格式的文檔用tm_map命令對語料庫文件進行預處理,將其轉為純文本並去除多余空格,
#轉換小寫,去除常用詞匯、合並異形同意詞匯,如此才能得到類似txt文件的效果
#可以用inspect(reuters)查看此時的效果,明顯好很多
reuters <- tm_map(reuters, as.PlainTextDocument)#將reuters轉化為純文本文件,去除標簽
reuters <- tm_map(reuters, stripWhitespace)#去掉空白
reuters <- tm_map(reuters, tolower)#轉換為小寫
reuters <- tm_map(reuters, removeWords, stopwords("english"))#去停用詞
#采用Porter's stemming 算法 提取詞干
#Stem words in a text document using Porter's stemming algorithm
#install.packages("SnowballC")
tm_map(reuters, stemDocument)


##5.Creating Term-Document Matrices
#將處理后的語料庫進行斷字處理,生成詞頻權重矩陣(稀疏矩陣)也叫詞匯文檔矩陣
dtm <- DocumentTermMatrix(reuters)
#查看詞匯文檔矩陣
inspect(dtm[1:5, 100:105])
#Non-/sparse entries: 1990/22390     ---非0/是0 
#Sparsity           : 92%            ---稀疏性  稀疏元素占全部元素的比例
#Maximal term length: 17             ---切詞結果的字符最長那個的長度
#Weighting          : term frequency (tf)
#如果需要考察多個文檔中特有詞匯的出現頻率,可以手工生成字典,
#並將它作為生成矩陣的參數
d<-c("price","crude","oil","use")
inspect(DocumentTermMatrix(reuters,control=list(dictionary=d)))


##6.Operations on Term-Document Matrices
#找出次數超過5的詞
findFreqTerms(dtm, 5)
#找出與‘opec’單詞相關系數在0.8以上的詞
findAssocs(dtm,"opec",0.8)


#因為生成的矩陣是一個稀疏矩陣,再進行降維處理,之后轉為標准數據框格式
#我們可以去掉某些出現頻次太低的詞。
dtm1<- removeSparseTerms(dtm, sparse=0.6)
inspect(dtm1)
data <- as.data.frame(inspect(dtm1))


#再之后就可以利用R語言中任何工具加以研究了,下面用層次聚類試試看
#先進行標准化處理,再生成距離矩陣,再用層次聚類
data.scale <- scale(data)
d <- dist(data.scale, method = "euclidean")
fit <- hclust(d, method="ward.D")
#繪制聚類圖
#可以看到在20個文檔中,489號和502號聚成一類,與其它文檔區別較大。
plot(fit,main ="文件聚類分析")


#主成分分析
ozMat <- TermDocumentMatrix(makeChunks(reuters, 50),
                            list(weighting = weightBin))
k <- princomp(as.matrix(ozMat), features = 2)
screeplot(k,npcs=6,type='lines')
windows()
biplot(k)  

 


免責聲明!

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



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