這門課程會跟同學介紹在R中常用的TextMining功能。
請同學先安裝套件tm
check_then_install("tm", "0.6.2")
接著請同學載入tm套件
library(tm)
tm套件是目前R中最泛用的TextMining資料處理工具。先請同學查查看tm套件有沒有vignette。
vignette(package = "tm")
接著請同學打開名為tm的vignette。
vignette("tm")
有興趣深入研究tm套件的同學,隨時可以深入閱讀這份文件。
在tm套件中,所有的文字資料,都會以文集(Corpus)為單位做處理。同學可以先簡單把文集理解為一段有意義的文字,例如文章、評論,或是句子。
tm套件提供了一些範例資料讓我們可以使用。請同學輸入txt.dir<-system.file("texts","txt",package="tm")這裡的system.file函數讓我們可以快速取得套件內附帶的檔案路徑。
txt.dir <- system.file("texts", "txt", package = "tm")
我們可以使用dir來列出txt.dir這個目錄底下的檔案清單。請同學輸入:dir(txt.dir)
dir(txt.dir)
我們看到了五個檔案。同學可以用readLines(file.path(txt.dir,"ovid_1.txt"))來看看第一個檔案的內容。這裡的file.path是R中拿來組合目錄名稱與檔案名稱的函數。由於剛剛的檔案是在txt.dir目錄中,而"ovid_1.txt"是該目錄的第一個檔案,所以要讓R讀取該檔案,則要利用file.path組合完整的路徑。
readLines(file.path(txt.dir, "ovid_1.txt"))
根據vignette,這些文章是古羅馬詩Ovid的內容,並不是英文!
是不是英文沒關係。我們可以使用tm的DirSource函數來定義資料來源。請同學輸入:src<-DirSource(txt.dir)
src <- DirSource(txt.dir)
接著我們使用VCorpus來建立一個文集物件。請同學輸入:ovid<-VCorpus(src)
ovid <- VCorpus(src)
讓我們來看看VCorpus物件。請同學輸入:ovid
ovid
一般的print方法,並不會顯示ovid的內容。我們需要使用:inspect(ovid)來獲取更詳細的資訊。請同學試試看。
inspect(ovid)
從Rconsole上我們觀察到非常類似list的物件顯示(有兩層的中括號)事實上,如果我們想要看文件內容,可以使用:as.character(ovid[[1]])
as.character(ovid[[1]])
接下來我們示範要怎麼使用tm套件進行資料的清理。請同學使用ovid2<-tm_map(ovid,stripWhitespace)
ovid2 <- tm_map(ovid, stripWhitespace)
我們用as.character(ovid2[[1]])看看清理後的資料。多餘的空白都消失了。
as.character(ovid2[[1]])
這裡tm_map函數,就是把stripWhitespace函數套用到所有的ovid資料集上。舉例來說,很類似:ovid2[[1]]<-stripWhitespace(ovid[[1]]),ovid2[[2]]<-stripWhitespace(ovid[[2]]),…透過這個tm_map,我們可以很方便的使用各種函數來清理ovid
在做進階的資料處理之前,我們可以把文本轉換成TermDocumentMatrix或是DocumentTermMatrix。TermDocumentMatrix會把term當成列,而DocumentTermMatrix則是把Term當成欄。請同學試試看:tdm<-TermDocumentMatrix(ovid2)
tdm <- TermDocumentMatrix(ovid2)
我們先看看tdm的資訊。請輸入tdm
tdm
我們看到關於這個TermDocumentMatrix的一些整體資訊。諸如我們看到389個term,5個文件(就是當初看到的五個檔案)有興趣的同學可以去研讀tm的vignette獲取更多資訊。
讓我們用inspect(tdm[1,])來看看這個矩陣的第一列
inspect(tdm[1,])
我們看到一個字在term的下方,而右邊會列出文件的列表,如:ovid_1.txt、ovid_2.txt、ovid_3.txt、ovid_4.txt與ovid_1.txt。這其實就是TermDocumentMatrix的意思。它利用空格切出terms,然後去紀錄每一個terms出現在哪些文件(docuemtns)中的次數。
實務上,分析師可以從tdm出發,搭配各種DataMining或MachineLearning的演算法,做出更有趣的應用。
以上就是我們對tm套件的簡介。有興趣的同學可以參考https://github.com/wush978/DataScienceAndR/blob/master/slide/get_stupid_clown.R上助教下載和清理ptt笨版資料的程式碼,來看看如何在R使用tm套件處理中文資料。
請同學跟著作業的程式碼,整理一個簡單的文本。完成之後可以輸入submit()檢查。
check_then_install("XML", "3.98.1.3")
library(tm)
crude.path <- system.file("texts", "crude", package = "tm")
crude <- VCorpus(DirSource(crude.path), readerControl = list(reader = readReut21578XMLasPlain))
#' 請依序利用tm_map 和以下函數對crude做清理之後,建立TermDocumentMatrix
#' 1) stripWhitespace
#' 2) content_transformer(tolower)
#' 3) removeWords 搭配參數 stopwords("english")
crude.tdm <- {
NULL
# 你的程式碼
}
crude.tdm <- {
NULL
tmp <- tm_map(crude, stripWhitespace)
tmp <- tm_map(tmp, content_transformer(tolower))
tmp <- tm_map(tmp, removeWords, stopwords('english'))
TermDocumentMatrix(tmp)
}
#' 預期的結果的dimension
stopifnot(dim(crude.tdm) == c(1183, 20))