【編程課堂】jieba-中文分詞利器

2021-12-23 Crossin的編程教室

0、前言

在之前的文章【編程課堂】詞雲 wordcloud 中,我們曾使用過 jieba 庫,當時並沒有深入講解,所以本次將其單獨列出來詳細講解。

jieba庫是進行中文分詞的利器,根據文檔描述,具有以下特點:

支持三種分詞模式:

支持繁體分詞

支持自定義詞典

本文立足實際需求,提取出部分常用的功能作為講解,內容包括:

1、分詞

中文分詞是 jieba 庫的核心,其下包括常用的 cut() 和 cut_for_search() 函數。
cut() 函數傳入待分詞的字符串,返回一個可迭代的生成器,可使用 for 循環提取或者 list 轉為列表形式。

import jiebastring = '今天天氣特別好,很開心'
result = jieba.cut(string)print(list(result))

結果:

['今天天氣', '特別', '好', ',', '很', '開心']

cut() 函數默認採用精確模式,使用全模式需修改 cut_all 參數為 True
代碼如下:

result = jieba.cut(string,cut_all=True)

結果為:

['今天', '今天天氣', '天天', '天氣', '特別', '好', '', '', '很', '開心']

cut_for_search() 分詞函數採用搜尋引擎模式,該方法適合用於搜尋引擎構建倒排索引的分詞,粒度比較細,通俗來說就是儘可能多的將字符串分割為有效的詞彙。

示例:

string = '今天天氣'res = jieba.cut(string)res2 = jieba.cut_for_search(string)print('使用cut:',list(res))print('使用cut_for_search:',list(res2))

結果:

使用cut: ['今天天氣']使用cut_for_search: ['今天', '天天', '天氣', '今天天氣']

由於採取了不同的分詞策略,所以最後的結果也不一樣,使用哪個需要根據應用場景來選擇。

2、提取詞彙

在處理詞彙時,常常我們會提取出現頻率比較高的關鍵詞,jieba.analyse.extract_tags()具有此功能,它接受 4 個參數

sentence 為待提取的文本

topK 為返回幾個 TF/IDF 權重最大的關鍵詞,默認值為 20

withWeight 為是否一併返回關鍵詞權重值,默認值為 False

allowPOS 僅包括指定詞性的詞,默認值為空,即不篩選

我們以西遊記為例,提取出權重佔比最高的前20個詞彙,代碼如下:

from jieba.analyse
import extract_tags
with open('西遊記.txt','r',errors='ignore')as f:    data = f.read()res = extract_tags(data)print(res)

結果如下:

['行者', '八戒', '師父', '三藏', '唐僧', '大聖',
'沙僧', '妖精', '菩薩', '和尚', '那怪', '那裡',
'長老', '呆子', '徒弟', '怎麼', '不知', '老孫', '國王', '一個']

修改 topK = 10 得到:

['行者', '八戒', '師父', '三藏', '唐僧',
'大聖', '沙僧', '妖精', '菩薩', '和尚']

修改 withWeight = True 得到:

[('行者', 0.14971032916840787), ('八戒', 0.0684495682590684),
('師父', 0.06131338130166949), ('三藏', 0.05296939997015923),
('唐僧', 0.034778382561747076), ('大聖', 0.032424843415734234),
('沙僧', 0.03158331000220929), ('妖精', 0.027699530179843303),
('菩薩', 0.02576333341504996), ('和尚', 0.02426762372832522)]

jieba 只能返回詞彙的權重,而不能返回該詞出現的頻率,所以在一些特定的應用場景下,比如生成詞雲圖,需要頻數時,使用 jieba.cut() 和 collections 下的 Counter 解決起來更方便,關於 Counter參考:【Counter】

3、搜索詞彙位置

jieba 庫也包含了定位詞彙位置的功能,jieba.tokenize() 可以實現此功能,該函數接收字符串,返回一個生成器,包含所有分詞結果以及始末位置,基本用法如下:

import jiebastring = '今天天氣特別好,很開心'
result = jieba.tokenize(string)print(list(result))

結果如下:

[('今天天氣', 0, 4), ('特別', 4, 6), ('好', 6, 7),
(',', 7, 8), ('很', 8, 9), ('開心', 9, 11)]

如果我們只是找到某個特定的詞彙在文中的位置,拿之前的西遊記文本為例,我們去尋找詞彙 「行者」 第一次出現的位置

with open('西遊記.txt','r',errors='ignore')as f:    data = f.read()result = jieba.tokenize(data)
for i in result:
   if '行者' in i:        print(i)
       break

結果:

('行者', 8593, 8595)

如此,就能很方便的找到特定詞彙在文章中出現的位置。

4、小結

以上就是 jieba 庫的常用的方法,該庫還包括詞性標註、並行分詞、命令行分詞、添加字典等等功能。
更詳細的內容參考官方文檔:https://github.com/fxsjy/jieba
對該庫的算法感興趣的同學可參考
jieba分詞的基本思路:
https://segmentfault.com/a/1190000004061791
對Python中文分詞模塊結巴分詞算法過程的理解和分析:http://blog.csdn.net/rav009/article/details/12196623

近期文章推薦閱讀:

喏,你們要的 PyCharm 快速上手指南

給伸手黨的福利:Python 新手引導

只學2個月編程能寫出什麼代碼?他們表示:You can you code!

如何用100行Python代碼做出魔性聲控遊戲「八分音符醬」

數據分析:當趙雷唱民謠時他唱些什麼?

一行代碼掃出「敬業福」

我扒了杜蕾斯的微博

Python 爬蟲爬取美劇網站

今天,你搶到票了嗎?

爆款遊戲《貪吃蛇大作戰》的 Python 實現


歡迎加入

Crossin的編程教室

crossincode.com

新手入門QQ群:522415386

微信請加 crossin11 留言入群(新手/進階)


  請把我們分享給身邊愛學習的小夥伴 :)  

點擊左下角「閱讀原文」,查看更多學習資源

相關焦點

  • jieba分詞-Python中文分詞領域的佼佼者
    1. jieba的江湖地位NLP(自然語言)領域現在可謂是群雄紛爭,各種開源組件層出不窮,其中一支不可忽視的力量便是jieba分詞,號稱要做最好的 Python 中文分詞組件。「最好的」這三個字可不是空穴來風,jieba在開源社區的受歡迎程度非常之高。
  • 中文分詞工具——jieba
    在此介紹中文分詞工具jieba,其特點為:社區活躍、目前github上有19670的star數目功能豐富,支持關鍵詞提取、詞性標註等多語言支持(Python、C++、Go、R等)使用簡單Jieba分詞結合了基於規則和基於統計這兩類方法。
  • jieba - 最好的 Python 中文分詞組件
    # encoding=utf-8import jieba# 全模式seg_list = jieba.cut("結巴中文分詞:做最好的 Python 中文分詞組件", cut_all=True)print("/ ".join(seg_list))# 精確模式,默認seg_list =
  • Jieba.el –在Emacs中使用jieba中文分詞
    jieba.el在Emacs中使用jieba中文分詞眾所周知, Emacs並沒有內置中文分詞系統, 以至於 forward-word 和 backward-word 以及 kill-word 等以單詞為單位的操作只能粗暴的標點符號進行確定所謂」詞彙」, (其實是中文裡的句子
  • Jieba分詞介紹
    文章目錄1,什麼是Jieba分詞2,Jieba分詞原理介紹    1)中文分詞的原理    2)ieba分詞的原理3,Jieba分詞的主要功能
  • 中文分詞庫jieba介紹
    庫是較好的中文分詞詞庫2.jieba庫分詞思想有三步:定義前綴詞典,構建字典樹;生成句子有向圖,路徑規劃輸出最優路徑本文就介紹基於python第三方庫jieba分詞庫,它是比較好的中文分詞詞庫。jieba庫是利用了Tier樹進行高效掃描,Tier樹中文名叫字典樹、前綴樹。它的用途主要是將字符串整合成樹形。
  • jieba中文分詞學習筆記一
    1、中文分詞      在介紹結巴中文分詞前,先簡單介紹一下中文分詞。
  • Python | 教程 jieba中文分詞
    分詞是目前最簡明的中文分詞組件,支持三種分詞模式:精確模式、全模式和搜尋引擎模式,支持簡繁體分詞,支持自定義詞典。安裝軟體包打開 settings,搜索 Project Interpreter,在右邊的窗口選擇 +號,點擊後在搜索框搜索jieba,點擊安裝即可三種分詞模式使用 jieba.lcut 以及 jieba.lcut_for_search 直接返回 list。
  • 一文學會中文Jieba分詞使用方法
    AI遇見機器學習」,選擇「星標」公眾號重磅乾貨,第一時間送達「結巴」中文分詞,做最好的 Python 中文分詞組件。主要功能包括分詞、詞性標註、關鍵詞抽取等。Github地址:https://github.com/fxsjy/jieba支持繁體分詞、支持自定義詞典、支持三種分詞模式:1.分詞# 支持三種分詞模式(默認是精確模式)import jiebasegfull_list = jieba.cut
  • jieba:做最好的 Python 中文分詞組件,了解一下!
    中文分詞與英文分詞有很大的不同,對英文而言,一個單詞就是一個詞,而漢語以字為基本書寫單位,詞語之間沒有明顯的區分標記,需要人為切分。現在開源的中文分詞工具有SnowNLP、THULAC、Jieba和HanLP等,都還在不斷更新和維護過程中。
  • 手把手教你用Jieba做中文分詞
    搜尋引擎模式:在精確模式的基礎上,對長詞再次切分,提高召回率,適用於搜尋引擎分詞。import jiebasent = '中文分詞是文本處理不可或缺的一步!'seg_list = jieba.cut(sent, cut_all=True)print('全模式:', '/ ' .join(seg_list)) seg_list = jieba.cut(sent, cut_all=False)print('精確模式:', '/ '.join(seg_list)) seg_list = jieba.cut
  • 中文分詞-jieba庫知識大全
    jieba.lcut 方法接受三個輸入參數: 1、需要分詞的字符串;2、cut_all 參數用來控制是否採用全模式;3、HMM 參數用來控制是否使用 HMM 模型。返回generator,可for循環獲得分詞後的每個詞>>>seg_list = jieba.cut("我來到北京清華大學", cut_all=True)>>>print("Full Mode: " + "/ ".join(seg_list)) >>>我/ 來到/ 北京/ 清華/ 清華大學/
  • .NET Core 中文分詞組件 jieba.NET Core
    (點擊上方藍字,可快速關注我們)來源:linezerocnblogs.com/linezero/p/jiebanetcore.html.NET Core中文分詞組件jieba.NET Core,由於實際的一些需求,需要做中文分詞。
  • python二級考試備考之 jieba 中文分詞
    0 引言支持 3 種分詞模式:精確模式、全模式、搜尋引擎模式jieba庫的安裝因為 jieba 是一個第三方庫,所有需要我們在本地進行安裝
  • Python分詞庫jieba快速入門
    Python有一個庫名為jieba的中文分詞庫,可以把中文句子切分成一個個的詞語以用於文本分析
  • Python實現jieba分詞
    Python實現jieba分詞【今日知圖】替換r  替換當前字符R  替換當前行光標後的字符0.說在前面1.結巴分詞三種模式2.自定義字典3.動態修改字典4.詞性標註及關鍵字提取5.高級使用6.作者的話0.說在前面微信群討論了jieba,這裡我將學到的
  • jieba分詞詳細介紹
    預計閱讀時間為20分鐘        上一篇文檔已經使用jieba分詞做出雲圖了,但是其中具體的一些東西還是讓人模糊不清,這裡根據官方文檔具體地介紹一下jieba分詞。jieba.cut 方法接受三個輸入參數: 需要分詞的字符串;cut_all 參數用來控制是否採用全模式;HMM 參數用來控制是否使用 HMM 模型;jieba.cut_for_search 方法接受兩個參數:需要分詞的字符串;是否使用 HMM 模型。
  • 手把手教會你使用Python進行jieba分詞
    上周我們分享了詞雲,手把手教你使用Python打造絢麗的詞雲圖,這次我們來看看分詞。我們從之前學習過的wordcloud可以得知它只能進行英文分詞,中文暫不支持,這也正是它美中不足的地方,但是有個模塊正好彌補了這一點,它就是----jieba,中文名結巴,沒錯,你沒聽錯也沒看錯,就是結巴。
  • 分詞|Python最好的中文分詞庫
    jieba庫最出名的功能就是中文分詞,在jieba中提供了三種常用的分詞模式:精確模式:將句子按照最精確的方法進行切分,適合用於進行文本分析;全模式:將句子當中所有可以成詞的詞語都掃描出來,分詞速度很快但容易產生歧義;搜尋引擎模式:在精確模式分詞的基礎上,將長的句子再次進行切分,提高召回率,適用於搜尋引擎的分詞。
  • 常見中文分詞包比較
    1 jiebajieba.cut 方法接受三個輸入參數: 需要分詞的字符串;cut_all 參數用來控制是否採用全模式;HMM 參數用來控制是否使用 HMM 模型jieba.cut_for_search