欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-01 09:54:38
...

作者: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文件),

Code\Eclipse 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相关文章索引