1、精確模式:試圖將句子最精確地分開,適合文本分析
seg_list = jieba.cut(test_text, cut_all=False) seg_list = " ".join(seg_list) print("cut_all=False:", seg_list)
輸出:
cut_all=False: 我 今天下午 打籃球
2、全模式:把句子中所有的可以成詞的詞語都掃描出來,速度非常快,但是不能解決歧義
seg_list2 = jieba.cut(test_text, cut_all=True) seg_list2 = " ".join(seg_list2) print("cut_all=True:", seg_list2)
輸出:
cut_all=True: 我 今天 今天下午 天下 下午 打籃球 籃球
我們可以發現,分詞結果中有個 “天下”,顯然這不是我們想要的詞語,這屬於噪聲詞。
3、搜索引擎模式:在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜索引擎分詞
seg_list3 = jieba.cut_for_search(test_text) seg_list3 = " ".join(seg_list3) print("cut_for_search:", seg_list3)
輸出:
cut_for_search: 我 今天 天下 下午 今天下午 籃球 打籃球
命令行進行分詞
python -m jieba input.txt > output.txt
詞性分析
import jieba.posseg as posseg text = "征戰四海只為今日一勝,我不會再敗了。" # generator形式形如pair(‘word’, ‘pos’)的結果 seg = posseg.cut(text) print([se for se in seg]) # list形式的結果 seg = posseg.lcut(text) print(seg)
[pair('征戰', 'v'), pair('四海', 'ns'), pair('只', 'd'), pair('為', 'p'), pair('今日', 't'), pair('一', 'm'), pair('勝', 'v'), pair(',', 'x'), pair('我', 'r'), pair('不會', 'v'), pair('再敗', 'v'), pair('了', 'ul'), pair('。', 'x')] [pair('征戰', 'v'), pair('四海', 'ns'), pair('只', 'd'), pair('為', 'p'), pair('今日', 't'), pair('一', 'm'), pair('勝', 'v'), pair(',', 'x'), pair('我', 'r'), pair('不會', 'v'), pair('再敗', 'v'), pair('了', 'ul'), pair('。', 'x')]
關鍵詞抽取
關鍵詞抽取有兩種算法,基於TF-IDF和基於TextRank:
import jieba.analyse as analyse text = "征戰四海只為今日一勝,我不會再敗了。" # TF-IDF tf_result = analyse.extract_tags(text, topK=5) # topK指定數量,默認20 print(tf_result) # TextRank tr_result = analyse.textrank(text, topK=5) # topK指定數量,默認20 print(tr_result)
['一勝', '再敗', '征戰', '四海', '今日'] ['一勝', '再敗', '征戰', '四海', '今日']
完整用法
分詞
jieba分詞有三種不同的分詞模式:精確模式、全模式和搜索引擎模式:
jieba.cut(sentence,cut_all=False,HMM=True) # 精確模式 jieba.cut(sentence,cut_all=True,HMM=True) # 全模式 jieba.cut_for_search (sentence, HMM=True) # 搜索引擎模式
對應的,函數前加l即是對應得到list結果的函數:
jieba.lcut(sentence,cut_all=False,HMM=True) # 精確模式 jieba.lcut(sentence,cut_all=True,HMM=True) # 全模式 jieba.lcut_for_search (sentence, HMM=True) # 搜索引擎模式
sentence = "征戰四海只為今日一勝,我不會再敗了。" #---------------result---------------- '今天天氣 真 好' # 精確模式 '今天 今天天氣 天天 天氣 真好' # 全模式 '今天 天天 天氣 今天天氣 真 好' # 搜索引擎模式
精確模式是最常用的分詞方法,全模式會將句子中所有可能的詞都列舉出來,搜索引擎模式則適用於搜索引擎使用。具體的差別可在下一節工作流程的分析中詳述。
在上述每個函數中,都有名為HMM的參數。這一項表示是否在分詞過程中利用HMM進行新詞發現。關於HMM,本文附錄中將簡述相關知識。
另外分詞支持自定義字典,詞典格式和 dict.txt 一樣,一個詞占一行;每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒。
具體使用方法為:
jieba.load_userdict(file_name) # 載入自定義詞典 jieba.add_word(word, freq=None, tag=None) # 在程序中動態修改詞典 jieba.del_word(word) jieba.suggest_freq(segment, tune=True) # 調節單個詞語的詞頻,使其能/不能被分詞開
關鍵詞抽取
關鍵詞抽取的兩個函數的完整參數為:
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=(), withFlag=False) # topK 表示返回最大權重關鍵詞的個數,None表示全部 # withWeight表示是否返回權重,是的話返回(word,weight)的list # allowPOS僅包括指定詞性的詞,默認為空即不篩選。 jieba.analyse.textrank(self, sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'), withFlag=False) # 與TF-IDF方法相似,但是注意allowPOS有默認值,即會默認過濾某些詞性。
並行分詞
可以通過
jieba.enable_parallel(4) # 開啟並行分詞模式,參數為並行進程數,默認全部 jieba.disable_parallel() # 關閉並行分詞模式
來打開或關閉並行分詞功能。
個人感覺一般用不到,大文件分詞需要手動實現多進程並行,句子分詞也不至於用這個。