R-水浒人物关系呈现

一、背景

        利用R呈现《水浒传》人物关系网络图

二、技术路线

       思路:以在同一段出现的共现关系,绘制人物关系网络图

      工具:R

三、过程

1. 预定义函数

#读取文件内容函数
get.content<-function(file.path){
    return (scan(file.path,sep='\n',what='character'))
}

#从termlist中筛选出words,返回词项列表
get.intersect.terms<-function(termlist,words){
  heros<-list()
  heros<-lapply(1:length(termlist),function(i) heros[[i]]<-intersect(termlist[[i]],words))
  hero.clean<-list()
  j<-1
  for (i in (1:length(heros))){
    if(length(heros[[i]]>1)){
      hero.clean[[j]]=heros[[i]]
      j=j+1
    }
  }
  return (hero.clean)
}

#获取输入向量元素间的两两关系
get.relationship<-function(termvector){
  a<-NULL
  len<-length(termvector)
   if(len>1){
    for (i in 1:(len-1))
      for (j in (i+1):len)
        a<-append(a,c(termvector[i],termvector[j]))
  }
  return (a)
}
2. 实现:
library(tm)
library(Rwordseg)
words<-get.content('水浒人名.txt') 
insertWords(words)                   #作为临时分词词项使用
sh.data<-get.content('水浒传.txt') 
segwords.list<-segmentCN(sh.data)       
co.heros<-get.intersect.terms(segwords.list,words)     
co.heros<-lapply(co.heros,function(i) get.relationship(i)) 
co.heros<-unlist(co.heros)
co.matrix<-matrix(co.heros,ncol=2,byrow=TRUE)
write.csv(co.matrix,'水浒.csv',row.names=FALSE)   

也可以将上述过程封装成一个函数:

#读取文件,返回words参数中定义的词项间共现关系列表
auto.getrls<-function(file.path,words){
  file.data<-get.content(file.path)
  file.term<-segmentCN(file.data)                                                #分词
  file.terms<-get.intersect.terms(file.term,words)            #获取交集
  file.terms.rls<-lapply(file.terms,function(i) get.relationship(i))     #获取词项间关系
  file.terms.rls<-unlist(file.terms.rls)                                             #将列表转换为向量 
  return (file.terms.rls)
}

3. 得到CSV关系数据,利用社会网络分析工具Gephi进行网络可视化

R-水浒人物关系呈现_第1张图片



      

你可能感兴趣的:(个人学习,数据分析,R,文本分析,可视化,数据)