日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

R语言tm包文本挖掘的学习

發(fā)布時間:2023/12/13 综合教程 30 生活家
生活随笔 收集整理的這篇文章主要介紹了 R语言tm包文本挖掘的学习 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

分詞之后,便是創(chuàng)建文檔-詞條矩陣了。

本文便是針對于此。正式學(xué)習(xí)tm(text mining)包

數(shù)據(jù)讀入

在tm 中主要的管理文件的結(jié)構(gòu)被稱為語料庫(Corpus),代表了一系列的文檔集合。語料庫是一個概要性的概念,在這里分為動態(tài)語料庫(Volatile Corpus,作為R 對象保存在內(nèi)存中)和靜態(tài)語料庫(Permanent Corpus,R 外部保存)。所對應(yīng)的函數(shù)分別是VCorpus()和PCorpus()。此外,還有一個Corpus()的函數(shù),跟Vcorpus或simpleCorpus的簡便版,取決于參數(shù)

我們可以看一下tm 中Corpus(或VCorpus)函數(shù)的用法,對于動態(tài)語料庫:

VCorpus(x, readerControl = list(reader = reader(x), language = "en"))

在tm 中靜態(tài)語料庫也是可以處理的,但需要使用filehash 包來支持:

PCorpus(x,
     readerControl = list(reader = reader(x), language = "en"),
     dbControl = list(dbName = "", dbType = "DB1"))

下面來具體介紹以下他們的參數(shù):

x :說明資料來源(input location)的源對象(Source Object)。對于這些資料來源(即x),tm 包提供了 一些相關(guān)的函數(shù),比如

DirSource:處理目錄
VectorSource:由文檔構(gòu)成的向量
DataframeSource:數(shù)據(jù)框,就像CSV 文件

readerControl:必須聲明reader 和language 兩個內(nèi)容。reader是指從資料源創(chuàng)立的文本文件。tm 包提供了一系列的函數(shù)支持(比如,readPlain(),readGmane(), readRCV1(), readReut21578XMLasPlain(), readPDF(), readDOC() 等)。可以使用getReaders() 獲得這些函數(shù)的列表。對于每一類源,都會有自己默認(rèn)的reader。比如對DirSource 來說,默認(rèn)讀入輸入文件并把內(nèi)容解釋為文本。第二個language 就比較簡單了,即字符集,比如可能是UTF-8 字符集。

dbControl:在使用靜態(tài)語料庫(Pcorpus)條件下,會有此參數(shù)。它用來聲明R 內(nèi)存對象外的資料來源(比如數(shù)據(jù)庫)。dbType 控制了包filehash 支持的數(shù)據(jù)庫類型。數(shù)據(jù)庫支持可以有效的減少對內(nèi)存的要求,但數(shù)據(jù)的訪問會受到硬盤的讀寫能力限制。

小實(shí)例:

#1、讀取包tm目錄下的texts/txt目錄下的文本文件
txt <- system.file("texts", "txt", package = "tm")
ovid <- Corpus(DirSource(txt),readerControl = list(language = "lat"))
ovid
#<<SimpleCorpus>>
#Metadata:  corpus specific: 1, document level (indexed): 0
#Content:  documents: 5

#2、從字符向量創(chuàng)建語料庫
docs <- c("This is a text.", "This another one.")
Corpus(VectorSource(docs))
#<<SimpleCorpus>>
#Metadata:  corpus specific: 1, document level (indexed): 0
#Content:  documents: 2

#3、讀取路透社文檔創(chuàng)建一個語料庫(用于后續(xù)示例)
reut21578 <- system.file("texts", "crude", package = "tm")
reuters <- Corpus(DirSource(reut21578), readerControl = list(reader = readReut21578XML))
reuters
#<<VCorpus>>
#Metadata:  corpus specific: 0, document level (indexed): 0
#Content:  documents: 20

數(shù)據(jù)輸出

數(shù)據(jù)輸出,也就是保存語料庫。可用writeCorpus()函數(shù)

例如,上面實(shí)例1中保存:writeCorpus(ovid) 此時,在工作目錄下會生成與語料庫對應(yīng)的多個純文本文件

語料庫的提取

對于print() 和summary() 函數(shù)依然有效,但源信息被隱藏(可以想象一下每個語料庫包含了大量的文本,就像數(shù)據(jù)庫一樣)。meta() 函數(shù)會提供更多的元數(shù)據(jù)(meta data)信息,完整信息的提取需要使用inspect(),比如:

對于單個文檔的提取此處使用 [[ ,當(dāng)然既可以通過位置也可以通過名稱ovid[["ovid_1.txt"]

此外,查看單個文檔內(nèi)容也可用as.character(ovid[[1]])

查看多個文檔內(nèi)容:lapply(ovid[1:2],as.character)

變換(transformation)

一旦創(chuàng)建了語料庫,后續(xù)文檔修改則不可避免,比如填充、停止詞去除。在tm 包里,這些函數(shù)都?xì)w到信息轉(zhuǎn)化里面,其主要函數(shù)就是tm_map(),這個函數(shù)可以通過maps 方式將轉(zhuǎn)化函數(shù)實(shí)施到每一個語料上。

轉(zhuǎn)化為純文本:在reuters 這個語料庫中保存的是XML 格式的文本,XML 格式文本沒有分析的意義,我們只需要使用其中的文本內(nèi)容。這個操作可以使用as.PlainTextDocument() 函數(shù)來實(shí)現(xiàn):

reuters <- tm_map(reuters, PlainTextDocument)

注意,另外一種方式就是使用readReut21578XMLasPlain 讀取方式,那么在第一步即為純文本格式。

去除多余空白 :reuters <- tm_map(reuters, stripWhitespace)

小寫變化:reuters <- tm_map(reuters, tolower) 更廣泛的字符操作可參考gsub

停止詞去除:reuters <- tm_map(reuters, removeWords, stopwords("english"))

填充:tm_map(reuters, stemDocument) (需要Snowball 包(并行計(jì)算)支持)

過濾

過濾器可以移除不感興趣的(或者感興趣的)文檔。tm提供了tm_filter函數(shù),這個函數(shù)的原型為

tm_filter(x, FUN,...)
tm_index(x,FUN,...)

其中的FUN函數(shù)出入為一片文檔,輸出為一個bool值。表示是否接受該文檔。第二個版本tm_index只是返回滿足條件的index,前者返回一個文集,下面是一個使用示例:

還有一種方法:query <- "id == '237' & heading == 'INDONESIA SEEN AT CROSSROADS OVER ECONOMIC CHANGE'"tm_filter(reuters, FUN = sFilter, query)

但是很遺憾,報錯Error in match.fun(FUN) : object 'sFilter' not found

各種百度谷歌無果,沒有直接解決的辦法。最后都是自定義函數(shù)匹配函數(shù)實(shí)現(xiàn)的。

元數(shù)據(jù)管理

元數(shù)據(jù)分為兩個層次,一個是文集級別的元數(shù)據(jù),一個是文檔級別的元數(shù)據(jù)。獲得元數(shù)據(jù)最簡單的方式是調(diào)用meta()函數(shù),除了meta() 函數(shù)外,DublinCore() 函數(shù)提供了一套介于Simple Dublin Core 元數(shù)據(jù)和tm 元數(shù)據(jù)之間的映射機(jī)制,用于獲得或設(shè)置文檔的元數(shù)據(jù)信息。

修改文檔級別的元數(shù)據(jù):A.DublinCore(crude[[1]], "Creator") <- "Ano Nymous"

B.meta(crude[[1]], "author") <- "Jiang Hang"

修改文集級別的元數(shù)據(jù):

創(chuàng)建詞條-文檔關(guān)系矩陣

創(chuàng)建詞條-文檔關(guān)系矩陣的核心思想就是通過把所有文檔所用到的詞提取出來,然后行(或列)代表文檔,列(或行)代表詞,若該文檔中該詞出現(xiàn)n次,則此處的矩陣元素為n,反之為0。從而構(gòu)造出一個稀疏矩陣。

在tm包中提供了兩個函數(shù)來構(gòu)造此矩陣,TermDocumentMatrix 和DocumentTermMatrix,分別以詞條文檔為行列、文檔詞條為行列

其他操作:

查找一定頻數(shù)范圍的詞。findFreqTerms() 函數(shù),findFreqTerms(x, lowfreq = 0, highfreq = Inf)找出出現(xiàn)次數(shù)高于lowfreq并低于highfreq的條目。例如,findFreqTerms(dtm, 5)找出出現(xiàn)5次以上的條目
查找與某個詞相關(guān)性高于一定范圍的詞。findAssocs(x, terms, corlimit),其中tems,corlimit可以是一個向量。例如,findAssocs(tdm,"recent",0.5),找出與recent相關(guān)性大于0.5的詞,返回的是一個列表。
刪減稀疏度大于指定數(shù)值的條目。removeSparseTerms(x, sparse),sparse是指稀疏度,0為最大,1為最小。

字典

字典是字符串的集合,通常用一個字符串向量表示,可以在DocumentTermMatrix函數(shù)中指定一個 字典,這樣生成的矩陣中,就只有字典中出現(xiàn)的詞語,不在字典中的詞語不會出現(xiàn)

DocumentTermMatrix(reuters,list(dictionary = c("prices", "crude", "oil")))

此外,標(biāo)準(zhǔn)的操作符 [, [<-, [[, [[<-, c(), lapply() ,可以直接作用在語料庫上

本文參考:劉思喆《R語言環(huán)境下的文本挖掘》

總結(jié)

以上是生活随笔為你收集整理的R语言tm包文本挖掘的学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。