前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >文本挖掘| 什么时候可以用到主题建模?

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

作者头像
黑妹的小屋
发布2020-08-05 11:17:26
5020
发布2020-08-05 11:17:26
举报
文章被收录于专栏:菜鸟学数据分析之R语言

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

01

数据预处理

代码语言:javascript
复制
> 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

代码语言:javascript
复制
> DOC <- Corpus(DirSource(name))
> DOC
<<SimpleCorpus>>
Metadata:  corpus specific: 1, document level (indexed): 0
Content:  documents: 6

03

文本转换

代码语言:javascript
复制
> 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

文档-词矩阵构建

代码语言:javascript
复制
> inspect(DocumentTermMatrix(DOC,control=control))
代码语言:javascript
复制
> 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个,它就会被删除。

代码语言:javascript
复制
> doc1 <- removeSparseTerms(doc, 0.75)
> dim(doc1)
[1]    6 2058

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

#命名矩阵的行名称

代码语言:javascript
复制
rownames(doc1) <- c("2010", "2011", "2012", "2013", "2014",
       "2015")

05

词频计算和分析

代码语言:javascript
复制
> 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次的词

代码语言:javascript
复制
> findFreqTerms(dtm, 125)
[1] "america"  "american" "jobs"     "new"      "now"      "people"   "thats"    "years"  

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

06

主题建模

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

代码语言:javascript
复制
> 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的词

代码语言:javascript
复制
> 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年演讲报告的内容为啥主题会一样,是什么原因导致的?非常值得好奇人士的分析。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 菜鸟学数据分析之R语言 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档