专栏首页菜鸟学数据分析之R语言文本挖掘| 什么时候可以用到主题建模?

文本挖掘| 什么时候可以用到主题建模?

主题建模可以帮助决策者处理大量文本数据,对文档中的名词出现频率进行概率建模。用来估计两个文档和关键词之间的相似性。你是否好奇奥巴马过去几年国会演讲报告,随着时间的推移,他传达的信息有什么变化?接下来,https://github.com/datameister66/data下载奥巴马2011-2015年国会演讲报告。

01

数据预处理

> library(tm)
> library(wordcloud)
> library(RColorBrewer)
> getwd()#获取工作目录路径
[1] "/Users/apple/Desktop"
> name <- file.path("/Users/apple/Desktop/text")
#⚠️:把下载的2011-2015的txt文件单独放在text文件夹里
> length(dir(name))#查看txt文件个数
[1] 6
> dir(name)#查看文件名称
[1] "sou2010.txt" "sou2011.txt" "sou2012.txt" "sou2013.txt" "sou2014.txt" "sou2015.txt"

02

建立语料库DOC

> DOC <- Corpus(DirSource(name))
> DOC
<<SimpleCorpus>>
Metadata:  corpus specific: 1, document level (indexed): 0
Content:  documents: 6

03

文本转换

> DOC <- tm_map(DOC, tolower)#转换为小写
> DOC <- tm_map(DOC, removeNumbers)#删除数字
> DOC<- tm_map(DOC, removePunctuation)#删除标点符号
> DOC <- tm_map(DOC, removeWords, stopwords("english"))#删除停用词english
> DOC <- tm_map(DOC, stripWhitespace)#删除空白字符
> DOC <- tm_map(DOC, removeWords, c("applause", "can", "cant","will","that", "weve", "dont", "wont", "youll", "youre"))#删除不必要的

04

文档-词矩阵构建

> inspect(DocumentTermMatrix(DOC,control=control))
> doc<-DocumentTermMatrix(DOC)
> doc
<DocumentTermMatrix (documents: 6, terms: 4373)>>
Non-/sparse entries: 9470/16768
Sparsity           : 64%
Maximal term length: 16
Weighting          : term frequency (tf)
>dim(doc)

#查看维度,这6篇演讲稿包含4373个词,词量太大,可以把稀疏度大于0.75的删掉。也就是说,(1-0.75) * 6 = 1.5,对于任何一个名词,如果包含它的文档少于2个,它就会被删除。

> doc1 <- removeSparseTerms(doc, 0.75)
> dim(doc1)
[1]    6 2058

#查看维度,这6篇演讲稿包含2058个词

#命名矩阵的行名称

rownames(doc1) <- c("2010", "2011", "2012", "2013", "2014",
       "2015")

05

词频计算和分析

> freq <- colSums(as.matrix(doc1))#计算词频
> ord <- order(-freq)#降序排列
> freq <- colSums(as.matrix(doc1))
> ord <- order(-freq)
> freq[head(ord)]#检查对象的头部6个
    new    jobs america  people     now   thats 
    177     155     153     148     142     141 
> freq[tail(ord)]#检查对象的尾部6个
   terror terrorism     treat      undo   unleash      zero 
        2         2         2         2         2         2 

可以看出,出现最频繁的词是new,其次是jobs,同时,总统先生非常频繁地提起america。还应该注意到,从jobs这个词的频率可以看出国会非常注重就业问题!

#使用findFreqTerms()函数,找出那些至少出现125次的词

> findFreqTerms(dtm, 125)
[1] "america"  "american" "jobs"     "new"      "now"      "people"   "thats"    "years"  

词频计算出来以后,可以用于相关性分析,比如统计词与词之间的相关性,词云图绘制,ggplot2可视化分析,同时对某一篇文章以及两篇文章进行相关指标的对比等等,此文主要针对主题建立模型。

06

主题建模

使用topicmodels包建立主题模型,利用LDA()函数建立4个主题。

> library(topicmodels)
> set.seed(123)
> lda4 <- LDA(dtm, k = 3, method = "Gibbs")
> topics(lda4)
2010 2011 2012 2013 2014 2015 
   3    2    1    1    1    1

可以看到,随着时间的变化,主题的变化令人惊讶。奥巴马任职期间2012-2015年的演讲具有同样的主题分组。

#我们选出每个主题排名前20的词

> terms(lda4, 20)
      Topic 1    Topic 2     Topic 3     
 [1,] "america"  "jobs"      "thats"     
 [2,] "years"    "just"      "year"      
 [3,] "new"      "last"      "people"    
 [4,] "every"    "energy"    "american"  
 [5,] "lets"     "tax"       "businesses"
 [6,] "congress" "now"       "now"       
 [7,] "country"  "also"      "economy"   
 [8,] "work"     "future"    "time"      
 [9,] "get"      "tonight"   "one"       
[10,] "make"     "next"      "take"      
[11,] "right"    "come"      "americans" 
[12,] "help"     "education" "know"      
[13,] "world"    "new"       "two"       
[14,] "want"     "people"    "families"  
[15,] "states"   "support"   "security"  
[16,] "job"      "change"    "work"      
[17,] "need"     "reform"    "still"     
[18,] "like"     "deficit"   "like"      
[19,] "home"     "need"      "many"      
[20,] "american" "must"      "health"

可以看出,2010年,美国国会演讲的主题Topic3主要是涉及经济ecnomy和商业businesses,2011年的主题Topic2能传达信息的词语是jobs、energy、deficit。2012-2015年的主题Topic1主要是work,job,特别好奇2012年-2015年这4年演讲报告的内容为啥主题会一样,是什么原因导致的?非常值得好奇人士的分析。

本文分享自微信公众号 - 菜鸟学数据分析之R语言(lxl915746437),作者:刘晓雪

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 你的Mac安装SPSS了吗?-Mac+SPSS安装步骤

    WIndow版本的SPSS早已安装,追求完美的我认为Mac安装上SPSS才算圆满,几经周折,终于为自己的MacBook Air安装上SPSS,这是非常值得高兴的...

    黑妹的小屋
  • 基础知识 | R语言数据分析之控制流

    正常情况下,R 语言的程序语句是从上至下顺序执行的。控制流通常在希望重复执行某些语句,仅在满足特定条件的情况下执行另外的语句的时候发挥作用。包括循环语句,...

    黑妹的小屋
  • 文本挖掘| 某作者文章的词频统计排序

    其实,现在的互联网数据大多数是非结构化的,比如谷歌,雅虎,搜狐等网站的文本数据已经泛滥成灾。文本挖掘有很多的用处,比如了解患者对罕见癌症的关注度,统计政府...

    黑妹的小屋
  • python 模块定义、导入、优化

    2. import module_name,module2_name (导入多个模块)

    py3study
  • python抽象基类abc

    python中并没有提供抽象类与抽象方法,但是提供了内置模块abc(abstract base class)来模拟实现抽象类。

    用户2936342
  • 优步正在开发AI来识别醉酒乘客

    该专利描述了一种测量用户在手机上的行为与其通常行为的方法。该系统依靠一种算法来衡量多种因素,包括错别字,用户点击链接和按钮的准确度,用户行走的速度以及请求乘车所...

    AiTechYun
  • Brain Stimulation:实时EEG触发的TMS对抑郁症患者左背外侧前额叶皮层进行脑振荡同步刺激

    请点击上面“思影科技”四个字,选择关注作者,思影科技专注于脑影像数据处理,涵盖(fMRI,结构像,DTI,ASL,EEG/ERP,FNIRS,眼动)等,希望专业...

    用户1279583
  • 面试总被问分布式ID怎么办? 滴滴(Tinyid)甩给他

    接着《一口气说出 9种 分布式ID生成方式,面试官有点懵了》来继续详细的介绍分布式ID生成器,大家比较感兴趣的美团(Leaf)、滴滴(Tinyid)、百度(ui...

    程序员内点事
  • JVM详解之:java class文件的密码本

    一切的一切都是从javac开始的。从那一刻开始,java文件就从我们肉眼可分辨的文本文件,变成了冷冰冰的二进制文件。

    程序那些事
  • log4net原理解析

    在任何项目中使用log4net,首先需要在web.config(app.config)文件中配置log4net相关信息。一般情况下,如下:

    小蜜蜂

扫码关注云+社区

领取腾讯云代金券