jieba分詞的幾種形式


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() # 關閉並行分詞模式

來打開或關閉並行分詞功能。
個人感覺一般用不到,大文件分詞需要手動實現多進程並行,句子分詞也不至於用這個。


免責聲明!

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



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