下面将分别应用R和python对jieba分词器在中文分词、词性标注和关键词提取领域的应用进行比较。
R实现
通过函数worker()来初始化分词引擎,使用segment()进行分词。有四种分词模式:最大概率法(MP)、隐马尔科夫模型(HMM)、混合模型(Mix)及索引模型(query),默认为混合模型。具体可查看help(worker).
#install.packages('jiebaR')library(jiebaR)mixseg <- worker()segment( "这是一段测试文本" , mixseg ) #或者用以下 *** 作mixseg['这是一段测试文本']mixseg <= "这是一段测试文本"
python实现
python中需安装jieba库,运用jieba.cut实现分词。cut_all参数为分词类型,默认为精确模式。
import jiebaseg_list = jieba.cut(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 jieba.posseg as psegwords = pseg.cut("我爱北京天安门")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市饮用水污染事故的发生发晌游展和处置等方面内容。讲座后各相关单位同志与奚传武教授就生活饮用水在线监测系统、美国水污染事件的处置方式、生活饮用水老旧管网改造、如何有效减少消毒副产物以及美国涉水产品和二次供水单位的监管模式等问题进行了探讨和交流。本次交流会是我市生活饮坦谨橘用水卫生管理工作洽商机制运行以来的又一次新尝试,也为我市卫生计生综合监督部门探索生活饮用水卫生安全管理模式及突发水污染事件的应对措施开拓了眼界和思路。"#结果:# 48.8677 23.4784 22.1402 20.326 18.5354 # "饮用水" "Flint" "卫生" "水污染" "生活"
python实现
python实现关键词提取可运用TF-IDF方法和TextRank方法。allowPOS参数为限定范围词性类型。
#关键词提取import jieba.analysecontent = u'会议邀请到美国密歇根大学(University of Michigan, Ann Arbor)环境健康科学系副教授奚传武博士作题为“Multibarrier approach for safe drinking waterin the US : Why it failed in Flint”的学术讲座,介绍美国密歇根Flint市饮用水污染事故的发生发展和处置等方面内容。讲座后各相关单位同志与奚传武教授就生活饮用水在线监测系统、美国水污染事件的处置方式、生活饮用水老旧管网改造、如何有效减少消毒副产物以及美国涉水产品和二次供水单位的监管模式等问题进行了探讨和交流。本次交流会是我市生活饮用水卫生管理工作洽商机制运行以来的又一次新尝试,也为我市卫生计生综合监督部门探索生活饮用水卫生安全管理模式及突发水污染事件的应对措施开拓了眼界和思路。'#基于TF-IDFkeywords = jieba.analyse.extract_tags(content,topK = 5,withWeight = True,allowPOS = ('n','nr','ns'))for item in keywords: print item[0],item[1] #基于TF-IDF结果# 饮用水 0.448327672795# Flint 0.219353532163# 卫生 0.203120821773# 水污染 0.186477211628# 生活 0.170049997544
#基于TextRankkeywords = jieba.analyse.textrank(content,topK = 5,withWeight = True,allowPOS = ('n','nr','ns'))for item in keywords: print item[0],item[1] #基于TextRank结果:# 饮用水 1.0# 美国 0.570564785973# 奚传武 0.510738424509# 单位 0.472841889334# 讲座 0.443770732053
写在文后
自然语言处理(NLP)在数据分析领域有其特殊的应用,在R中除了jiebaR包,中文分词Rwordseg包也非常常用。一般的文本挖掘步骤包括:文本获取(主要用网络爬取)——文本处理(分词、词性标注、删除停用词等)——文本分析(主题模型、情感分析)——分析可视化(词云、知识图谱等)。本文是自然语言处理的第一篇,后续将分别总结下应用深度学习Word2vec进行词嵌入以及主题模型、情感分析的常用NLP方法。
参考资料
Introduction · jiebaR 中文分词 https://qinwenfeng.com/jiebaR/segment.html
知乎:【文本分析】利用jiebaR进行中文分词 https://zhuanlan.zhihu.com/p/24882048
雪晴数据网:全栈数据工程师养成攻略 http://www.xueqing.tv/course/73
搜狗实验室,词性标注应用 http://www.sogou.com/labs/webservice/
【R文本挖掘】中文分词Rwordseg http://blog.163.com/zzz216@yeah/blog/static/162554684201412895732586/
1.下载Ansj的相关jar包要用Ansj进行中文分词,必须先下载Ansj的jar包,下载地址可以参考:https://github.com/NLPchina/ansj_seg
2.程序代码
用Ansj进行中文分词的简单代码如下所示:
import org.ansj.splitWord.analysis.ToAnalysis
public class SplitWordsByAnsj {
public static void main(String[] args) {
String words = "中国是世界四大文明古国之一,有着悠久的历史,距今约5000年前,以中原地区为中心开始出现聚落组织进而成国家和朝代,后历经多次演变和朝代更迭,持续时间较长的朝代有夏、商、周、汉、晋、唐、宋、元、明、清等。中原王朝历史上不断与北方游牧民族交往、征战,众多民族融合成为中华民族。20世纪初辛亥革命后,中国的君主政体退出历史舞台仔念,取而代之的是共和政体。1949年中华人民共和国成立后,在中国大陆建立了人民代表大会制度的政体。中国有着多彩的民俗文化,传统艺术形式有诗词、戏曲、书法和国画等,春节、元宵、清明、端午、中圆戚核秋、重阳等是中国重要的传统节日。"
System.out.println(ToAnalysis.parse(words))
}
}
3.分词结果
例子中对那一段中文的分词结果如下所示橘掘:
[中国, 是, 世界, 四, 大, 文明, 古, 国, 之一, ,, 有着, 悠久, 的, 历史, ,, 距, 今, 约, 5000, 年前, ,, 以, 中原, 地区, 为, 中心, 开始, 出现, 聚落, 组织, 进而, 成, 国家, 和, 朝代, ,, 后, 历经, 多次, 演变, 和, 朝代, 更迭, ,, 持续, 时间, 较, 长, 的, 朝代, 有, 夏, 、, 商, 、, 周, 、, 汉, 、, 晋, 、, 唐, 、, 宋, 、, 元, 、, 明, 、, 清, 等, 。, 中原, 王朝, 历史, 上, 不断, 与, 北方, 游牧, 民族, 交往, 、, 征战, ,, 众多, 民族, 融合, 成为, 中华民族, 。, 20, 世纪, 初, 辛亥革命, 后, ,, 中国, 的, 君主, 政体, 退出, 历史, 舞台, ,, 取而代之, 的, 是, 共和, 政体, 。, 1949年, 中华人民共和国, 成立, 后, ,, 在, 中国, 大陆, 建立, 了, 人民, 代表大会, 制度, 的, 政体, 。, 中国, 有着, 多, 彩, 的, 民俗, 文化, ,, 传统, 艺术, 形式, 有, 诗词, 、, 戏曲, 、, 书法, 和, 国画, 等, ,, 春节, 、, 元宵, 、, 清明, 、, 端午, 、, 中秋, 、, 重阳, 等, 是, 中国, 重要, 的, 传统, 节日, 。]
在maven的pom.xml文件中添加以下前键依赖关系:
<dependency><groupId>org.ansj</groupId>
局敏 <慧腊巧artifactId>ansj_seg</artifactId>
<version>5.1.1</version>
</dependency>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)