python Jieba分詞處理詳解【模式,詞庫的添加、刪除,自定義詞庫,失敗處理等】
Jieba(結巴)是一個中文分詞第三方庫,它可以幫助我們將一段中文文本分成一個個獨立的詞語。Jieba具有以下特點:
- 簡單易用:Jieba提供了簡潔的API接口,易于使用和擴展。可以快速地實現(xiàn)中文分詞功能。
- 高效準確:Jieba采用了基于前綴詞典和動態(tài)規(guī)劃算法的分詞方法,能夠高效準確地處理各種中文文本。
- 支持多種分詞模式:Jieba提供了三種分詞模式:精確模式、全模式和搜索引擎模式,可以根據(jù)不同的應用場景選擇合適的模式。
- 支持用戶自定義詞典:Jieba允許用戶自定義詞典,可以根據(jù)實際需要添加新的詞語或調整已有詞語的詞頻和詞性等信息。
- 支持并發(fā)分詞:Jieba采用多進程和協(xié)程的方式實現(xiàn)并發(fā)分詞,可以提高分詞速度和效率。
除了中文分詞功能之外,Jieba還提供了關鍵詞提取、詞性標注、繁體轉簡體、詞語拼音轉換等功能??梢詽M足不同的中文文本處理需求。
1 Jieba的搜索模式
1.1 全模式
全模式會將需要分詞的文本中所有可能的詞語都進行匹配,因此會產生大量的冗余詞語。使用Jieba的全模式,比如我們希望把美國數(shù)據(jù)倉庫巨頭發(fā)布開源模型,公開挑戰(zhàn)ChatGPT這句話進行分詞:
import jieba text = '美國數(shù)據(jù)倉庫巨頭發(fā)布開源模型,公開挑戰(zhàn)ChatGPT' seg_list = jieba.cut(text, cut_all=True) print("/".join(seg_list))
在上述代碼中,cut_all=True
指定了使用全模式進行分詞,"/".join(seg_list)
會將分詞結果以斜杠分隔輸出。這段的輸出結果為:
可以看到分詞結果中,數(shù)據(jù)倉庫被分為了數(shù)據(jù)、倉庫、數(shù)據(jù)倉庫三個獨立的詞語,因此會產生大量的冗余詞語。全模式適合于對文本中所有可能的詞語進行匹配的場景,例如搜索引擎的索引處理、關鍵詞提取等。
1.2 精確模式
精確模式會將需要分詞的文本中可能存在的詞語都進行匹配,但不會產生冗余詞語。使用Jieba的精確模式,可以通過以下方式實現(xiàn):
import jieba text = '美國數(shù)據(jù)倉庫巨頭發(fā)布開源模型,公開挑戰(zhàn)ChatGPT' seg_list = jieba.cut(text, cut_all=False) print("/".join(seg_list))
在上述代碼中,cut_all=False
指定了使用精確模式進行分詞。這段的輸出結果為:
可以看到,在精確模式下,Jieba會將數(shù)據(jù)倉庫
作為一個詞語進行匹配,不會產生冗余詞語。精確模式適合于對文本中存在的詞語進行匹配的場景,例如文本分類、情感分析等。精確模式不會產生冗余詞語,因此可以得到準確的分詞結果。
1.3 搜索引擎模式
搜索引擎模式使用了基于前綴匹配算法的正向最大匹配(FMM)和逆向最大匹配(RMM)算法,會對需要分詞的文本進行分詞,并且盡可能多地匹配分詞結果。因此,在分詞時,搜索引擎模式會優(yōu)先匹配較長的詞語。使用Jieba的搜索引擎模式,可以通過以下方式實現(xiàn):
import jieba text = '美國數(shù)據(jù)倉庫巨頭發(fā)布開源模型,公開挑戰(zhàn)ChatGPT' seg_list = jieba.cut_for_search(text) print("/".join(seg_list))
這段函數(shù)的輸出結果為;
由于我們的實例文本過段,在這里的結果與全模式的分詞結果并未表現(xiàn)出區(qū)別。搜索引擎模式適合于對長文本進行分詞的場景,例如自然語言處理、信息檢索等。搜索引擎模式使用了基于前綴匹配算法的正向最大匹配(FMM)和逆向最大匹配(RMM)算法,可以盡可能多地匹配分詞結果,但可能會對一些新詞造成誤判,需要進行進一步的處理和校對。
1.4 分詞結果的形式選擇
正常情況下,分詞結果將會以生成器的形式保存,這意味著,當我們像上面一樣將分詞結果全部打印之后,這個生成器就不能二次使用了。
如果希望以列表的形式報錯結果。可以將生成器轉為list格式:
seg_list = jieba.cut(text) print(type(seg_list)) seg_list = list(seg_list) print(type(seg_list))
也可以直接指定函數(shù)的返回為list,此時我們需要使用函數(shù)lcut
seg_list = jieba.lcut(text) print(type(seg_list))
2 詞庫的添加與刪除
在Jieba中,詞庫是指用于分詞的詞典,Jieba提供了內置的詞典和用戶自定義的詞典。用戶可以通過添加或刪除詞語來定制自己的詞典。
2.1 添加單個詞語
在Jieba中,可以通過調用add_word(word, freq=None, tag=None)
方法來向詞庫中添加單個詞語。其中,word
為需要添加的詞語,freq
為該詞語的詞頻,tag
為該詞語的詞性。例如,假設需要將詞語開源模型
添加到Jieba的詞庫中,可以通過如下代碼實現(xiàn):
import jieba text = '美國數(shù)據(jù)倉庫巨頭發(fā)布開源模型,公開挑戰(zhàn)ChatGPT' jieba.add_word("開源模型") seg_list = jieba.cut(text) print('/'.join(seg_list))
此時,開源模型就被分為一個詞了:
2.2 添加自定義詞典
當需要添加的詞過多時,建議使用添加詞典的方式。自定義詞典可以包含用戶自己添加的詞語及其詞頻和詞性等信息。添加自定義詞典的方法如下:
- 創(chuàng)建一個文本文件,例如
userdict.txt
,用于存儲自定義詞典。每行格式為:詞語 詞頻 詞性。 - 將需要添加的詞語及其詞頻和詞性等信息寫入到
userdict.txt
中,每個詞語一行。 - 調用Jieba的
load_userdict()
方法加載自定義詞典文件。詞典示例如下:
開源模型 10 n 深度學習 8 n
其中,10
和8
為詞語的詞頻,n
為詞語的詞性。之后調用詞典即可。
jieba.load_userdict("userdict.txt")
詞典加入之后,再次進行分詞,詞典中的內容就可以被分出來了。
2.3 詞庫的刪除
在Jieba中,可以通過調用del_word(word)
方法來刪除詞庫中的單個詞語。其中,word
為需要刪除的詞語。剛剛我們在詞典中添加了開源模型這個詞,接下來我們將其刪除:
jieba.del_word("開源模型") seg_list = jieba.cut(text) print('/'.join(seg_list))
此時開源和模型就又變?yōu)閮蓚€詞了。
2.4 添加詞庫失效的情況
如果想要添加的詞包含標點符號,則這個添加操作會失效(無論是添加單個的詞語還是使用自定義字典),比如:
import jieba text = '美國數(shù)據(jù)倉庫巨頭發(fā)布<開源模型>,公開挑戰(zhàn)ChatGPT' jieba.add_word("<開源模型>") seg_list = jieba.cut(text) print('/'.join(seg_list))
這段代碼希望將<開源模型>分為一個詞,然而jieba默認標點符號會被單獨分割,因此這個添加詞庫的操作會失效,不但<開源模型>不能被分出來,開源模型也不能被分出來。
因此,在添加詞庫時要避免這種情況的出現(xiàn)。
python 結巴分詞具體下載與使用方法可參考github相關說明:
相關文章
pandas分組聚合(agg,transform,apply)
在SQL中我們經(jīng)常使用 GROUP BY 將某個字段,按不同的取值進行分組, 在pandas中也有groupby函數(shù),本文主要介紹了pandas分組聚合(agg,transform,apply),具有一定的參考價值,感興趣的可以了解一下2024-04-04利用Python批量識別電子賬單數(shù)據(jù)的方法
這篇文章主要介紹了利用Python批量識別電子賬單數(shù)據(jù)的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02完美處理python與anaconda環(huán)境變量的沖突問題
這篇文章主要介紹了完美處理Python與anaconda環(huán)境變量的沖突問題,對anaconda感興趣的同學,可以參考下2021-04-04Pytorch實現(xiàn)圖像識別之數(shù)字識別(附詳細注釋)
這篇文章主要介紹了Pytorch實現(xiàn)圖像識別之數(shù)字識別(附詳細注釋),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05通過LyScript實現(xiàn)從文本中讀寫ShellCode
LyScript 插件通過配合內存讀寫,可實現(xiàn)對特定位置的ShellCode代碼的導出。本文將利用這一特性實現(xiàn)從文本中讀寫ShellCode,感興趣的可以了解一下2022-08-08Appium+python自動化之連接模擬器并啟動淘寶APP(超詳解)
這篇文章主要介紹了Appium+python自動化之 連接模擬器并啟動淘寶APP(超詳解)本文以淘寶app為例,通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2019-06-06Kwargs傳遞給Python 中的另一個函數(shù)實現(xiàn)方法
Python 列出了可以傳遞給程序中的函數(shù)的兩種類型的參數(shù), 非關鍵字參數(shù)**args和關鍵字參數(shù) **kwargs ,在本文中,我們將討論如何使用關鍵字參數(shù)及如何將關鍵字參數(shù)傳遞給另一個函數(shù),感興趣的朋友跟隨小編一起看看吧2023-08-08