
R文本挖掘之tm包
tm包是R文本挖掘方面不可不知也不可不用的一個package。它提供了文本挖掘中的綜合處理功能。如:數據載入,語料庫處理,數據預處理,元數據管理以及建立“文檔-詞條”矩陣。
下面,即從tm包提供的各項功能函數的探索出發,一起開始我們的文本挖掘奇幻之旅。
首先,運行下面的幾行代碼,即可看到介紹tm包的小品文:Introduction to the tm Package:Text Mining in R(https://cran.r-project.org/web/packages/tm/vignettes/tm.pdf).
install.packages("tm")
library(tm)
vignette("tm")
tm包重要函數初探
數據載入及語料庫創建
載入數據的格式要求
tm包支持多種格式的數據。用getreaders()函數可以獲得tm包支持的數據文件格式。
library(tm)
## Loading required package: NLP
getReaders()
## [1] "readDOC" "readPDF"
## [3] "readPlain" "readRCV1"
## [5] "readRCV1asPlain" "readReut21578XML"
## [7] "readReut21578XMLasPlain" "readTabular"
## [9] "readTagged" "readXML"
載入數據的方式
tm包中主要管理文件的數據結構稱為語料庫(Corpus),它表示一系列文檔的集合。
語料庫又分為動態語料庫(Volatile Corpus)和靜態語料庫(Permanent Corpus)。
動態語料庫將作為R對象保存在內存中,可以使用VCorpus()或者Corpus()生成。
而動態語料庫則作為R外部文件保存,可以使用PCorpus()函數生成。
先來看一下VCorpus()函數的使用。
VCorpus(x, readerControl = list(reader = reader(x), language = "en"))
as.VCorpus(x)
第一個參數x即文本數據來源。對于as.VCorpus()中的x,指定的是一個R對象;對于VCorpus(),可以使用以下幾種方式載入x。
DirSource():從本地文件目錄夾導入
VectorSource():輸入文本構成的向量
DataframeSource():輸入文本構成的data frame
對于第二個參數readerControl,即指定文件類型的對應的讀入方式。默認使用tm支持的(即getReaders()中羅列的)一系列函數。language即文件的語言類型。似乎不能支持中文。這個問題稍后解釋如何解決。
這里,使用tm包自帶的一個數據集進行語料庫創建的測試。
DirSource()方式:
txt<-system.file("texts","txt",package = 'tm')
(docs<-Corpus(DirSource(txt,encoding = "UTF-8")))
## <<VCorpus>>
## Metadata: corpus specific: 0, document level (indexed): 0
## Content: documents: 5
VectorSource()方式:
docs<-c("this is a text","And we create a vector.")
VCorpus(VectorSource(docs))
## <<VCorpus>>
## Metadata: corpus specific: 0, document level (indexed): 0
## Content: documents: 2
下面,導入一個數據集『冰與火之歌』全五部(沒錯,我就是來劇透的~~),作為后面練習的例子。
IceAndSongs<-VCorpus(DirSource(directory = "D:/my_R_workfile/RPROJECT/textming/data/IceAndSongs",encoding = "UTF-8"))
數據導出
將語料庫導出至本地硬盤上,可以使用writeCorpus()函數.
writeCorpus(IceAndSongs,path = "D:/my_R_workfile/RPROJECT/textming/data/Corpus")
語料庫的查看及提取
可以使用print()和summary()查看語料庫的部分信息。而完整信息的提取則需要使用inspect()函數。
inspect(IceAndSongs[1:2])
## <<VCorpus>>
## Metadata: corpus specific: 0, document level (indexed): 0
## Content: documents: 2
##
## [[1]]
## <<PlainTextDocument>>
## Metadata: 7
## Content: chars: 1745859
##
## [[2]]
## <<PlainTextDocument>>
## Metadata: 7
## Content: chars: 2018112
文件太大,而沒有打印出來。我們可以使用writeLines()函數進行完全打印查看。
writeLines(as.character(IceAndSongs[[1]]))
對于單個文檔的提取,可以類型列表取元素子集一樣使用 [[ 操作。
identical(IceAndSongs[[1]],IceAndSongs[["冰與火之歌1.txt"]])
## [1] TRUE
數據轉換
創建好語料庫之后,一般還需要做進一步的處理,如:消除空格(Whitespace),大小寫轉換,去除停止詞,詞干化等。
所有的這些處理都可以使用tm_map()函數,通過map的方式將轉化函數應用到每一個文檔語料上。
消除空格
IceAndSongs<-tm_map(IceAndSongs,stripWhitespace)
去除數字
IceAndSongs<-tm_map(IceAndSongs,removeNumbers)
去除標點符號
IceAndSongs<-tm_map(IceAndSongs,removePunctuation)
大小寫轉換
IceAndSongs<-tm_map(IceAndSongs,tolower)
消除停止詞
tm包中自帶了停止詞集。
IceAndSongs<-tm_map(IceAndSongs,removeWords,stopwords("english"))
當然,也可以指定你自己設定的停止詞集,將stopwords("english")替換成你自己的停止詞集對象即可。
詞干化
詞干化,即詞干提取。指的是去除詞綴得到詞根的過程─—得到單詞最一般的寫法。
如以單復數等多種形式存在的詞,或多種時態形式存在的同一個詞,它們代表的其實是同一個意思。因此需要通過詞干化將它們的形式進行統一。
tm_map(IceAndSongs,stemDocument)
## <<VCorpus>>
## Metadata: corpus specific: 0, document level (indexed): 0
## Content: documents: 5
去除特殊字符
for(i in seq(IceAndSongs)){
IceAndSongs[[i]]<-gsub("/"," ",IceAndSongs[[i]])
IceAndSongs[[i]]<-gsub("@"," ",IceAndSongs[[i]])
IceAndSongs[[i]]<-gsub("-"," ",IceAndSongs[[i]])
}
過濾
過濾功能能夠選擇出符合我們需要的文檔。
idx<-meta(IceAndSongs,"id") == "冰與火之歌1.txt"
IceAndSongs[idx]
也可以進行全文搜索匹配。如含有”winter is coming”的文檔。
tm_filter(IceAndSongs,FUN = function(x){ any(grep("winter is coming",content(x)))})
元數據管理
元數據指的是對文檔進行標簽化的附加信息??梢酝ㄟ^meta()函數進行元數據管理。
DublinCore()函數提供了一套介于Simple Dublin Core元數據和tm元數據之間的映射機制,用于獲得或設置文檔的元數據信息。
DublinCore(IceAndSongs[[1]],tag = "creator") <- "R.R.Martin"
DublinCore(IceAndSongs[[1]])
meta(IceAndSongs[[1]])
以上操作示例主要是針對文檔級別的元數據管理。而元數據標簽其實對應了兩個級別:
整個語料庫級別:文檔的集合
單個文檔級別
而文檔級別的標簽,可以用于文檔分類(classification)。
下面演示一下語料庫級別的元數據管理。
meta(IceAndSongs,tag = "test",type = "corpus")<-"test meta"
meta(IceAndSongs,type = "corpus")
創建詞條-文檔矩陣
詞條-文檔矩陣是一個非常重要的對象,它是后續建立文本分類,文本聚類等模型的基礎。
詞條-文檔矩陣指的是詞條作為行,文檔標簽作為列的稀疏矩陣。當然,也可以建立“文檔-詞條矩陣”。對應的兩個操作函數為:TermDocumentMatrix()和DocumentTermMatrix().
dtm<-DocumentTermMatrix(IceAndSongs)
inspect(dtm[1:5,100:105])
默認情況下,矩陣的元素是詞的頻率。而我們還有一個重要參數可以設置??梢詫⒕仃嚨脑剞D化為TF-IDF值。
dtm_2<-DocumentTermMatrix(IceAndSongs,
control = list(removePunctuation = TRUE,stopwords = FALSE,weighting =
function(x)weightTfIdf(x,normalize = TRUE)))
inspect(dtm[1:5,10:15])
對文檔詞條矩陣操作
tm包提供的文檔-詞條矩陣操作有:詞頻過濾;詞語之間的相關性計算;去除稀疏詞等。
findFreqTerms(dtm,10)
findAssocs(dtm,"winter",0.5)
inspect(removeSparseTerms(dtm,0.4))
字典
字典是一個字符集。它可以作為一個控制參數傳入DocumentTermMatrix(),從而選擇我們需要的詞條建立文檔-詞條矩陣。
inspect(DocumentTermMatrix(IceAndSongs,
list(dictionary = c("winter","power","ice"))))
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25在當今數字化時代,數據分析師的重要性與日俱增。但許多人在踏上這條職業道路時,往往充滿疑惑: 如何成為一名數據分析師?成為 ...
2025-04-24以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《劉靜:10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda ...
2025-04-23