• 结巴分词1--结巴分词系统介绍


    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明。谢谢!

    0 起因

    由于博主之前做了一些文本挖掘的项目,在项目中或多或少的用到了分词模块,对于中文分词,博主一般使用Python开发的jieba分词组件。最近,博主想阅读一些开源系统,就先从jieba开始,一是因为jieba实现了NLP的一些基础技术,例如分词、词性标注;二是因为想学习学习大神们的编码规范。

    1 jieba系统简介

    "结巴"中文分词:做最好的Python中文分词组件。

    特点:

    1. 支持三种分词模式
    2. 支持繁体分词
    3. 支持自定义词典
    4. MIT授权协议

    涉及算法:

    1. 基于前缀词典实现词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG),采用动态规划查找最大概率路径,找出基于词频的最大切分组合;
    2. 对于未登录词,采用了基于汉字成词能力的 HMM模型,采用Viterbi算法进行计算;
    3. 基于Viterbi算法的词性标注;
    4. 分别基于tfidf和textrank模型抽取关键词;

    2 jieba系统框架

    jieba分词系统,主要实现三个模块,

    1. 分词
    2. 词性标注
    3. 关键词抽取

    其中,分词有三种模式,默认是精确模式,

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

    如下为jieba代码结构及子目录与相应功能的对应;

    .
    ├── analyse # 短语抽取模块
    │   ├── analyzer.py
    │   ├── idf.txt
    │   ├── __init__.py
    │   ├── textrank.py # TextRank方法
    │   └── tfidf.py # TFIDF方法
    ├── _compat.py
    ├── dict.txt
    ├── finalseg # 基于HMM的切分方法
    │   ├── __init__.py
    │   ├── prob_emit.p
    │   ├── prob_emit.py
    │   ├── prob_start.p
    │   ├── prob_start.py
    │   ├── prob_trans.p
    │   └── prob_trans.py
    ├── __init__.py # 基于DAG的切分方法
    ├── __main__.py
    └── posseg # 词性标注模块
        ├── char_state_tab.p
        ├── char_state_tab.py
        ├── __init__.py
        ├── prob_emit.p
        ├── prob_emit.py
        ├── prob_start.p
        ├── prob_start.py
        ├── prob_trans.p
        ├── prob_trans.py
        └── viterbi.py
    

    jieba分词系统的总体代码量,

    cloc-1.64.exe jieba
          74 text files.
          73 unique files.
          23 files ignored.
    
    http://cloc.sourceforge.net v 1.64  T=14.27 s (4.1 files/s, 64392.8 lines/s)
    -------------------------------------------------------------------------------
    Language                     files          blank        comment           code
    -------------------------------------------------------------------------------
    Pascal                           7              0              0         723708
    Python                          52            475            147         194347
    -------------------------------------------------------------------------------
    SUM:                            59            475            147         918055
    -------------------------------------------------------------------------------
    

    jieba分词系统的代码量(去除finalseg和posseg目录下存储数据的py文件),

    CodeEclipse WorkSpace>cloc-1.64.exe jieba
          59 text files.
          58 unique files.
          22 files ignored.
    
    http://cloc.sourceforge.net v 1.64  T=0.09 s (508.9 files/s, 41989.4 lines/s)
    -------------------------------------------------------------------------------
    Language                     files          blank        comment           code
    -------------------------------------------------------------------------------
    Python                          45            472            147           3094
    -------------------------------------------------------------------------------
    SUM:                            45            472            147           3094
    -------------------------------------------------------------------------------
    

    jieba分词系统去除的代码量(去除test目录,主要用于功能测试),

    cloc-1.64.exe jieba
    22 text files.
    21 unique files.
    17 files ignored.

    http://cloc.sourceforge.net v 1.64  T=0.04 s (295.7 files/s, 40211.7 lines/s)
    -------------------------------------------------------------------------------
    Language                     files          blank        comment           code
    -------------------------------------------------------------------------------
    Python                          11            237            115           1144
    -------------------------------------------------------------------------------
    SUM:                            11            237            115           1144
    -------------------------------------------------------------------------------
    

    最终,实现基本功能的代码量在一千行左右,这个代码量非常适合初读开源系统源码的开发者,另外也说明jieba分词系统的作者写的代码非常简洁。

    3 jieba分词源码阅读系列

    jieba分词源码阅读系列的相关链接如下所示,

    1.jieba分词系统整体介绍,结巴分词1--结巴分词系统介绍

    2.jieba分词系统中基于前缀词典构建有向无环图,然后利用动态规划求解最大概率路径,实现分词,结巴分词2--基于前缀词典及动态规划实现分词

    3.jieba分词系统中基于HMM模型对未登录词进行分词,结巴分词3--基于汉字成词能力的HMM模型识别未登录词

    4.jieba分词系统中基于有向无环图及HMM模型实现词性标注,结巴分词4--词性标注

    5.jieba分词系统中基于TF-IDF和TextRank算法实现关键词抽取,结巴分词5--关键词抽取

    4 Reference

    1.对Python中文分词模块结巴分词算法过程的理解和分析

    2.jieba中文分词源码分析(一)

    3.annotated_jieba

    4.隐马尔可夫模型(HMM)攻略

    5.HMM相关文章索引

  • 相关阅读:
    ubuntu系统安装初始化脚本
    21_多线程
    20_IO
    19_异常
    18_集合
    17_内部类和常用类
    16_接口
    15_abstract,static,final
    14_面向对象
    13_数组
  • 原文地址:https://www.cnblogs.com/zhbzz2007/p/6076246.html
Copyright © 2020-2023  润新知