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