結巴分詞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文件),

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相關文章索引


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM