R-水浒人物关系呈现

本文介绍了一种利用R语言分析《水浒传》中人物关系的方法,通过提取书中人物名称并分析其共现关系来绘制人物关系网络图。首先定义了几个关键函数用于读取文本、提取特定词汇及分析词汇间的关系;接着,使用tm和Rwordseg库进行文本处理;最后,将得到的数据导出为CSV文件,并使用Gephi进行可视化。
摘要由CSDN通过智能技术生成

一、背景

        利用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进行网络可视化




      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值