R文本挖掘:社会网络分析

社会网络分析是综合运用图论、数学模型来研究行动者与行动者、行动者与其所处社会网络、以及一个社会网络与另一社会网络之间关系的一种结构分析方法。在这个定义中的“行动者”,或称“节点”,可以是一个个体,也可以是一个群体、一个组织,甚至是一个国家,这些行动者及其间的关系就构成了社会网络(Socia Network)

社会网络分析,英文social network analysis。社会网络分析已经成为重要的研究思想,涉及了多个学科和研究领域,例如:数据挖掘领域、知识管理、数据可视化、统计分析、社会资本、小世界理论、信息传播等。

当然了,这么一种方法也可以用在文本挖掘中,好处多多:

These methods are especially efficient for large-scale datasets in which traditional approaches such as content analysis are prohibitively labor-intensive; however, even with relatively smaller textual data they can be effective in assisting manual analysis by identifying additional patterns which human coders may not recognize.

所以今天我们就来写一写如何用R语言做中文文本的社会网络分析。

数据准备及预处理

数据依然还是新年贺词,大家自己在网上一搜,贴在记事本中就行:

library(igraph)
library(tm)
library(Rwordseg)
library(tmcn)

heci <- readLines('C:/Users/hrd/Desktop/bootcamp/dataset/2021贺词.txt',encoding = 'UTF-8')

数据读入之后就是分词和向量化,建立语料库和去停用词:

ci <- segmentCN(heci)#此步可以自定义词典

docs <- Corpus(VectorSource(ci))
inspect(docs)
docs <- tm_map(docs, removeNumbers)

#自定义停用词
myStopwords <- readLines('C:/Users/hrd/Desktop/bootcamp/dataset/Chinese-StopWords.txt',
encoding = 'UTF-8')
myStopwords<-myStopwords[Encoding(myStopwords)!="unknown"]

docs <- tm_map(docs, removeWords, myStopwords)

toSpace <- content_transformer(function(x, pattern) { return (gsub(pattern, " ", x))})
docs <- tm_map(docs, toSpace, "c")

docs <- tm_map(docs, stripWhitespace)

处理好了之后,就建立文档词矩阵:

tdm <- createTDM(docs, language = "zh")

tdm_removed<-removeSparseTerms(tdm, 0.9)##去掉低于95%的的稀疏条数

dim(tdm_removed)#查看词和文档的数量

社会网络分析

我们不考虑网络中边的粗细,只考虑链接关系,所以将词文档矩阵中的大于1的数字都转化为1:

m <- as.matrix(tdm)
m[m>=1] <- 1

然后我们生成社会网络分析的专用矩阵,这个矩阵叫做term-term adjacency matrix,是词文档矩阵和文档词矩阵的矩阵乘积:

#转化为term-term adjacency matrix
termMatrix <- m%*%t(m)

接下来我们就可以画出社会网络分析的图了:

#建立graph

g <- graph.adjacency(termMatrix,weighted = T,mode = 'undirected')
g <- simplify( g, remove.multiple = T, remove.loops = F,

edge.attr.comb=c(weight="sum", type="ignore") )

V(g)$label <- V(g)$name

V(g)$degree <- degree(g)
plot(g, vertex.label.dist=1.5

运行代码就可以得到图如下:

这个图还有很多可以完善的地方,我还在慢慢探索中,以后再继续更新。

小结

今天给大家写了中文文本的社会网络分析,现学现卖,还请大神点拨,感谢大家耐心看完。发表这些东西的主要目的就是督促自己,希望大家关注评论指出不足,一起进步。内容我都会写的很细,用到的数据集也会在原文中给出链接,你只要按照文章中的代码自己也可以做出一样的结果,一个目的就是零基础也能懂,因为自己就是什么编程基础没有从零学Python和R的,加油。数据分析问题咨询,代处理请私信。

(0)

相关推荐