今天我们看下文本挖掘在R语言中是如何被实现。文本挖掘作为自然语言处理的一个分支,主要目的是一个抽取有效、新颖、有用、可理解的、散布在文本文件中的有价值知识,并且利用这些知识更好地组织信息的过程。本次主要给大家介绍下tm包的使用。首先看下包的安装:
install.packages(“tm”)
install.packages(“filehash”)
首先看下此包中主要的参数render取值的范围:
接下来看下source所允许的读取方式:DataframeSource, DirSource, URISource, VectorSource,和 XMLSource。其输入格式:URISource(x, encoding ="", mode = "text")。其中mode可以是text,binary。或者是空,那样就是只获取url不读取其中的内容。
接下来就是构建语料库,语料库的构建需要整合上面的两个函数,有如下四种语料库的构建:
1. SimpleCorpus(x, control = list(language= "en"))。这个语料库的构建是最简单将DataframeSource,DirSource 和VectorSource资源进行读取并构建在内存中的语料库形式。没有render参数的引入
2. VCorpus(x, readerControl = list(reader =reader(x), language = "en"))此方法内置了render方法,支持所有的source格式。但无法引入R外部的数据库资源。
3. PCorpus(x, readerControl = list(reader =reader(x), language = "en"),dbControl = list(dbName = "",dbType = "DB1")) 支持基于filehash包的数据库导入,可以在内存中出现多个,并且对其进行操作。
4. DCorpus( x, readerControl =list(reader = reader(x), language ="en"), storage = NULL, keep = TRUE, ... ) 基于tm.plugin.dc包构建分布式语料库,例如在HDFS中语料库的构建。
最后我们看下对语料库的操作,我们直接通过一个实例看下输出结果:
txt<- system.file("texts","txt", package = "tm")
ovid<-Corpus(DirSource(txt), readerControl= list(language = "lat"))
#查看语料库的内容
inspect(ovid)
#查看总结信息
summary(ovid)
另外还可以基于tm_map()函数将函数应用在语料库里,实例:
inspect(tm_map(ovid,toupper))
构建术语文档或文档术语矩阵,实例:
#术语文档构建,其中stopword是包默认的列表,当然也可以自己定义或者设为FALSE
tdm <- TermDocumentMatrix(ovid,
control =list(removePunctuation = TRUE,
stopwords =F))
#文档术语矩阵,其中weightTfIdf根据词频-文档频率的倒数,为词频-文档矩阵加权。
dtm <- DocumentTermMatrix(ovid,
control =list(weighting =function(x) weightTfIdf(x, normalize =FALSE),
stopwords= F))
##发现频数大于5的术语
findFreqTerms(dtm, 5)
##获得文档之间的距离,method包括:binary,canberra,maximum,manhattan。
movid<- as.matrix(dtm)
dist(movid, method ="binary" )
###层次聚类
d= dist(movid,method = "binary" )
hclustRes <-hclust(d,method="complete")
plot(hclustRes,main ="文件聚类分析")
##主成分分析
k <- princomp(d)
screeplot(k,npcs=6,type='lines')
windows()
biplot(k)
当然,大家还可以借助其它包比如SnowballC进行更深入的挖掘。
欢迎大家学习交流!