tm包是R语言中为文本挖掘提供综合性处理的package,进行操作前载入tm包,vignette命令可以让你得到相关的文档说明。使用默认安装的R平台是不带tm  package的,在安装的过程中,它会依赖于NLP’,‘BH’ ,‘slam’包,所以最简单的方式就是采用在线安装。 在tm 中主要的管理文件的结构被称为语料库(Corpus),代表了一系列的文档集合

tm包安装


  • 在安装依赖的slam包时,出现如下异常,R版本3.2.5

    > 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)
  • 通过如下方式解决:
  1. 参考:https://cran.r-project.org/web/packages/tm/index.html
  2. 参考:http://stackoverflow.com/questions/40419015/install-packagestm-dependency-slam-is-not-available
    library(devtools)
    install_url("https://cran.r-project.org/src/contrib/Archive/slam/slam_0.1-37.tar.gz")

基本函数


  • 基本用法参考:http://blog.163.com/zzz216@yeah/blog/static/162554684201412892742116/
  • vignette("tm")   //会打开一个tm.pdf的英文文件,讲述tm   package的使用及相关函数
  •  VectorSource函数: 可以将字符向量创建为corpus,示例如下: 
    > 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
  • system.file(): 在指定的package中找到每个文件的地址
    #找到tm包下texts/crude文件夹的位置,里面含有20个xml文档
    adress=system.file("texts","crude",package="tm")
    reuters=Corpus(DirSource(adress),readerControl=list(reader=readReut21578XML))
  • DirSource():建立一个目录,除此之外还可以利用如下的函数导入不同形式的数据
  1. VectorSource:由文档构成的向量
  2. DataframeSource:数据框,就像 CSV 文件
  • readerControl=list(reader=,language=),ReadControl中有ReadDOC,readPDF,readPlain,readReut21578XML等不同的读入方式,可以使用getReaders()函数显示出所用的可能的方式,如下:

    > getReaders()
    [1] "readDOC" "readPDF" "readPlain"
    [4] "readRCV1" "readRCV1asPlain" "readReut21578XML"
    [7] "readReut21578XMLasPlain" "readTabular" "readTagged"
    [10] "readXML"
  • Corpus:会将此目录下的文件当做一个个的文档

查看及写语料包


  • writeCorpus() :将生成的语料库保存成多个纯文本文件

    writeCorpus(corpus1,"E:\\R\\",c("a1.txt","a2.txt")) 
  • 结果如下图:(说明:原字符中下图中字符,有敏感词变禁止提交,so 上面的代码换成字母类)
  • 查看:inspect\print\summary
    > 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


  • 主要是tm_map函数,可以使用 getTransformations()函数查看所有的字符处理方式(好象不全)

    > 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


  • 元数据是为了标记语料库的附加信息,最简单的使用范式就是调用meta()函数 .文档会被预先被定义一些属性,比如作者信息,但也可能是任意自定义的元数据标签。这些附加的元数据标签都是独立的附加在单个文档上。从语料库的视角上看,这些元数据标签被独立的存储在每个文档上。除了meta()函数外,DublinCore()函数提供了一套介于SimpleDublin Core元数据和tm元数据之间的映射机制,用于画的或设置文档的元数据信息
  • DublinCore:按照都柏林核心的国际标准显示
  • 示例:
    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
    .......

词条-文档关系矩阵


  • 在tm 包里,根据词条、文档分别作为行、列或反之,对应有TermDocumentMatrix DocumentTermMatrix 两类稀疏矩阵, 如下:

    > 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 有大量的函数(比如聚类、分类算法等)支持,但这个包还是提供了一些常用的函数支持。

  • 假如需要找出发生2 次及以上的条目,可以使用findFreqTerms() 函数:

    > findFreqTerms(dtm,2)
    [1] "word"
  • 找到相关性,比如对于opec,找到相关系数在0.8 以上的条目,使用findAssocs(),以上小节示例为例

  • 词条-文档关系矩阵一般都是非常庞大的数据集,因此这里提供了一种删减稀疏条目的方法removeSparseTerms,比如有些条目尽在很少的文档中出现。一般来说,这样做不会对矩阵的信息继承带来显著的影响。
  • 因为生成的term-document矩阵dtm是一个稀疏矩阵,再进行降维处理,之后转为标准数据框格式,以上节示例说明:
    #进行降维处理
    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))

package(1):tm的更多相关文章

  1. hackyviewpager有什么用

    继承于viewpager 可以和photoView一起使用,实现相册图片的左右滑动,放大缩小,等 package davidwang.tm.view; import android.content.C ...

  2. 【机器学习与R语言】3-概率学习朴素贝叶斯(NB)

    目录 1.理解朴素贝叶斯 1)基本概念 2)朴素贝叶斯算法 2.朴素贝斯分类应用 1)收集数据 2)探索和准备数据 3)训练模型 4)评估模型性能 5)提升模型性能 1.理解朴素贝叶斯 1)基本概念 ...

  3. R语言︱文本挖掘套餐包之——XML+SnowballC+tm包

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言︱文本挖掘套餐包之--XML+tm+Sn ...

  4. R语言 文本挖掘 tm包 使用

    #清除内存空间 rm(list=ls()) #导入tm包 library(tm) library(SnowballC) #查看tm包的文档 #vignette("tm") ##1. ...

  5. 新手根据菜鸟教程安装docker,从No package docker-io available开始遇到的坑...(转)

    转文地址:https://www.cnblogs.com/maodot/p/7654918.html 新手centos6.9安装docker时从遇到No package docker-io avail ...

  6. javac compiling error ( mising package)

    javac 编译java源文件时,提示 package does not exist 的错误 Test.java import java.security.MessageDigest; import ...

  7. vuepress & package.json lock version

    vuepress & package.json lock version npm 锁版 bug npm lock version holy shit { "name": & ...

  8. NPM (node package manager) 入门 - 基础使用

    什么是npm ? npm 是 nodejs 的包管理和分发工具.它可以让 javascript 开发者能够更加轻松的共享代码和共用代码片段,并且通过 npm 管理你分享的代码也很方便快捷和简单. 截至 ...

  9. npm package.json属性详解

    概述 本文档是自己看官方文档的理解+翻译,内容是package.json配置里边的属性含义.package.json必须是一个严格的json文件,而不仅仅是js里边的一个对象.其中很多属性可以通过np ...

随机推荐

  1. 【排序算法】快速插入排序算法 Java实现

    基本思想 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部插入完成. 设数组为a[0...n-1] 初始时,a[0]自成一个有序区,无序区为a[1...n-1] ...

  2. 利用自动类型转换存储string类型

    类型转换是我们最常用的功能.就像上战场用的枪一样,敌人用的冲锋枪, 自己手里就一把步枪,打起仗来始终有点不爽. 因此,基本功能的完善很重要. 通常情况下我们需要String类型转其它的基础类型.这时我 ...

  3. Android消息推送 SDK 集成指南

    使用提示 本文是 Android SDK 标准的集成指南文档. 匹配的 SDK 版本为:r1.8.0及以后版本. 本文随SDK压缩包分发.在你看到本文时,可能当前的版本与本文已经不是很适配.所以建议关 ...

  4. 手把手教你webpack、react和node.js环境配置(上篇)

    很多人刚学习react的时候,往往因为繁琐的配置而头疼,这里我将手把手教大家怎么用webpack配置react和redux的环境,这篇教程包括前端react和后台node整个网站的环境配置,对node ...

  5. Kafka Eagle 源码解读

    1.概述 在<Kafka 消息监控 - Kafka Eagle>一文中,简单的介绍了 Kafka Eagle这款监控工具的作用,截图预览,以及使用详情.今天笔者通过其源码来解读实现细节.目 ...

  6. Java设计模式之《职责链模式》及应用场景

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6530089.html 职责链模式(称责任链模式)将请求的处理对象像一条长链一般组合起来,形 ...

  7. Digital Tutors - Creating an Action Adventure Puzzle in Unity学习笔记

    遇到的问题: 1 第11节Scripting the pressure plates中需要获取子物体的Animator组件,教程使用的语句如下: ”SwitchAnim = GetComponentI ...

  8. jquery事件与绑定事件

    1.首先,我们来看一下经常使用的添加事件的方式: <input type="button" id="btn" value="click me!& ...

  9. ACM 阶乘的0

    阶乘的0 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 计算n!的十进制表示最后有多少个0   输入 第一行输入一个整数N表示测试数据的组数(1<=N< ...

  10. .进程&线程(&java.lang.Thread)详解

    一.进程与线程 进程 我们在进行操作电脑的时候,通常会打开浏览器,通讯工具等应用程序,这个时候CPU通过作业调度在内存中就会分配一些空间让它们处于宏观上的运行状态(处于可以被CPU执行的状态),而这部 ...