上车 | R语言中文分词10分钟快速入门

Posted 昆仑数据K2Data

tags:

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

独乐乐不如众乐乐,我们的数据科学家与分析师在纷繁复杂的工作中发现了一些可以提升数据分析效率的技巧,并很乐意奉献给刚入门或正准备入门工业大数据的攻城狮们,抛砖引玉,如有不同见解或有更深了解需求,欢迎后台留言。


文本数据是工业大数据中一种重要的数据形式,包括如设备维修工单、服务反馈信息和产品质检报告等蕴藏着重要价值的文本。


以维修工单为例,包含产品的故障问题、故障原因和解决方案等等描述信息。通过分析这些文本数据,工业企业可以及时发现产品质量问题,更能基于数据提示普遍趋势与建议方法,并形成反馈回路加速产品优化设计。


然而,文本信息通常是半结构化和非结构化的手工填报记录,人工统计费时费力。有效采用文本挖掘技术,在相同的故障工单数据下,使统计分析效率大大提升。



中文文本挖掘的主要技术包括中文分词、特征提取、文本分类、文本聚类、关联分析、文本摘要等,其中中文分词是文本挖掘最基础的步骤,其目的是将一个汉字句子切分成一个一个单独的词,便于后续的分析挖掘。


本文将对中文分词基本流程、中文分词算法及R语言中文分词包进行简要介绍。



 一、分词基本流程


中文的分词基本流程见图1。通常说分词,是指包括导入词典、执行分词两个步骤的狭义分词。但在实际的项目中,还需要做大量的文本预处理和后处理工作。


图1


1.文本预处理,分词前的文本处理,通常需要用正则表达式来完成。


a) 同义词替换。比如“紧急停机”、“急停”、“度”和“°”、“号”和“#”,业务语义相同,分词之前应统一成一种说法。


b) 英文大小写统一。小写英文都变大写,如”plc”换成”PLC”,反之亦然。


c) 利用特定规则获取关键信息。比如打算在文档标题中提取故障名,发现标题符合“某项目某机组报某故障”命名规则,就可以利用正则表达式提取故障信息。


d) 利用文本以外的结构化信息。如想去除文本中包含设备编号(A1、LY-12等),但这些编号很难总结出一定规则,这时如果找到含设备编号字段的文档表格(如设备台账),就可以直接取来用于过滤。


2.文本后处理,分词后的文档词组的删除合并操作。


a) 去除停止词。建立停止词库,去除“了”、“和”、“因为”、”发现”等,这些高频且对分析无意义的虚词、连词、动词等。


b) 利用特定规则删除词。比如日期,2016年、1月。如不希望成为关键词,应使用正则表达式滤除。


c) 处理歧义词。比如分词结果是“某编号”、“齿轮箱”两个词,前者单独出现时表示发电设备,但当两个词连续出现时,则表示某编号齿轮箱,因此需要合并处理。


 二、常见中文分词算法


分词技术常见的有两大类:


1.机械分词法


即扫描字符串,如果发现字符串的子串和词典中的词相同,就算匹配,因此也叫基于字符串匹配的分词方法。这类分词通常会加入一些启发式规则,比如“正向/反向最大匹配”,“长词优先”等。常用的几种机械分词方法如下:

a.正向最大匹配法(由左到右的方向);

b.逆向最大匹配法(由右到左的方向);

c.最少切分(使每一句中切出的词数最小)。

机械分词方法是一种很简单高效的分词方法,它的速度很快,都是O(n)的时间复杂度,效果也可以。但缺点是对歧义和新词的处理不是很好,对词典中未出现的词没法进行处理,因此经常需要其他分词方法进行协作。


2.统计分词法


统计分词法基于人工标注好的语料库对中文进行模型训练,在分词阶段再通过模型计算各种分词出现的概率,将概率最大的分词结果作为最终结果。常见的几种统计方法如下:

a.nGram模型;

b.隐马尔可夫(HMM)模型;

c.条件随机场(CRF)模型。

统计类分词算法对于识别未登录词拥有较好的识别能力,分词精度较机械分词法高。但是需要大量的人工标注语料库,分词速度慢。 实践中,一般都是多种分词方法结合起来使用,相互弥补。


即:使用词典+统计法结合的方法,用词典来存储大部分关键词,使用统计法识别新词。


 三、R语言分词工具 


表1总结了R语言在文本挖掘中常用的工具包,其中Rwordseg和jiebaR是目前R中最主流的中文分词工具包,这里予以着重介绍。


功能分类

R包与解释

文本获取(网络)

RCurl(浏览器访问)、XML(解析XML数据)

中文分词

Rwordseg、jiebaR

词库与分析矩阵构建

tm(文本处理基础框架)、tmcn(增强中文处理)

中文文本处理

chinese.misc(集成读文件、jieba分词、tm词库与分析矩阵构建功能,增强中文处理)

词云绘制

wordcloud、wordcloud2

主题模型

LDA、topicmodels、LDAvis(主题可视化)

文本分类

RTextTools(基于tm包,集成多种分类方法)

文本聚类

R通用聚类包

表1 常用的R语言文本挖掘工具包


1.中文分词R包简介


jiebaR是“结巴”中文分词的R语言版本,作者覃文锋,支持四种分词模式:最大概率法、HMM、混合模型和索引模型,同时有词性标注,关键词提取,文本Simhash相似度比较等功能,项目使用了Rcpp和CppJieba进行开发,目前有测试版和稳定版两种,托管在GitHub上 https://github.com/qinwf/jiebaR


Rwordseg的开发者是李舰,使用rJava调用Java分词工具Ansj。Ansj是一个开源的Java 中文分词工具,基于中科院的ictclas中文分词算法。孙健重写了Java版本,托管在GitHub上,https://github.com/ansjsun/ansj_seg,最新版本是基于nGram+CRF+HMM的混合模型。


2.分词功能介绍


回到分词功能介绍,jiebaR和Rwordseg的功能简要对比见表2。


功能分类

jiebaR

Rwordseg

分词

√(带停止词)

词性识别

关键词提取

×

相似文本比较

×

表2 jiebaR和Rwordseg功能对比


1

 jiebaR Cheatsheat

①词典格式

词名

词频

词性

1号店

3

n

散打

40

v

漂亮

1921

a

②分词功能

初始化:

engine = worker(type = 默认为"mix", dict = DICTPATH, user = USERPATH)
分词:
segment(words, engine) 等于 engine[words] 等于 engine <= words
临时加入新词:
new_user_word(engine, newWords= 新词向量, tags= 新词词性)
 
常用参数:

type:mix(混合模型), mp(最大概率法), hmm(隐马尔可夫模型)

dict:系统词典路径,jieba提供默认词典

user:用户词典路径

③ 词性识别

初始化:
engine = worker(type = 需设为"tag")
分词并识别词性:
tagging(words, engine) 等于 engine[words] 等于 engine <= words

④关键词提取

初始化:
engine = worker(type = 需设为"keywords", idf = IDFPATH, topn = 5)
分词并用TF-IDF算法查找关键词:
keywords(words, engine) 等于 engine[words] 等于 engine <= words
 
常用参数:

idf:逆文档频率词典路径,jieba提供默认词典

topn:输出topn关键词

⑤文本相似功能

初始化:
engine = worker(type = 需设为"simhash", topn = 5)
提取关键词并计算simhash相似指标:
simhash(words, engine) 等于 engine[words] 等于 engine <= words
计算两个词相似指标的Hamming距离:
distance(words1, words2 , engine)
 
常用参数:
topn:输出topn个关键词的相似指标


2

Rwordseg Cheatsheat

①词典格式

词名

词类名称

词频

风寒咳嗽

Medical

1000

虚拟环境

Computer

1000

旋转编码器

Instrument

1000

②分词和词性识别

分词
segmentCN(words, nature=FALSE)
临时加入新词:
insertWords(strwords, strtype= "新词类型", numfreq = "新词频次")
 
常用参数:

nature:为TRUE是进行分词词性识别

③ 词典管理

添加词典文件
installDict(dictpath, dictname, dicttype = c("text", "scel"), load = TRUE)
查看已添加词典
listDict()
删除词典
uninstallDict(removedict = 词典英文名)
 
常用参数:

dictpath:词典路径

dictname 是自定义词典的英文名称,会添加到词典中的类别标签,也用于删除词典

dicttype 默认是txt文件

load 表示安装后是否自动加载到内存,默认是TRUE


4.结论


本文主要总结了中文分词的主要算法和R语言中的两个分词包jiebaR和Rwordseg。从目前的R包版本来看,jiebaR功能比Rwordseg更全面。在实际应用中,除了软件工具包的选择,分词结果的好坏更加取决于词库的优劣,尤其是在专业词语密集的工业文本分析场景,分析人员将不得不在专业词库建设中投入更多的时间精力。


江湖人称“闯哥”,闷骚型男,隐形麦霸,自动化专业博士,大数据分析攻城狮,满腔工业情怀及matlab/R数据建模与分析经验。


参考文献

[1] jiebaR 中文分词, http://qinwenfeng.com/jiebaR/
[2] jiebaR中文分词——R的灵活,C的效率, https://cos.name/2014/11/jiebar-text-segmentation/#more-10373
[3] Rwordseg中文分词, http://jianl.org/cn/R/Rwordseg.html
[4] 数学之美, 人民邮电出版社, 吴军


以上是关于上车 | R语言中文分词10分钟快速入门的主要内容,如果未能解决你的问题,请参考以下文章

干货|10分钟快速入门PyTorch 词向量

Dva快速入门,5分钟入门10分钟精通

[易学易懂系列|rustlang语言|零基础|快速入门|(17)|装箱crates]

快速入门:十分钟学会Python

快速入门:十分钟学会Python

快速入门:十分钟学会Python