jieba分詞
jieba分詞可以參考官方提供的github地址:https://github.com/fxsjy/jieba
結巴分詞0.4版本以上支持四種分詞模式:
- 精確模式:試圖將句子最精確地切開,適合文本分析;
- 全模式:把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義
- 搜索引擎模式:在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜索引擎分詞
- paddle模式:利用PaddlePaddle深度學習框架,訓練序列標註(雙向GRU)網絡模型實現分詞。同時支持詞性標註。(應該是百度提供的分詞模型)
結巴的安裝
pip install jieba
# 舊版本升級
pip install jieba --upgrade
# 使用paddle模式:結巴版本大於0.4且安裝paddlepaddle-tiny模塊
pip install paddlepaddle-tiny==1.6.1
結巴的參數設置:
jieba.cut 方法接受四個輸入參數: 需要分詞的字符串;
- cut_all 參數用來控制是否採用全模式;
- HMM 參數用來控制是否使用 HMM 模型;
- use_paddle參數用來控制是否使用paddle模式下的分詞模式
- paddle模式採用延遲加載方式,通過enable_paddle接口安裝paddlepaddle-tiny,並且import相關代碼;
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 爲默認分詞器,所有全局分詞相關函數都是該分詞器的映射。
結巴的測試示例:
# -*- coding:utf-8 -*-
import jieba
jieba.enable_paddle() # 開啓paddle模式
sentences = ["2015年我畢業於西安建築科技大學",
"2015年我畢業於西安科技大學",
"2015年我畢業於西安電子科技大學",
"2015年我畢業於西安建築科技大學",
"2015年我畢業於西安交通大學",
"2015年我畢業於北京大學"]
for sentence in sentences:
# 全模式
words = jieba.cut(sentence, cut_all=True)
print("全模式: %s" % " ".join(words))
words = jieba.cut(sentence, use_paddle=True)
print("新詞模式: %s" % " ".join(words))
# 默認精確模式
words = jieba.cut(sentence)
print("精確模式: %s" % " ".join(words))
# 搜索模式
words = jieba.cut_for_search(sentence)
print("搜索模式: %s" % " ".join(words))
不同模式下的分詞結果:
全模式: 2015 年 我 畢業 於 西安 建築 科技 大學
新詞模式: 2015年 我 畢業 於 西安建築科技大學
精確模式: 2015 年 我 畢業 於 西安 建築 科技 大學
搜索模式: 2015 年 我 畢業 於 西安 建築 科技 大學
全模式: 2015 年 我 畢業 於 西安 科技 大學
新詞模式: 2015年 我 畢業 於 西安科技大學
精確模式: 2015 年 我 畢業 於 西安 科技 大學
搜索模式: 2015 年 我 畢業 於 西安 科技 大學
全模式: 2015 年 我 畢業 於 西安 西安電子科技大學 電子 電子科 電子科技 科技 大學
新詞模式: 2015年 我 畢業 於 西安電子科技大學
精確模式: 2015 年 我 畢業 於 西安電子科技大學
搜索模式: 2015 年 我 畢業 於 西安 電子 科技 大學 電子科 西安電子科技大學
全模式: 2015 年 我 畢業 於 西安 建築 科技 大學
新詞模式: 2015年 我 畢業 於 西安建築科技大學
精確模式: 2015 年 我 畢業 於 西安 建築 科技 大學
搜索模式: 2015 年 我 畢業 於 西安 建築 科技 大學
全模式: 2015 年 我 畢業 於 西安 西安交通 西安交通大學 交通 大學
新詞模式: 2015年 我 畢業 於 西安交通大學
精確模式: 2015 年 我 畢業 於 西安交通大學
搜索模式: 2015 年 我 畢業 於 西安 交通 大學 西安交通大學
全模式: 2015 年 我 畢業 於 北京 北京大學 大學
新詞模式: 2015年 我 畢業 於 北京大學
精確模式: 2015 年 我 畢業 於 北京大學
搜索模式: 2015 年 我 畢業 於 北京 大學 北京大學
從測試的情況中可以簡單的推測:paddle模式對於機構團體名的解析比較準確,而精確模式對部分詞語的解析不太正確,搜索和全模式也是一樣,主要是jieba默認的詞典dict.txt中包含了北京大學和西安交通大學,不包含其他學校的名稱,所以精確模式沒有正確的分詞,需要自定義詞典添加這些詞彙應該就可以正確的切分。