nlp之中文分词原理基础和jieba使用的详细教程
中文分词
一、规则分词
规则分词,是一种机械分词方法,主要是通过维护词典、再切分语句时,将语句的每个字符串与词表进行逐一的匹配,找到切分,否则不切分。
细分主要可以分成:正向最大匹配法、逆向最大匹配法、双向最大匹配。
(1)正向最大匹配法(MM):假设分词词典中的最长的词有j个字符,则用被处理文档的当前字符串的前j个字符作为匹配字段,查找字典。如果字典中存在这样的一个次,则匹配成功,匹配到的字段被切割出来,如果匹配失败,则切掉匹配字段的最后一个字符,对剩下的字串重新进行匹配处理,循环往复,直到匹配成功。循环取下一个j字符串进行匹配,直到文档被扫描完为止。
(2)逆向最大匹配法(RMM):基本原理同MM,不同的是分词切分的方向与MM相反。逆向最大匹配法,从被处理的文档的末端开始匹配扫描,每次取最末端的j个字符。由于汉语正结构较多,所以逆向可以适当的提高准确度。
(3)双向最大匹配法(BDMM):将MM与RMM得到的分词结果进行比较,然后按照最大的匹配原则,选取词数切分最少的作为结果。
二、统计分词
基于统计的分词方法:给出大量已经分词的文本,利用统计机器学习模型学习词语切分的规律(称为训练),从而实现对未知文本的切分。例如最大概率分词方法和最大熵分词方法等。随着大规模语料库的建立,统计机器学习方法的研究和发展,基于统计的中文分词方法渐渐成为了主流方法。
主要统计模型:N元文法模型(N-gram),隐马尔可夫模型(Hidden Markov Model ,HMM),最大熵模型(ME),条件随机场模型(Conditional Random Fields,CRF)等。
三、中文分词工具Jieba
(一)特点(1)支持三种分词模式:
精确模式,试图将句子最精确地切开,适合文本分析;
全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
(2)支持自定义词典
(3)支持繁体分词
(1)分词代码如下,jieba.cut()默认为精确模式
import jieba 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("他来到了网易杭研大厦") # 默认是精确模式 print(", ".join(seg_list))
可以得到结果如下:
(2)添加自定义词典
开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。
添加代码格式: jieba.load_userdict(file_name) # file_name 为文件类对象或自定义词典的路径
添加词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。
如下:
创新办 3 i 云计算 5 凱特琳 nz 台中 jieba.load_userdict(file_name)
(3)关键词提取
常用的有tf-idf(词频-逆文档频率)算法和textrank:
import jieba.analyse content = u'中国特色社会主义是我们党领导的伟大事业,全面推进党的建设新的伟大工程,是这一伟大事业取得胜利的关键所在。党坚强有力,事业才能兴旺发达,国家才能繁荣稳定,人民才能幸福安康。党的十八大以来,我们党坚持党要管党、从严治党,凝心聚力、直击积弊、扶正祛邪,党的建设开创新局面,党风政风呈现新气象。习近平总书记围绕从严管党治党提出一系列新的重要思想,为全面推进党的建设新的伟大工程进一步指明了方向。' # 第一个参数:待提取关键词的文本 # 第二个参数:返回关键词的数量,重要性从高到低排序 # 第三个参数:是否同时返回每个关键词的权重 # 第四个参数:词性过滤,为空表示不过滤,若提供则仅返回符合词性要求的关键词 keywords = jieba.analyse.extract_tags(content, topK=20, withWeight=True, allowPOS=()) for item in keywords: print(item[0], item[1]) # 同样是四个参数,但allowPOS默认为('ns', 'n', 'vn', 'v') # 即仅提取地名、名词、动名词、动词 keywords = jieba.analyse.textrank(content, topK=20, withWeight=True, allowPOS=('ns', 'n', 'vn', 'v')) for item in keywords: print(item[0], item[1])
运行结果:(两种方式分词结果的圈中不一样)
(4)词性标注
jieba在进行中文分词的同时,还可以完成词性标注任务。根据分词结果中每个词的词性,可以初步实现命名实体识别,即将标注为nr的词视为人名,将标注为ns的词视为地名等。所有标点符号都会被标注为x,所以可以根据这个去除分词结果中的标点符号。
import jieba.posseg as pseg words = pseg.cut("我爱北京北京故宫天安门") for word, flag in words: # 格式化模版并传入参数 print('%s, %s' % (word, flag))
运行结果:
我, r 爱, v 北京, ns 北京故宫, ns 天安门, ns
这些是最常用的一些jieba分词示例,详情请参照github结巴分词的地址:
- 使用python 的结巴(jieba)库进行中文分词
- unity3d插件Daikon Forge GUI 中文教程3-基础控件Button和Sprite的使用
- solr6.3与MySQL结合使用的简明教程(五)——中文分词
- 使用Python+jieba和java+庖丁分词在Spark集群上进行中文分词统计
- NLP-处理中文文本时jieba的使用方法
- 使用python jieba库进行中文分词
- node.js零基础详细教程(3):npm包管理、git github的使用
- python使用jieba实现中文分词去停用词方法示例
- Python中文分词--jieba的基本使用
- PS色阶的使用原理详细解说后期入门教程
- unity3d插件Daikon Forge GUI 中文教程-4-基础控件Checkbox和dropdownlis的使用
- Git基础命令的使用——详细教程2
- [置顶] 【python 走进NLP】 NLP 使用jieba分词处理文本
- PYTHON 结巴中文分词工具的基础使用
- python基础===jieba模块,Python 中文分词组件
- 中文分词(1)--NLTK的基础使用
- NLP自然语言处理 jieba中文分词,关键词提取,词性标注,并行分词,起止位置,文本挖掘,NLP WordEmbedding的概念和实现
- 中文分词原理及jieba分词
- NLP之jieba分词原理简析
- Git的基本使用方法(0基础小白也能看懂)详细教程(含视频讲解)