(轉https://blog.csdn.net/gzmfxy/article/details/78994396)
中文分詞是中文文本處理的一個基礎步驟,也是中文人機自然語言交互的基礎模塊,在進行中文自然語言處理時,通常需要先進行分詞。本文詳細介紹現在非常流行的且開源的分詞器結巴jieba分詞器,並使用python實戰介紹。
jieba分詞算法使用了基於前綴詞典實現高效的詞圖掃描,生成句子中漢字所有可能生成詞情況所構成的有向無環圖(DAG), 再采用了動態規划查找最大概率路徑,找出基於詞頻的最大切分組合,對於未登錄詞,采用了基於漢字成詞能力的HMM模型,使用了Viterbi算法。(這里面很多概念小修之前的文章都有陸續講過哦)
jieba分詞支持三種分詞模式:
1. 精確模式, 試圖將句子最精確地切開,適合文本分析:
2. 全模式,把句子中所有的可以成詞的詞語都掃描出來,速度非常快,但是不能解決歧義;
3. 搜索引擎模式,在精確模式的基礎上,對長詞再詞切分,提高召回率,適合用於搜索引擎分詞。
jiaba分詞還支持繁體分詞和支持自定義分詞。
1jieba分詞器安裝
在python2.x和python3.x均兼容,有以下三種:
1. 全自動安裝:easy_install jieba 或者 pip install jieba / pip3 install jieba
2. 半自動安裝: 先下載,網址為: http://pypi.python.org/pypi/jieba, 解壓后運行: python setup.py install
3. 手動安裝: 將jieba目錄放置於當前目錄或者site-packages目錄,
jieba分詞可以通過import jieba 來引用
2jieba分詞主要功能
先介紹主要的使用功能,再展示代碼輸出。jieba分詞的主要功能有如下幾種:
1. jieba.cut:該方法接受三個輸入參數:需要分詞的字符串; cut_all 參數用來控制是否采用全模式;HMM參數用來控制是否適用HMM模型
2. jieba.cut_for_search:該方法接受兩個參數:需要分詞的字符串;是否使用HMM模型,該方法適用於搜索引擎構建倒排索引的分詞,粒度比較細。
3. 待分詞的字符串可以是unicode或者UTF-8字符串,GBK字符串。注意不建議直接輸入GBK字符串,可能無法預料的誤解碼成UTF-8,
4. jieba.cut 以及jieba.cut_for_search返回的結構都是可以得到的generator(生成器), 可以使用for循環來獲取分詞后得到的每一個詞語或者使用
5. jieb.lcut 以及 jieba.lcut_for_search 直接返回list
6. jieba.Tokenizer(dictionary=DEFUALT_DICT) 新建自定義分詞器,可用於同時使用不同字典,jieba.dt為默認分詞器,所有全局分詞相關函數都是該分詞器的映射。
代碼演示:

其中下面的是輸出結果。
3jieba分詞器添加自定義詞典
jieba分詞器還有一個方便的地方是開發者可以指定自己的自定義詞典,以便包含詞庫中沒有的詞,雖然jieba分詞有新詞識別能力,但是自行添加新詞可以保證更高的正確率。
使用命令:
jieba.load_userdict(filename) # filename為自定義詞典的路徑
在使用的時候,詞典的格式和jieba分詞器本身的分詞器中的詞典格式必須保持一致,一個詞占一行,每一行分成三部分,一部分為詞語,一部分為詞頻,最后為詞性(可以省略),用空格隔開。下面其中userdict.txt中的內容為小修添加的詞典,而第二部分為小修沒有添加字典之后對text文檔進行分詞得到的結果,第三部分為小修添加字典之后分詞的效果。

4利用jieba進行關鍵詞抽取
這里介紹基於TF-IDF算法的關鍵詞抽取(干貨|詳解自然語言處理之TF-IDF模型和python實現), 只有關鍵詞抽取並且進行詞向量化之后,才好進行下一步的文本分析,可以說這一步是自然語言處理技術中文本處理最基礎的一步。
jieba分詞中含有analyse模塊,在進行關鍵詞提取時可以使用下列代碼

當然也可以使用基於TextRank算法的關鍵詞抽取:

這里舉一個例子,分別使用兩種方法對同一文本進行關鍵詞抽取,並且顯示相應的權重值。

5jieba分詞的詞性標注
jieba分詞還可以進行詞性標注,標注句子分詞后每個詞的詞性,采用和ictclas兼容的標記法,這里知識簡單的句一個列子。

6jieba分詞並行分詞
jieba分詞器如果是對於大的文本進行分詞會比較慢,因此可以使用jieba自帶的並行分詞功能進行分詞,其采用的原理是將目標文本按照行分割后,把各行文本分配到多個Python進程並行分詞,然后歸並結果,從而獲得分詞速度可觀的提升。
該過程需要基於python自帶的multiprocessing模塊,而且目前暫時不支持windows. 在使用的時候,只需要在使用jieba分詞導入包的時候同時加上下面任意一個命令:

在第五步進行關鍵詞抽取並且計算相應的TF-iDF就可以進行后續的分類或者預測,推薦的相關步驟,后面小修會陸續介紹。
參考內容:
[1] jieba分詞github介紹文檔:https://github.com/fxsjy/jieba
