R语言文本挖掘Packages:tm:包含了文本挖掘工具;XML:包含了XML处理工具。下面使用Chapter3中的文件进行分析进行数据分析:设置工作目录:setwd(C:/Users/Mr.Cheng/Desktop/课件/数据科学R语言实战代码/Chapter03)读取文本文件的路径,然后安装tm包并加载tm包:path=state-of-the-union.txtinstall.packages(tm)library(tm)通过下列代码将其分成块或行:text=readLines(path,encoding=UTF-8)text是变量声明中行的数组。有若干可用的文本函数,可以直接在结果的文本中运行,常用的操作包括以下几项。1.转换成小写字母;2.移除标点;3.移除数字:此操作用于集中涉及具体的文本;4.移除URL:此操作可以避免使出现在URL中的字复杂化;5.调整“停用词”列表:当与特定行业的文本一起工作时,此操作尤其有用;6.与词干一起工作:此操作允许调整文本以便仅出现词干。有助于将焦点集中于文本中涉及的真正术语,并非出现的各种格式。R使用了用于处理文本的语料库。可以从多种源创建语料库,源包括VecyorSource(文本流)。下列代码会将原始文本转化为语料库,便于进一步进行R处理:vs=VectorSource(text)#将文本与出现在源中单词的向量排成一行elem=getElem(stepNext(vs))#getElem()函数建立了已通过的源,用于R中进行更深的数据存取。stepNext()函数更新了源的位置,以备将来之需。result=readPlain(elem,en,id1)txt=Corpus(vs)#Corpus():语料库是一些可用于进一步处理的数据源创建语料库:将文本转化成小写字母:txtlc=tm_map(txt,tolower)inspect(txt[1])SimpleCorpusMetadata:corpusspecific:1,documentlevel(indexed):0Content:documents:1[1]Mr.Speaker,Mr.VicePresident,MembersofCongress,myfellowAmericans:inspect(txtlc[1])SimpleCorpusMetadata:corpusspecific:1,documentlevel(indexed):0Content:documents:1[1]mr.speaker,mr.vicepresident,membersofcongress,myfellowamericans:移除标点:txtnp=tm_map(txt,removePunctuation)inspect(txt[1])SimpleCorpusMetadata:corpusspecific:1,documentlevel(indexed):0Content:documents:1[1]Mr.Speaker,Mr.VicePresident,MembersofCongress,myfellowAmericans:inspect(txtnp[1])SimpleCorpusMetadata:corpusspecific:1,documentlevel(indexed):0Content:documents:1[1]MrSpeakerMrVicePresidentMembersofCongressmyfellowAmericans移除数字:txtnn=tm_map(txtnp,removeNumbers)inspect(txtnp[63])SimpleCorpusMetadata:corpusspecific:1,documentlevel(indexed):0Content:documents:1[1]After2014wewill······inspect(txtnn[63])SimpleCorpusMetadata:corpusspecific:1,documentlevel(indexed):0Content:documents:1[1]Afterwewill······移除单词:通常移除所有短的英语单词,这些单词对分析没有意义,通常都会移除停用词以便停止作者对单词赋予的特殊含义。“the”和“and”就是停用词,虽然是必须用词,但是这些单词并不会提升文本的质量。可仅通过向集群添加停用词,调整感兴趣的语言中的标准停用词。txtns=tm_map(txt[1],removeWords,stopwords(english))inspect(txtns)SimpleCorpusMetadata:corpusspecific:1,documentlevel(indexed):0Content:documents:1[1]Mr.Speaker,Mr.VicePresident,MembersCongress,fellowAmericans:inspect(txt[1])SimpleCorpusMetadata:corpusspecific:1,documentlevel(indexed):0Content:documents:1[1]Mr.Speaker,Mr.VicePresident,MembersofCongress,myfellowAmericans:移除空格符移除空格符与标准的文本挖掘的关系不大,并且使用的函数会忽视先前的空格符。此函数提供了一种清除中间结果以便于进行更好说明的方法:txtnw=tm_map(txt[30],stripWhitespace)inspect(txtnw)inspect(txt[30])*stripWhitespace同时也将标点从两个拓展字符减少到一个拓展字符。词干我们可以将语料库调整自仅使用词干。词干是词根,而不管通用的屈折词缀或用法。例如,“wait”“waiting”“waits”“waited”等词的词干相同。install.packages(SnowballC)inspect(txt[50])SimpleCorpusMetadata:corpusspecific:1,documentlevel(indexed):0Content:documents:1[1]Apre-existingconditionusedtomeanthatsomeonelikeAmandaShelley,aphysicianassistantandsinglemomfromArizona,couldn’tgethealthinsurance.?ButonJanuary1st,shegotcovered.?OnJanuary3rd,shefeltasharppain.?OnJanuary6th,shehademergencysurgery.?Justoneweekearlier,Amandasaid,thatsurgerywould’vemeantbankruptcy.txtstem=tm_map(txt,stemDocument)inspect(txtstem[50])SimpleCorpusMetadata:corpusspecific:1,documentlevel(indexed):0Content:documents:1[1]Apre-existconditusetomeanthatsomeonlikeAmandaShelley,aphysicianassistandsinglmomfromArizona,couldn’tgethealthinsurance.?ButonJanuari1st,shegotcovered.?OnJanuari3rd,shefeltasharppain.?OnJanuari6th,shehademergsurgery.?Justoneweekearlier,Amandasaid,thatsurgeriwould’vmeantbankruptcy.txtcomplete=tm_map(txtstem,stemCompletion,dictionary=txt)inspect(txtcomplete[50])SimpleCorpusMetadata:corpusspecific:1,documentlevel(indexed):0Content:documents:1Apre-existconditusetomeanthatsomeonlikeAmandaShelley,aphysicianassistandsinglmomfromArizona,couldn’tgethealthinsurance.?ButonJanuari1st,shegotcovered.?OnJanuari3rd,shefeltasharppain.?OnJanuari6th,shehademergsurgery.?Justoneweekearlier,Amandasaid,thatsurgeriwould’vmeantbankruptcy.文档词条矩阵文本词条矩阵表示术语出现在一些文档中的频率,所以,每个文档都包括某一术语在该文档中的次数。在我们的示例中,此矩阵包括文档行/段中发现的关键词以及出现的频率。dtm=DocumentTermMatrix(txt)DocumentTermMatrix(x,control=)#表示语料库中的术语用法;#x:语料库。#control:控制选项的名单。某些选项特定于进一步使用。可用于全局选项#有以下两项:1.bounds:使用的语料库范围。2.weighting:包含了用于遇到过的术语的加权函数。dtmDocumentTermMatrix(documents:86,terms:1763)Non-/sparseentries:4521/147097Sparsity:97%Maximaltermlength:16Weighting:termfrequency(tf)txt=tm_map(txt,removeWords,stopwords(English))#tm_map(x,FUN,……,lazy=T)将转换用于语料库界面:1.x:使用转换的语料库;2.FUN:需要使用的转换;3.lazy:如果设置为TRUE,可执行惰性数据存取。removewords会删除文档中的字;stopwords集是通用的英语停用词列表;removeSparseTerm功能可以为文档矩阵删除不经常遇到的术语:removeSparseTerms(x,sparse),其中x为一个语料库,sparse为包含所允许的最大稀疏性的值,范围为0~1.findAssocs(x,terms,corlimit):用来找到文档矩阵中词语的关联,其中terms为我们必须找到其关联性的术语,corlimit为包含所要探索的较低相关性限制。我们同样可以使用tm包中的函数移除稀疏术语以降低矩阵的稀疏性。dtm2=removeSparseTerms(dtm,0.94)inspect(dtm2)DocumentTermMatrix(documents:86,terms:146)Non-/sparseentries:1956/10600Sparsity:84%Maximaltermlength:11Weighting:termfrequency(tf)Sample:TermsDocsandbutforhavemoreourthatthethiswith105120112850218000344101126620134080537713032041339311112252240120005247034841521048226661