文章目录
中文分词是中文自然语言理解的第一步,一个优秀的分词系统取决于足够的语料和完善的模型,这里推荐jieba中文分词,jieba分词开源免费、使用简单、功能丰富,并且支持多种编程语言实现。
jieba提供了3种分词模式:
- 全模式
- 精确模式
- 搜索引擎模式
一、全模式:把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解决歧义
import jieba
#join是split的逆操作
#即使用一个拼接符将一个列表拼成字符串
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
运行结果:
二、精确模式:试图将句子最精确的切开,适合文本分析。
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式
seg_list = jieba.cut("他来到了京东新总部大楼") # 不加cut_all参数默认是精确模式
print(", ".join(seg_list))
运行结果:
三、搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词
seg_list = jieba.cut_for_search("小亮硕士毕业于中国科学技术大学,后在新南威尔士大学深造") # 搜索引擎模式
print(", ".join(seg_list))
四、关键字提取
jieba实现了TF-IDF(TF通过词频,IDF通过逆文本频率指数)和TextRank这两种关键字提取算法。
import jieba.analyse
content = u'绵羊料理是美食区的新垣结羊,料理界的押韵狂魔。她用对待科研的态度对待美食,她探究每一道料理背后的人文故事;反复的尝试,一次次的厨房翻车,只为对每一道料理工序的精益求精。欢快的bgm搭配色彩鲜活的画面,绵羊用美食与视频的双重精致,表达着对生活的最高敬意。'
keywords = jieba.analyse.extract_tags(content, topK=20, withWeight=True, allowPOS=('n', 'nr', 'ns'))
for item in keywords:\
print item[0], item[1]
keywords = jieba.analyse.textrank(content, topK=20, withWeight=True, allowPOS=('ns', 'n', 'vn', 'v'))
for item in keywords:\
print item[0], item[1]
import jieba.posseg as pseg
words = pseg.cut(content)
for word, flag in words:\
print('%s, %s' % (word, flag))
五、总结
中文分词的模型实现主要分为两大类:①基于规则②基于统计
基于规则
是根据一个已有的词典,采用前向最大匹配、后项最大匹配、双向最大匹配等人工设定的规则来进行分词。
基于统计
是从大量人工标注语料中总结词的概率分布以及词之间的常用搭配,使用有监督学习训练分词模型。
jieba分词结合了基于规则
和基于统计
两类方法。首先基于前缀词典进行词图扫描,可以快速构建包含全部分词结果的有向无环图,这个图中包含多条分词路径;基于语料标注,使用动态规划的方法可以找出最大概率路径,并将其作为最终的分词结果。