社会网络分析

Reads: 978 Edit

1 问题描述

社会网络分析可以用于分析主体之间的关系,在文本挖掘中,可以抽取出关键词,然后建立关键词之间的关联。

为了演示文本聚类模型,我们将从网站下载了8篇新闻文字稿,采用社会网络分析方法构建关键词之间的关联。

2 中文预处理

安装加载用到的包

> install.packages("SnowballC")
> library(SnowballC)
> install.packages("topicmodels")
> library(topicmodels)
> library(Rwordseg)
> library(tm)
> library(tidyverse) 
> library(wordcloud2)
> install.packages("tidytext")
> library(tidytext)

读取文本数据

> setwd("D:/Desktop/news")
> filenames=list.files(getwd(),pattern="txt")
> filenames
[1] "10万预算的新款小型SUV 这4款很快就登场.txt"         
[2] "高校毕业生就业:“两头”抢手“中间”冷.txt"            
[3] "科技革新 BMW 全新7系与创新纯电动i7发布.txt"        
[4] "科学好故事小行星和彗星撞击地球的几率有多大?.txt"  
[5] "篮网惨遭翻盘0-2落后 杜兰特27分欧文大失水准.txt"    
[6] "老板电器业绩14年以来首降,百亿里程碑蒙尘.txt"      
[7] "雷克萨斯RZ全球首发 专属纯电平台打造.txt"           
[8] "疫情零售面临艰难挑战,国内服饰集团股价全面下跌.txt"

说明:读取了news文件夹下面的8个txt文件!

> files=lapply(filenames,readLines)
> files=files[!is.na(files)]         ## 去除空行

中文分词

> words=segmentCN(as.character(files),returnType="tm")  ## 注意加returnType="tm"

生成语料库

> words_corpus=Corpus(VectorSource(words))

文本预处理

> words_corpus=tm_map(words_corpus,removeNumbers)
> words_corpus=tm_map(words_corpus,removeWords,c("的","和","了"))
> words_corpus=tm_map(words_corpus, stripWhitespace)

生成DTM文件

> words_dtm=DocumentTermMatrix(words_corpus,control = list(wordLengths=c(1,Inf)))
> words_dtm=removeSparseTerms(words_dtm, 0.95)            #去除稀疏矩阵

3 社会网络分析

3.1 生成词汇-词汇矩阵

> words_matrix = as.matrix(words_dtm)   
> freq=as.numeric(sort(colSums(words_matrix),decreasing=TRUE))    #为了提取前15个重要的词汇,否则太多绘制的网络图太复杂,如果词汇不多可以不要这步的操作。
> words_matrix=words_matrix[,freq[1:15]]               #为了提取前15个重要的词汇,否则太多绘制的网络图太复杂,如果词汇不多可以不要这步的操作。
> words_tmatrix<- t(words_matrix) %*% words_matrix        #生成词汇-词汇矩阵

3.2 绘制网络图

> install.packages("igraph")
> library(igraph)    

> g1 <- graph.adjacency(words_tmatrix,weighted = T,mode = 'undirected')
> g1 <- simplify( g1, remove.multiple = T, remove.loops = F, edge.attr.comb=c(weight="sum", type="ignore") )
> V(g1)$label <- V(g1)$name
> V(g1)$degree <- degree(g1)
> plot(g1, vertex.label.dist=1.5)

r-116



获取案例数据,请关注微信公众号并回复:R_dt18


Comments

Make a comment