R文本挖掘之tm包
认识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).
tm包重要函数初探数据载入及语料库创建载入数据的格式要求tm包支持多种格式的数据。用getreaders()函数可以获得tm包支持的数据文件格式。 library(tm) ## Loading required package: NLP
getReaders() ## ?[1] "readDOC" ? ? ? ? ? ? ? ? "readPDF" ? ? ? ? ? ? ? ?
载入数据的方式tm包中主要管理文件的数据结构称为语料库(Corpus),它表示一系列文档的集合。 语料库又分为动态语料库(Volatile Corpus)和静态语料库(Permanent Corpus)。 动态语料库将作为R对象保存在内存中,可以使用VCorpus()或者Corpus()生成。 而动态语料库则作为R外部文件保存,可以使用PCorpus()函数生成。 先来看一下VCorpus()函数的使用。 VCorpus(x,readerControl = list(reader = reader(x),language = "en"))
第一个参数x即文本数据来源。对于as.VCorpus()中的x,指定的是一个R对象;对于VCorpus(),可以使用以下几种方式载入x。
对于第二个参数readerControl,即指定文件类型的对应的读入方式。默认使用tm支持的(即getReaders()中罗列的)一系列函数。language即文件的语言类型。似乎不能支持中文。这个问题稍后解释如何解决。 这里,使用tm包自带的一个数据集进行语料库创建的测试。
txt<-system.file("texts","txt",package = 'tm')
## <<VCorpus>>
docs<-c("this is a text","And we create a vector.") 0
下面,导入一个数据集『冰与火之歌』全五部(没错,我就是来剧透的~~),作为后面练习的例子。 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])
0
文件太大,而没有打印出来。我们可以使用writeLines()函数进行完全打印查看。 writeLines(as.character(IceAndSongs[[1]]))
对于单个文档的提取,可以类型列表取元素子集一样使用 [[ 操作。 identical(IceAndSongs[[1]],IceAndSongs[["冰与火之歌1.txt"]]) ## [1] TRUE
数据转换创建好语料库之后,一般还需要做进一步的处理,如:消除空格(Whitespace),大小写转换,去除停止词,词干化等。 所有的这些处理都可以使用tm_map()函数,通过map的方式将转化函数应用到每一个文档语料上。 消除空格IceAndSongs<-tm_map(IceAndSongs,stripWhitespace) 去除数字去除标点符号大小写转换tolower) 消除停止词tm包中自带了停止词集。 IceAndSongs<-tm_map(IceAndSongs,removeWords,stopwords("english")) 当然,也可以指定你自己设定的停止词集,将stopwords("english")替换成你自己的停止词集对象即可。 词干化词干化,即词干提取。指的是去除词缀得到词根的过程─—得到单词最一般的写法。 如以单复数等多种形式存在的词,或多种时态形式存在的同一个词,它们代表的其实是同一个意思。因此需要通过词干化将它们的形式进行统一。 tm_map(IceAndSongs,stemDocument)
0
去除特殊字符for(i in seq(IceAndSongs)){
过滤过滤功能能够选择出符合我们需要的文档。 idx<-meta(IceAndSongs,"id") == "冰与火之歌1.txt" 也可以进行全文搜索匹配。如含有”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" 以上操作示例主要是针对文档级别的元数据管理。而元数据标签其实对应了两个级别:
而文档级别的标签,可以用于文档分类(classification)。 下面演示一下语料库级别的元数据管理。 meta(IceAndSongs,tag = "test",type = "corpus")<-"test meta" 创建词条-文档矩阵词条-文档矩阵是一个非常重要的对象,它是后续建立文本分类,文本聚类等模型的基础。 词条-文档矩阵指的是词条作为行,文档标签作为列的稀疏矩阵。当然,也可以建立“文档-词条矩阵”。对应的两个操作函数为:TermDocumentMatrix()和DocumentTermMatrix(). dtm<-DocumentTermMatrix(IceAndSongs)
默认情况下,矩阵的元素是词的频率。而我们还有一个重要参数可以设置。可以将矩阵的元素转化为TF-IDF值。 dtm_2<-DocumentTermMatrix(IceAndSongs, 对文档词条矩阵操作tm包提供的文档-词条矩阵操作有:词频过滤;词语之间的相关性计算;去除稀疏词等。 findFreqTerms(dtm,10)
字典字典是一个字符集。它可以作为一个控制参数传入DocumentTermMatrix(),从而选择我们需要的词条建立文档-词条矩阵。 inspect(DocumentTermMatrix(IceAndSongs, 参考文献
黄耀鹏,R语言中文社区专栏作者,统计硕士生,R User,喜欢历史八卦。 博客:http://yphuang.github.io/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |