jieba中文分词学习笔记一

1、中文分词

      在介绍结巴中文分词前,先简单介绍一下中文分词。中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。

    最常见的分词算法可以分为三大类:基于字符串匹配的分词方法、基于理解的分词方法、基于统计的分词方法

  • 基于字符串匹配的分词方法:这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)

    1)正向最大匹配法(由左到右的方向)

   2)逆向最大匹配法(由右到左的方向):

   3)最少切分(使每一句中切出的词数最小)

   4)双向最大匹配法(进行由左到右、由右到左两次扫描)

  • 基于理解的分词方法:这种分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。它通常包括三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段。
  • 基于统计的分词方法:给出大量已经分词的文本,利用统计机器学习模型学习词语切分的规律(称为训练),从而实现对未知文本的切分。例如最大概率分词方法和最大熵分词方法等。随着大规模语料库的建立,统计机器学习方法的研究和发展,基于统计的中文分词方法渐渐成为了主流方法。

2、结巴中文分词简介

   1)支持三种分词模式:

  • 精确模式:将句子最精确的分开,适合文本分析
  • 全模式:句子中所有可以成词的词语都扫描出来,速度快,不能解决歧义
  • 搜索引擎模式:在精确的基础上,对长词再次切分,提高召回

   2)支持繁体分词

   3)支持自定义词典

   4)基于Trie树结构实现高效的词图扫描,生成句子汉字所有可能成词情况所构成的有向无环图(DAG)

   5)  采用了动态规划查找最大概率路径,找出基于词频的最大切分组合

   6)对于词库中不存在的词,也就是未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法

3、结巴分词的具体流程图

jieba中文分词学习笔记一_第1张图片

5、结巴使用方法

import os
import sys

os.system('tar xvzf jieba.tgz > /dev/null')

reload(sys)
sys.setdefaultencoding('utf-8')

import sys
sys.path.append("./")

import jieba
import jieba.posseg
import jieba.analyse

for  line in sys.stdin:
    ss = line.strip().split('\t')
    if len(ss) != 2:
        continue
    music_id = ss[0].strip()
    music_name = ss[1].strip()

    #seg_list = jieba.cut(music_name,cut_all=False)
    #print '\t'.join([music_id,music_name, ' '.join(seg_list)])
    result_list = []
    for x,w in jieba.analyse.extract_tags(music_name, withWeight=True):
        result_list.append(':'.join([x, str(round(w,3))]))
    print music_name +"====>"+' '.join(result_list)


数据格式如下:

jieba中文分词学习笔记一_第2张图片

输出结果如下:

jieba中文分词学习笔记一_第3张图片

6、结巴分词使用补充

结巴分词的语料库来源主要有两个,一个是网上能下载到的1998人民日报的切分语料还有一个msr的切分语料。另一个是我自己收集的一些txt小说,用ictclas把他们切分(可能有一定误差)。 然后用python脚本统计词频。

jieba分词的默认语料库选择看起来满随意的,作者也吐槽高质量的语料库不好找,所以如果需要在生产环境使用jieba分词,尽量自己寻找一些高质量的语料库来做训练集。

这次讲解就到这里了,接下来会对结巴里的源码和使用到的一些经典算法作进一步的分析和讲解

你可能感兴趣的:(数据挖掘,大数据,算法)