Python中的結巴分詞初探

勿在浮沙築高臺LS發表於2017-02-15

python中的結巴分詞有如下三種模式:
精確模式,試圖將句子最精確地切開,適合文字分析;
全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;
搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞。
主要功能

  1. 分詞

jieba.cut 方法接受三個輸入引數: 需要分詞的字串;cut_all 引數用來控制是否採用全模式;HMM 引數用來控制是否使用 HMM 模型
jieba.cut_for_search 方法接受兩個引數:需要分詞的字串;是否使用 HMM 模型。該方法適合用於搜尋引擎構建倒排索引的分詞,粒度比較細
待分詞的字串可以是 unicode 或 UTF-8 字串、GBK 字串。注意:不建議直接輸入 GBK 字串,可能無法預料地錯誤解碼成 UTF-8
jieba.cut 以及 jieba.cut_for_search 返回的結構都是一個可迭代的 generator,可以使用 for 迴圈來獲得分詞後得到的每一個詞語(unicode),或者用
jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定義分詞器,可用於同時使用不同詞典。jieba.dt 為預設分詞器,所有全域性分詞相關函式都是該分詞器的對映。

2.程式碼示例:

import jieba
seg_list = jieba.cut("我來到北京清華大學", cut_all=True)
print ("Full Mode:", "/ ".join(seg_list))  # 全模式
seg_list = jieba.cut("我來到北京清華大學", cut_all=False)
print ("Default Mode:", "/ ".join(seg_list))  # 精確模式
seg_list = jieba.cut("他來到了網易杭研大廈")  # 預設是精確模式
print (", ".join(seg_list))
seg_list = jieba.cut_for_search("我來到北京清華大學")  # 搜尋引擎模式
print (", ".join(seg_list))

實驗結果:

Full Mode: 我/ 來到/ 北京/ 清華/ 清華大學/ 華大/ 大學
Prefix dict has been built succesfully.
Default Mode: 我/ 來到/ 北京/ 清華大學
他, 來到, 了, 網易, 杭研, 大廈
我, 來到, 北京, 清華, 華大, 大學, 清華大學

開發者可以指定自己自定義的詞典,以便包含 jieba 詞庫裡沒有的詞。雖然 jieba 有新詞識別能力,但是自行新增新詞可以保證更高的正確率
用法: jieba.load_userdict(file_name) # file_name 為檔案類物件或自定義詞典的路徑
詞典格式和 dict.txt 一樣,一個詞佔一行;每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒。file_name 若為路徑或二進位制方式開啟的檔案,則檔案必須為 UTF-8 編碼。
詞頻省略時使用自動計算的能保證分出該詞的詞頻。

相關文章