R-文本处理-分词

一、背景

      准备对《水浒传》中人物关系进行探索,无奈《水浒传》词库只有三种类型数据:天魁星呼保义宋江、呼保义宋江、宋江,无法对”天魁星“、”呼保义“进行分词,故需要进行预处理,现对此问题进行处理。

二、技术路线

     思路:观察现有数据,天罡地煞数据格式规范,容易获取,江湖称号(”呼保义“)稍微复杂,现利用R及其文本挖掘工具进行处理。

    工具:R、Rwordseg包

 三、过程

     1. 处理天罡地煞词项

       

 #定义数据读取函数
         get.content<-function(file.path){
          return (scan(file.path,sep='\n',what='character'))}
        #处理天罡地煞数据
        sh.heros<-get.content('水浒人物.txt')
        sh.heros<-sh.heros[1:108]    #前108行为 "天魁星呼保义宋江"型数据,故截取
        sh.heros<-substr(sh.heros,1,3)
         write.table(sh.heros,'sh_words1.txt',sep='\n',row.names=FALSE,col.names=FALSE,quote=FALSE)
 2. 处理江湖称号词项

      江湖称号数据获取的主要阻碍在于姓名长短不一,无法采用像天罡地煞数据的处理方式直接通过子字符串获得。 由于现有分词包能对人物姓名进行切分,因此考虑采用分词技术:获取”呼保义宋江“型数据,分词后得到一个由分出的各词项组成的列表,去除每个向量最后一个元素后对每个向量进行拼接,即是江湖称号数据。

  #载入所需包
       library(tm)
       library(Rwordseg) 
       #读取现有数据
       shuihu.names<-get.content('水浒人物.txt')
       insertWords(c(shuihu.names[209:length(shuihu.names)]))  #将现有人物姓名作为临时分词,原文件第209个开始起为"宋江"型数据
       name.terms<-segmentCN(shuihu.names)      
       name.clean<-lapply(name.terms,function(i)i<-i[-length(i)])
       name.merge<-lapply(name.clean,function(i)  merge.element(i))
       hero.names<-name.merge[-which(name.merge=='NA')]
       hero.names<-hero.names[109:length(hero.names)]
       write.table(hero.names,'sh_words2.txt',sep='\n',row.names=FALSE,col.names=FALSE,quote=FALSE)
       #拼接函数
      merge.element<-function(a){
         len<-length(a)
         temp<-NULL
         for (i in 1:len)
         temp<-paste(temp,a[i],sep="")
         return (temp)
       }    

    3. 合并数据  

words.1<-get.content('水浒人物.txt')
words.2<-get.content('sh_words1.txt')
words.3<-get.content('sh_words2.txt')
words<-c(words.1,words.2,words.3)
write.table(words,'水浒人名.txt',sep='\n',row.names=FALSE,col.names=FALSE,quote=FALSE)

    4. 如何利用?

  (1)  采用Rwordseg包中insetwords()函数将数据作为临时分词词项使用

       (2)  将数据导入目录 “ R_HOME/library/Rwordseg/dict " 中后缀名为" .dic" 文件中,利用loadDict()载入分词数据,持久使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值