Jieba学习笔记

Jieba学习笔记

一、中文分词

  中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。最常见的分词算法可以分为三大类:基于字符串匹配的分词方法、基于理解的分词方法、基于统计(机器学习)的分词方法。

  • 基于字符串匹配的分词方法:这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功
    • 正向最大匹配法
    • 逆向最大匹配法
    • 最少切分
    • 双向最大匹配法——进行由左到右、由右到左两次扫描
  • 基于理解的分词方法:通过让计算机模拟人对句子的理解,达到识别词的效果。其基本思想是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象,通常包括三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统获得有关词、句子等的句法和语义信息来对分词歧义进行判断。这种分词方法需要使用大量的语言知识和信息。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段。
  • 基于统计的分词方法:给出大量已经分词的文本,利用统计机器学习模型学习词语切分的规律(称为训练),从而实现对未知文本的切分。例如最大概率分词方法和最大熵分词方法等。随着大规模语料库的建立,统计机器学习方法的研究和发展,基于统计的中文分词方法渐渐成为了主流方法。

二、Jieba的特点

  • 1.支持四种分词模式:
      1. 精确模式,试图将句子最精确地切开,适合文本分析;
      1. 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
      1. 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
      1. paddle模式,利用PaddlePaddle深度学习框架,训练序列标注(双向GRU)网络模型实现分词。同时支持词性标注。
  • 2.支持繁体分词
  • 3.支持自定义词典
  • 4.MIT授权协议

三、Jieba的算法

  • 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)
  • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
  • 对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法

在这里插入图片描述

四、Jieba的功能

4.1 分词

  待分词的字符串可以是unicode或UTF-8字符串、GBK字符串。直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8。

  • jieba.cut方法接受三个输入参数:需要分词的字符串;cut_all用来控制是否采用全模式;HMM用来控制是否使用HMM模型。
  • jieba.cut_for_search方法接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细。
  • jieba.cut以及jieba.cut_for_search返回的结构都是一个可迭代的generator,可以使用for循环来获得分词后得到的每一个词语(unicode),或者用jieba.lcut以及jieba.lcut_for_search直接返回list。
  • jieba.Tokenizer(dictionary=DEFAULT_DICT)新建自定义分词器,可用于同时使用不同词典。jieba.dt为默认分词器,所有全局分词相关函数都是该分词器的映射。
# encoding=utf-8
import jieba

mytext1 = "雁归有时,潮来有汛,惟独明月不再升起。人生是一场梦吗?不,梦醒之后还可以忘却,人生可以忘却吗?人生是一部书吗?" \
         "不,书成之后还可以删改,人生可以删改吗?人生从来没有蓝图,度过了人生,才完成了人生。历史从来都是即兴之作。" \
         "而当他成为历史,才被千秋万代喋喋不休地评论。而无论是怎样评论吧,都不能改变它的曾经存在,只有从偶然中寻找必然," \
         "使它顺理成章。历史是人的足迹。但并不是所有留下足迹的人都敢于正视自己的历史。历史是无法重写的。"
mytext2 = "韩新月认为,追求美是人的本性,我相信人们本能地而非理智地向往纯美纯情的意境,美不必强迫人接受。不然,“落霞与孤鹜齐飞," \
          "秋水共长天一色”那样的前人名句也就不会这样传之久远,深入人心。"

for text in [mytext1,mytext2]:
    print("原文本:" + text)

    seg_list = jieba.cut(text, cut_all=True)
    print("全模式:" + "/ ".join(seg_list))  # 全模式

    seg_list = jieba.cut(text, cut_all=False)
    print
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值