R | 教程 jiebaR中文分词

Posted 社会科学中的机器学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R | 教程 jiebaR中文分词相关的知识,希望对你有一定的参考价值。


“社会科学中的机器学习”第446篇推送

导言

jiebaR 是"结巴"中文分词的R语言版本,支持最大概率法(Maximum Probability),隐式马尔科夫模型(Hidden Markov Model),索引模型(QuerySegment),混合模型(MixSegment),共四种分词模式。本次推送将介绍 R jiebaR 程序包关于中文分词的具体方法。

安装软件包

  
    
    
  
install.packages("jiebaR")

默认引擎分词

jiebaR 默认使用混合模型(MixSegment)进行分词,可对语句(变量)和文档(路径)分词。

对语句进行分词

  
    
    
  
library(jiebaR) 

engine1 = worker()
words="我希望未来会很好"

engine1[words]            #方法1
engine1<=words               #方法2
segment(words",engine1)   #方法3
运行结果:
  
    
    
  
[1"我"   "希望" "未来" "会"   "很"   "好"

对文本文件进行分词

当前目录下创建文本文件 like.txt

like.txt

新的一学年开始了,结束了大一的骄傲和浮躁之后,桥川、钟白、任逸帆等人顺利进入了大二。肖海洋也通过了大一的考试,如愿以偿没有留级。大一的同窗情谊依旧继续。过了一个假期,大二伊始,旧同学的离开和新同学的加入,让他们之间的关系也发生了微妙变化。顾一心随家人去了美国上学, 毕十三把这份牵挂变成了学习上奋进的动力。转学生许连翘新转入电摄班并貌似带着神秘的任务。原班主任的离开,让原本散漫的电摄班开始团结。
人物的新旧交替,和大二课业的丰富与繁重,2015级电摄班大二的同窗故事更加精彩。这时的他们褪去了大一的青涩,迎来大学中成长速度最快的一年。九个人开启了各自的梦想,并在跌跌撞撞中实现自己的梦想。又是一年大学时光的流逝,九位同窗好友之间的情谊越来越浓。
  
    
    
  
library(jiebaR) 

engine1 = worker()
segment['like.txt',engine1]
运行结果:
  
    
    
  
[1"C:/Users/Li/Documents/RData/like.segment.2020-08-12_22_09_29.txt"
即在同目录下生成分词结果的文本文件,内容如下:
新 的 一 学年 开始 了 结束 了 大 一 的 骄傲 和 浮躁 之后 桥川 钟 白 任 逸 帆 等 人 顺利 进入 了 大二 肖 海洋 也 通过 了 大 一 的 考试 如愿以偿 没有 留级 大一 的 同窗 情谊 依旧 继续 过 了 一个 假期 大二 伊始 旧 同学 的 离开 和 新 同学 的 加入 让 他们 之间 的 关系 也 发生 了 微妙 变化 顾 一心 随 家人 去 了 美国 上学 毕 十三 把 这份 牵挂 变成 了 学习 上 奋进 的 动力 转 学生 许 连翘 新 转入 电摄 班 并 貌似 带 着 神秘 的 任务 原 班主任 的 离开 让 原本 散漫 的 电 摄班 开始 团结 人物 的 新旧交替 和 大二 课业 的 丰富 与 繁重 2015 级 电 摄班 大二 的 同窗 故事 更加 精彩 这时 的 他们 褪去 了 大 一 的 青涩 迎来 大学 中 成长 速度 最快 的 一年 九个 人 开启 了 各自 的 梦想 并 在 跌跌撞撞 中 实现 自己 的 梦想 又 是 一年 大学 时光 的 流逝 九位 同窗好友 之间 的 情谊 越来越 浓

更多分词引擎

在调用 worker() 函数时,我们实际是在加载 jiebaR 库的分词引擎。 jiebaR 库中提供了8种分词引擎。
  • 混合模型(MixSegment):默认引擎。四个分词引擎里面分词效果较好,结合使用最大概率法和隐式马尔科夫模型。
  • 最大概率法(MPSegment) :负责根据Trie树构建有向无环图和进行动态规划算法,是分词算法的核心。
  • 全分词模型(FullSegment):将枚举字典中所有可能的单词
  • 隐式马尔科夫模型(HMMSegment):是根据基于人民日报等语料库构建的HMM模型来进行分词,主要算法思路是根据(B,E,M,S)四个状态来代表每个字的隐藏状态。HMM模型由dict/hmm_model.utf8提供。分词算法即viterbi算法。
  • 索引模型(QuerySegment):先使用混合模型进行切词,再对于切出来的较长的词,枚举句子中所有可能成词的情况,找出词库里存在。
  • 标记模型(tag):先使用混合模型进行切词,并在切分后使用与ictclas兼容的标签对词进行词性标注。
  • Simhash模型(simhash):使用关键字提取worker查找关键字,并使用Simhash算法计算Simhash值。
  • 关键词模型(keywords):可抽取关键词

参数解释

  
    
    
  
worker(type = "mix", dict = DICTPATH, hmm = HMMPATH, user = USERPATH,
    idf = IDFPATH, stop_word = STOPPATH, write = T, qmax = 20, topn = 5,
    encoding = "UTF-8", detect = T, symbol = F, lines = 1e+05,
    output = NULL, bylines = F, user_weight = "max")
上述 worker() 函数各参数含义:
  • type, 引擎类型,包括 mix , mp , hmm , full , query , tag , simhash , 和 keywords .
  • dict, 系统词典,默认DICTPATH
  • hmm, HMM模型路径
  • user, 用户词典
  • idf, IDF词典
  • stop_word, 关键词用停止词库
  • write, 是将输出写入文件,还是在对象中返回结果。仅在输入为文件路径使用。默认TRUE。
  • qmax, 最大成词的字符数,默认20个字符
  • topn, 关键词数,默认5个
  • encoding, 输入文件的编码,默认UTF-8
  • detect, 是否编码检查,默认TRUE
  • symbol, 是否保留符号,默认FALSE
  • lines, 每次读取文件的最大行数,用于控制读取文件的长度。大文件则会分次读取。
  • output, 输出路径
  • bylines, 按行输出
  • user_weight, 用户权重

更改分词引擎配置项

可以在调用worker()创建分词引擎时改变分词引擎的配置项,也可以通过 WorkerName$symbol = T 的形式来进行设置
以下为帮助手册中的例子:
  
    
    
  
engine2 = worker("hmm")                    #创建时更改配置项
segment("./temp.txt", engine2)        

engine2$write = T                        #通过$更改配置项
segment("./temp.txt", engine2)

engine3 = worker(type = "mix", dict = "dict_path",symbol = T)        #指定系统词典,并保留符号
segment("./temp.txt", engine3)
以下为帮助手册中不同分词引擎的应用实例
  
    
    
  
#关键词模式,筛选1个关键词
engine = worker("keywords", topn = 1)        #关键词模式,筛选1个关键词
keywords(words, engine)

#标记模式,对分好后的每个词标记词性
tagger = worker("tag")
tagging("我爱厦门", tagger)
#     r      v     ns 
#  "我"   "爱" "厦门" 
#    r:代词 v:动词  ns:地名

### Simhash模型,筛选一个关键词
simhasher = worker("simhash", topn = 1)
simhash(words, simhasher)                   #计算关键词和原文的simhash值
distance("hello world" , "hello world!" , simhasher)        #该函数使用Simhash引擎进行关键字提取,从两个输入中找到关键字,然后计算它们之间的Hamming距离。

自定义用户词典

自定义用户词典 mydict.utf8 包括:一学年 大一 钟白 任逸帆 肖海洋
  
    
    
  
engine=worker(user="mydict.utf8"
segment['like.txt',engine]
输出结果:在同目录下生成分词结果的文本文件,第一行内容如下:
新 的 一学年 开始 了 结束 了 大一 的 骄傲 和 浮躁 之后 桥川 钟 白 任逸帆 等 人 顺利 进入 了 大二 肖海洋 也 通过 了 大 一 的 考试

停止词处理

“的”,“哦”,“哎呦”,“而且”,“了”,“是”等一般被视为停用词。在jiebaR 中,可以通过词性标注去除停用词,也可通过指定停用词词典去除停用词。

词性标注法:

  
    
    
  
stop=c('r','p')
sentence=worker(type = "tag"
sentence_words<-sentence<="脱贫攻坚是我们党对全国各族人民的庄严承诺,事关全面小康、家国梦想" 
sentence_words[!(names(sentence_words) %instop)]#去除停止词是代词,介词
运行结果
  
    
    
  
        v         vn          v          n          n          l         uj          a          v 
    "脱贫"     "攻坚"       "是"       "党"     "全国" "各族人民"       "的"     "庄严"     "承诺" 
         n          n         nr          q          n          n 
    "事关"     "全面"     "小康"       "家"       "国"     "梦想" 

指定停止词词典

假设停止词词典文本文件(可以用记事本打开,并另存为UFT-8编码格式),如下:
是     我们  对   的
  
    
    
  
注:停止词词典txt文件一定要放在R语言的工作目录下才行,而且txt文件的第一行需为空行否则无法导入停用词典,当前工作目录路径采用getwd()得知。
  
    
    
  
sentence=worker(stop_word='stop.txt'
sentence_words<-sentence<="脱贫攻坚是我们党对全国各族人民的庄严承诺,事关全面小康、家国梦想"
sentence_words
运行结果
  
    
    
  
[1"脱贫"     "攻坚"     "党"      "全国"     "各族人民"    "庄严"     "承诺"     "事关"     "全面"     
[10"小康"     "家"       "国"       "梦想" 
注:操作平台为R Studio (R 4.0.2)
文章来源:https://www.cnblogs.com/Hyacinth-Yuan/p/8243476.html,更多请点击“阅读原文”


广受欢迎的微信公众号“社会科学中的机器学习”每周推送R、Python、ArcGIS及Stata等软件在社会科学各领域中的运用实例及教程。本帐号由复旦大学经济学院陈硕教授及其团队负责。欢迎媒体及学界与我们展开内容合作,联系邮箱ilikemachinelearning@outlook.com。查看以前推送:点“社会科学中的机器学习”并选择“查看历史消息”。搜寻帐号: iLikeMachineLearning或扫描二维码如下:

以上是关于R | 教程 jiebaR中文分词的主要内容,如果未能解决你的问题,请参考以下文章

R语言中文分词包jiebaR

R语言中文分词包jiebaR

R语言jiebaR包文本中文分词及词云制作上机练习

R专题区|中文分词入门之—jiebaR

如何用R进行中文分词?

jiebaR 中文分词详解