自然语言处理(NLP)是机器学习重要分支之一,主要应用于篇章理解、文本摘要、情感分析、知识图谱、文本翻译等领域。而NLP应用首先是对文本进行分词,当前中文分词器有Ansj、paoding、盘古分词等多种,而最基础的分词器应该属于jieba分词器(比较见下图)。
下面将分别应用R和python对jieba分词器在中文分词、词性标注和关键词提取领域的应用进行比较。
R实现
通过函数worker()来初始化分词引擎,使用segment()进行分词。有四种分词模式:最大概率法(MP)、隐马尔科夫模型(HMM)、混合模型(Mix)及索引模型(query),默认为混合模型。具体可查看help(worker)
#installpackages('jiebaR')library(jiebaR)mixseg <- worker()segment( "这是一段测试文本" , mixseg ) #或者用以下操作mixseg['这是一段测试文本']mixseg <= "这是一段测试文本"
python实现
python中需安装jieba库,运用jiebacut实现分词。cut_all参数为分词类型,默认为精确模式。
import jiebaseg_list = jiebacut(u"这是一段测试文本",cut_all = False)print("Full mode: "+ ","join(seg_list)) #默认精确模式
无论是R还是python都为utf—8编码。
R实现
可以使用<=tagger 或者tag 来进行分词和词性标注,词性标注使用混合模型模型分词,标注采用和 ictclas 兼容的标记法。
words = "我爱北京天安门"tagger = worker("tag") #开启词性标注启发器tagger <= words # r v ns ns # "我" "爱" "北京" "天安门"
python实现
#词性标注import jiebaposseg as psegwords = psegcut("我爱北京天安门")for word,flag in words: print('%s, %s' %(word,flag))
R实现
R关键词提取使用逆向文件频率(IDF)文本语料库,通过worker参数“keywords”开启关键词提取启发器,topn参数为关键词的个数。
keys = worker("keywords",topn = 5, idf = IDFPATH)keys <= "会议邀请到美国密歇根大学(University of Michigan, Ann Arbor)环境健康科学系副教授奚传武博士作题为“Multibarrier approach for safe drinking waterin the US : Why it failed in Flint”的学术讲座,介绍美国密歇根Flint市饮用水污染事故的发生发展和处置等方面内容。讲座后各相关单位同志与奚传武教授就生活饮用水在线监测系统、美国水污染事件的处置方式、生活饮用水老旧管网改造、如何有效减少消毒副产物以及美国涉水产品和二次供水单位的监管模式等问题进行了探讨和交流。本次交流会是我市生活饮用水卫生管理工作洽商机制运行以来的又一次新尝试,也为我市卫生计生综合监督部门探索生活饮用水卫生安全管理模式及突发水污染事件的应对措施开拓了眼界和思路。"#结果:# 488677 234784 221402 20326 185354 # "饮用水" "Flint" "卫生" "水污染" "生活"
python实现
python实现关键词提取可运用TF-IDF方法和TextRank方法。allowPOS参数为限定范围词性类型。
#关键词提取import jiebaanalysecontent = u'会议邀请到美国密歇根大学(University of Michigan, Ann Arbor)环境健康科学系副教授奚传武博士作题为“Multibarrier approach for safe drinking waterin the US : Why it failed in Flint”的学术讲座,介绍美国密歇根Flint市饮用水污染事故的发生发展和处置等方面内容。讲座后各相关单位同志与奚传武教授就生活饮用水在线监测系统、美国水污染事件的处置方式、生活饮用水老旧管网改造、如何有效减少消毒副产物以及美国涉水产品和二次供水单位的监管模式等问题进行了探讨和交流。本次交流会是我市生活饮用水卫生管理工作洽商机制运行以来的又一次新尝试,也为我市卫生计生综合监督部门探索生活饮用水卫生安全管理模式及突发水污染事件的应对措施开拓了眼界和思路。'#基于TF-IDFkeywords = jiebaanalyseextract_tags(content,topK = 5,withWeight = True,allowPOS = ('n','nr','ns'))for item in keywords: print item[0],item[1] #基于TF-IDF结果# 饮用水 0448327672795# Flint 0219353532163# 卫生 0203120821773# 水污染 0186477211628# 生活 0170049997544
#基于TextRankkeywords = jiebaanalysetextrank(content,topK = 5,withWeight = True,allowPOS = ('n','nr','ns'))for item in keywords: print item[0],item[1] #基于TextRank结果:# 饮用水 10# 美国 0570564785973# 奚传武 0510738424509# 单位 0472841889334# 讲座 0443770732053
写在文后
自然语言处理(NLP)在数据分析领域有其特殊的应用,在R中除了jiebaR包,中文分词Rwordseg包也非常常用。一般的文本挖掘步骤包括:文本获取(主要用网络爬取)——文本处理(分词、词性标注、删除停用词等)——文本分析(主题模型、情感分析)——分析可视化(词云、知识图谱等)。本文是自然语言处理的第一篇,后续将分别总结下应用深度学习Word2vec进行词嵌入以及主题模型、情感分析的常用NLP方法。
参考资料
Introduction · jiebaR 中文分词 https://qinwenfengcom/jiebaR/segmenthtml
知乎:文本分析利用jiebaR进行中文分词 https://zhuanlanzhihucom/p/24882048
雪晴数据网:全栈数据工程师养成攻略 http://wwwxueqingtv/course/73
搜狗实验室,词性标注应用 http://wwwsogoucom/labs/webservice/
R文本挖掘中文分词Rwordseg http://blog163com/zzz216@yeah/blog/static/162554684201412895732586/
查看帮助
jiebaR中文分词文档
这个很详细很强大
还有微信上看到有人的分享文章也不错: http://mpweixinqqcom/s/PJ5bCtodjxikcSbynEZ8Dw
本文就是在参照以上资料写的
两个重要函数:
worker 是最重要的一个函数。
函数使用方法(获取帮助):
语法:
worker() 用于新建分词引擎。
worker() 有很多参数。
指分词引擎类型,这个包括mix,mp,hmm,full,query,tag,simhash,keyword,分别指混合模型,支持最大概率,隐形马尔科夫模型,全模式,索引模式,词性标注,文本Simhash相似度比较,关键字提取。
具体为:
mp(最大概率模型)- 基于词典和词频
hmm(HMM模型)- 基于HMM模型,可以发现词典中没有的词
mix(混合模型)-先用mp分,mp分完调用hmm再把剩余的可能成词的单字分出来
query(索引模型)-mix基础上,对大于一定长度的词再进行一次切分
tag(标记模型)-词性标记,基于词典的
keywords(关键词模型)- tf-idf抽 关键词
simhash(Simhash) - 在关键词的基础上计算simhash
系统词典。词库路径,默认为jiebaR::DICTPATH。
打开jiebadictutf8,如下(包括词、词频、词性标注三列):
看了这个,大概就有了一个直观的认识。
也可以读取前n条查看:
用户词典中词的词频,默认为"max",系统词典的最大值。
还可以选择"min"最小值或"median"中位数
IDF 词典,关键词提取使用。
关键词提取使用的停止词库。
分词时也可以使用,但是分词时使用的对应路径不能为默认的jiabaR::STOPPATH
是否将文件分词结果写入文件,默认为否。只在输入内容为文件路径时,本参数才会被使用。本参数只对分词和词性标注有效。
关键词的个数,默认为5,可以用于simhash和keyword分词类型
另外一个函数是 segment
它有三个参数, code 好比任务, jiebar 就是一个worker, mod 参数告诉worker怎么做,也就是什么分词引擎分词。
1分词
这个地方,"很早" "就"是这样的。它是"很" "早就"的。
2添加用户自定义词或词库
这个有两种方法:
使用user参数添加词库
自定义一个词库
zidingyitxt
文件内容:
早早就
很早
注意下哦:
3添加停止词以删除
这里,删除"又"、"的"这样的词
使用worker函数的 stop_word 参数
新建stopwordstxt文件,同上
4统计词频
jiebaR包,提供了一个函数 freq 来自动计算获取词频。
这个函数自动计算了words分词后的词频。
之后就可以用wordcloud2绘制词云(这里词频太少啦)
//
jiebaR包提供了一个 qseg 函数,它也可以分词:
两种使用方法:
5词性标注
词性标注可以使用worker函数的 type 参数。
type默认参数为mix,将它设置为tag。
6提取关键字
把worker函数的参数type设置为 keyword 或 simhash ,使用参数 topn 设置提取关键词的个数,默认为5
jiebaR的大部分功能都可以通过worker函数来实现。
可参考jiebaR的主页:
http://qinwenfengcom/jiebaR/
附上关于worker()参数的英文说明(具体参数使用可以实际操作以下)。
欢迎分享,转载请注明来源:浪漫分享网
评论列表(0条)