标签:文档 warning character 地址 用法 元数据 exe tab into
tm包是R语言中为文本挖掘提供综合性处理的package,进行操作前载入tm包,vignette命令可以让你得到相关的文档说明。使用默认安装的R平台是不带tm package的,在安装的过程中,它会依赖于NLP’,‘BH’ ,‘slam’包,所以最简单的方式就是采用在线安装。 在tm 中主要的管理文件的结构被称为语料库(Corpus),代表了一系列的文档集合
tm包安装
> install.packages("slam", type = "source") Installing package into ‘C:/Users/zhushy/Documents/R/win-library/3.2’ (as ‘lib’ is unspecified) Warning in install.packages : package ‘slam’ is not available (for R version 3.2.5)
library(devtools) install_url("https://cran.r-project.org/src/contrib/Archive/slam/slam_0.1-37.tar.gz")
基本函数
> library(tm) > library(NLP) > doc=c("halo halo !","this is second word!") > corpus1=Corpus(VectorSource(doc)) > corpus1 <<SimpleCorpus>> Metadata: corpus specific: 1, document level (indexed): 0 Content: documents: 2
#找到tm包下texts/crude文件夹的位置,里面含有20个xml文档 adress=system.file("texts","crude",package="tm") reuters=Corpus(DirSource(adress),readerControl=list(reader=readReut21578XML))
> getReaders() [1] "readDOC" "readPDF" "readPlain" [4] "readRCV1" "readRCV1asPlain" "readReut21578XML" [7] "readReut21578XMLasPlain" "readTabular" "readTagged" [10] "readXML"
查看及写语料包
writeCorpus(corpus1,"E:\\R\\",c("a1.txt","a2.txt"))
> inspect(reuters) <<VCorpus>> Metadata: corpus specific: 0, document level (indexed): 0 Content: documents: 20 [[1]] <<XMLTextDocument>> Metadata: 16 ........ > print(reuters) <<VCorpus>> Metadata: corpus specific: 0, document level (indexed): 0 Content: documents: 20 > summary(reuters) Length Class Mode 127 2 XMLTextDocument list 144 2 XMLTextDocument list 191 2 XMLTextDocument list 194 2 XMLTextDocument list .......
transformation
> getTransformations() [1] "removeNumbers" "removePunctuation" "removeWords" "stemDocument" "stripWhitespace"
示例:
#将reuters转换为纯文本,去除标签 reuters=tm_map(reuters,PlainTextDocument) # 所有字母转换成小写 corpus_clean <- tm_map(reuters, tolower) # 去除text中的数字 corpus_clean <- tm_map(reuters, removeNumbers) # 去除停用词,例如and,or,until... corpus_clean <- tm_map(reuters, removeWords, stopwords()) # 去除标点符号 corpus_clean <- tm_map(reuters, removePunctuation) # 去除多余的空格,使单词之间只保留一个空格 corpus_clean <- tm_map(reuters, stripWhitespace)
meta
data("crude") meta(crude[[1]]) DublinCore(crude[[1]])
可以对其进行相应的修改、添加
> data("crude") > meta(crude[[1]],tag="author") character(0) > meta(crude[[1]],tag="author") <- "ZZ" > meta(crude[[1]]) author : ZZ datetimestamp: 1987-02-26 17:00:56 .......
词条-文档关系矩阵
> doc=c("This is Frist Word.","That is Second Word!") > corpus1=Corpus(VectorSource(doc)) > dtm <- DocumentTermMatrix(corpus1) > inspect(dtm) <<DocumentTermMatrix (documents: 2, terms: 5)>> Non-/sparse entries: 6/4 Sparsity : 40% Maximal term length: 6 Weighting : term frequency (tf) Sample : Terms Docs frist second that this word 1 1 0 0 1 1 2 0 1 1 0 1
字典是一个字符集合。经常用于在文本挖掘中展现相关的词条时。使用Dictionary() 函数实现,当将字典传递到DocumentTermMatrix() 以后,生成的矩阵会根据字典提取计算,而不是全部提取
> d=c("word") > inspect(DocumentTermMatrix(corpus1, list(dictionary = d))) <<DocumentTermMatrix (documents: 2, terms: 1)>> Non-/sparse entries: 2/0 Sparsity : 0% Maximal term length: 4 Weighting : term frequency (tf) Sample : Terms Docs word 1 1 2 1
实际上对于矩阵的操作R 有大量的函数(比如聚类、分类算法等)支持,但这个包还是提供了一些常用的函数支持。
> findFreqTerms(dtm,2) [1] "word"
找到相关性,比如对于opec,找到相关系数在0.8 以上的条目,使用findAssocs(),以上小节示例为例
#进行降维处理 dtm2 <- removeSparseTerms(dtm, sparse=0.95) #将term-document矩阵生成数据框 data <- as.data.frame(inspect(dtm2))
完整示例
library(tm) library(NLP) #找到tm包下texts/crude文件夹的位置,里面含有20个xml文档 adress=system.file("texts","crude",package="tm") reuters=Corpus(DirSource(adress),readerControl=list(reader=readReut21578XML)) #将reuters转换为纯文本,去除标签 reuters=tm_map(reuters,PlainTextDocument) # 所有字母转换成小写 corpus_clean <- tm_map(reuters, tolower) # 去除text中的数字 corpus_clean <- tm_map(reuters, removeNumbers) # 去除停用词,例如and,or,until... corpus_clean <- tm_map(reuters, removeWords, ("english")) # 去除标点符号 corpus_clean <- tm_map(reuters, removePunctuation) # 去除多余的空格,使单词之间只保留一个空格 corpus_clean <- tm_map(reuters, stripWhitespace) #将文档转为稀疏矩阵, dtm <- DocumentTermMatrix(reuters) #找出发生5次及以上的条目 findFreqTerms(dtm, 5) #找相关性,比如对于opec,找到相关系数在0.8 以上的条目 findAssocs(dtm, "opec", 0.8) #要考察多个文档中特有词汇的出现频率,可以手工生成字典,并将它作为生成矩阵的参数 d <- Dictionary(c("prices", "crude", "oil"))) inspect(DocumentTermMatrix(reuters, list(dictionary = d))) #进行降维处理 dtm2 <- removeSparseTerms(dtm, sparse=0.95) #将term-document矩阵生成数据框 data <- as.data.frame(inspect(dtm2))
标签:文档 warning character 地址 用法 元数据 exe tab into
原文地址:http://www.cnblogs.com/tgzhu/p/6680525.html