python Jieba分詞處理詳解【模式,詞庫的添加、刪除,自定義詞庫,失敗處理等】
Jieba(結(jié)巴)是一個中文分詞第三方庫,它可以幫助我們將一段中文文本分成一個個獨(dú)立的詞語。Jieba具有以下特點(diǎn):
- 簡單易用:Jieba提供了簡潔的API接口,易于使用和擴(kuò)展??梢钥焖俚貙?shí)現(xiàn)中文分詞功能。
- 高效準(zhǔn)確:Jieba采用了基于前綴詞典和動態(tài)規(guī)劃算法的分詞方法,能夠高效準(zhǔn)確地處理各種中文文本。
- 支持多種分詞模式:Jieba提供了三種分詞模式:精確模式、全模式和搜索引擎模式,可以根據(jù)不同的應(yīng)用場景選擇合適的模式。
- 支持用戶自定義詞典:Jieba允許用戶自定義詞典,可以根據(jù)實(shí)際需要添加新的詞語或調(diào)整已有詞語的詞頻和詞性等信息。
- 支持并發(fā)分詞:Jieba采用多進(jìn)程和協(xié)程的方式實(shí)現(xiàn)并發(fā)分詞,可以提高分詞速度和效率。
除了中文分詞功能之外,Jieba還提供了關(guān)鍵詞提取、詞性標(biāo)注、繁體轉(zhuǎn)簡體、詞語拼音轉(zhuǎn)換等功能??梢詽M足不同的中文文本處理需求。
1 Jieba的搜索模式
1.1 全模式
全模式會將需要分詞的文本中所有可能的詞語都進(jìn)行匹配,因此會產(chǎn)生大量的冗余詞語。使用Jieba的全模式,比如我們希望把美國數(shù)據(jù)倉庫巨頭發(fā)布開源模型,公開挑戰(zhàn)ChatGPT這句話進(jìn)行分詞:
import jieba
text = '美國數(shù)據(jù)倉庫巨頭發(fā)布開源模型,公開挑戰(zhàn)ChatGPT'
seg_list = jieba.cut(text, cut_all=True)
print("/".join(seg_list))在上述代碼中,cut_all=True指定了使用全模式進(jìn)行分詞,"/".join(seg_list)會將分詞結(jié)果以斜杠分隔輸出。這段的輸出結(jié)果為:
可以看到分詞結(jié)果中,數(shù)據(jù)倉庫被分為了數(shù)據(jù)、倉庫、數(shù)據(jù)倉庫三個獨(dú)立的詞語,因此會產(chǎn)生大量的冗余詞語。全模式適合于對文本中所有可能的詞語進(jìn)行匹配的場景,例如搜索引擎的索引處理、關(guān)鍵詞提取等。
1.2 精確模式
精確模式會將需要分詞的文本中可能存在的詞語都進(jìn)行匹配,但不會產(chǎn)生冗余詞語。使用Jieba的精確模式,可以通過以下方式實(shí)現(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指定了使用精確模式進(jìn)行分詞。這段的輸出結(jié)果為:
可以看到,在精確模式下,Jieba會將數(shù)據(jù)倉庫作為一個詞語進(jìn)行匹配,不會產(chǎn)生冗余詞語。精確模式適合于對文本中存在的詞語進(jìn)行匹配的場景,例如文本分類、情感分析等。精確模式不會產(chǎn)生冗余詞語,因此可以得到準(zhǔn)確的分詞結(jié)果。
1.3 搜索引擎模式
搜索引擎模式使用了基于前綴匹配算法的正向最大匹配(FMM)和逆向最大匹配(RMM)算法,會對需要分詞的文本進(jìn)行分詞,并且盡可能多地匹配分詞結(jié)果。因此,在分詞時,搜索引擎模式會優(yōu)先匹配較長的詞語。使用Jieba的搜索引擎模式,可以通過以下方式實(shí)現(xiàn):
import jieba
text = '美國數(shù)據(jù)倉庫巨頭發(fā)布開源模型,公開挑戰(zhàn)ChatGPT'
seg_list = jieba.cut_for_search(text)
print("/".join(seg_list))這段函數(shù)的輸出結(jié)果為;

由于我們的實(shí)例文本過段,在這里的結(jié)果與全模式的分詞結(jié)果并未表現(xiàn)出區(qū)別。搜索引擎模式適合于對長文本進(jìn)行分詞的場景,例如自然語言處理、信息檢索等。搜索引擎模式使用了基于前綴匹配算法的正向最大匹配(FMM)和逆向最大匹配(RMM)算法,可以盡可能多地匹配分詞結(jié)果,但可能會對一些新詞造成誤判,需要進(jìn)行進(jìn)一步的處理和校對。
1.4 分詞結(jié)果的形式選擇
正常情況下,分詞結(jié)果將會以生成器的形式保存,這意味著,當(dāng)我們像上面一樣將分詞結(jié)果全部打印之后,這個生成器就不能二次使用了。
如果希望以列表的形式報錯結(jié)果??梢詫⑸善鬓D(zhuǎn)為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提供了內(nèi)置的詞典和用戶自定義的詞典。用戶可以通過添加或刪除詞語來定制自己的詞典。
2.1 添加單個詞語
在Jieba中,可以通過調(diào)用add_word(word, freq=None, tag=None)方法來向詞庫中添加單個詞語。其中,word為需要添加的詞語,freq為該詞語的詞頻,tag為該詞語的詞性。例如,假設(shè)需要將詞語開源模型添加到Jieba的詞庫中,可以通過如下代碼實(shí)現(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 添加自定義詞典
當(dāng)需要添加的詞過多時,建議使用添加詞典的方式。自定義詞典可以包含用戶自己添加的詞語及其詞頻和詞性等信息。添加自定義詞典的方法如下:
- 創(chuàng)建一個文本文件,例如
userdict.txt,用于存儲自定義詞典。每行格式為:詞語 詞頻 詞性。 - 將需要添加的詞語及其詞頻和詞性等信息寫入到
userdict.txt中,每個詞語一行。 - 調(diào)用Jieba的
load_userdict()方法加載自定義詞典文件。詞典示例如下:
開源模型 10 n 深度學(xué)習(xí) 8 n
其中,10和8為詞語的詞頻,n為詞語的詞性。之后調(diào)用詞典即可。
jieba.load_userdict("userdict.txt")詞典加入之后,再次進(jìn)行分詞,詞典中的內(nèi)容就可以被分出來了。
2.3 詞庫的刪除
在Jieba中,可以通過調(diào)用del_word(word)方法來刪除詞庫中的單個詞語。其中,word為需要刪除的詞語。剛剛我們在詞典中添加了開源模型這個詞,接下來我們將其刪除:
jieba.del_word("開源模型")
seg_list = jieba.cut(text)
print('/'.join(seg_list))
此時開源和模型就又變?yōu)閮蓚€詞了。
2.4 添加詞庫失效的情況
如果想要添加的詞包含標(biāo)點(diǎn)符號,則這個添加操作會失效(無論是添加單個的詞語還是使用自定義字典),比如:
import jieba
text = '美國數(shù)據(jù)倉庫巨頭發(fā)布<開源模型>,公開挑戰(zhàn)ChatGPT'
jieba.add_word("<開源模型>")
seg_list = jieba.cut(text)
print('/'.join(seg_list))這段代碼希望將<開源模型>分為一個詞,然而jieba默認(rèn)標(biāo)點(diǎn)符號會被單獨(dú)分割,因此這個添加詞庫的操作會失效,不但<開源模型>不能被分出來,開源模型也不能被分出來。
因此,在添加詞庫時要避免這種情況的出現(xiàn)。
python 結(jié)巴分詞具體下載與使用方法可參考github相關(guān)說明:
相關(guān)文章
使用Python分析數(shù)據(jù)并進(jìn)行搜索引擎優(yōu)化的操作步驟
在互聯(lián)網(wǎng)時代,網(wǎng)站數(shù)據(jù)是一種寶貴的資源,可以用來分析用戶行為、市場趨勢、競爭對手策略等,本文將介紹如何使用Python爬取網(wǎng)站數(shù)據(jù),并進(jìn)行搜索引擎優(yōu)化,,需要的朋友可以參考下2023-08-08
關(guān)于Pytorch MaxUnpool2d中size操作方式
今天小編就為大家分享一篇關(guān)于Pytorch MaxUnpool2d中size操作方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
keras實(shí)現(xiàn)VGG16 CIFAR10數(shù)據(jù)集方式
這篇文章主要介紹了keras實(shí)現(xiàn)VGG16 CIFAR10數(shù)據(jù)集方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
python數(shù)據(jù)處理和數(shù)據(jù)清洗的示例詳解
數(shù)據(jù)清洗是指發(fā)現(xiàn)并糾正數(shù)據(jù)文件中可識別的錯誤的最后一道程序,包括檢查數(shù)據(jù)一致性,處理無效值和缺失值等,數(shù)據(jù)清洗與處理的目的是提高數(shù)據(jù)的質(zhì)量,提高實(shí)驗(yàn)結(jié)果的可靠度,本文給大家介紹了python數(shù)據(jù)處理和數(shù)據(jù)清洗的示例,需要的朋友可以參考下2024-08-08
Python使用concurrent.futures模塊實(shí)現(xiàn)多進(jìn)程多線程編程
Python的concurrent.futures模塊可以很方便的實(shí)現(xiàn)多進(jìn)程、多線程運(yùn)行,減少了多進(jìn)程帶來的的同步和共享數(shù)據(jù)問題,下面就跟隨小編一起了解一下concurrent.futures模塊的具體使用吧2023-12-12
Python連接SQLite數(shù)據(jù)庫操作實(shí)戰(zhàn)指南從入門到精通
在Python中使用SQLite進(jìn)行數(shù)據(jù)庫操作時,我們將深入研究SQLite數(shù)據(jù)庫的創(chuàng)建、表格管理、數(shù)據(jù)插入、查詢、更新和刪除等關(guān)鍵主題,幫助你全面了解如何使用SQLite進(jìn)行數(shù)據(jù)庫操作2023-11-11
python遞歸打印某個目錄的內(nèi)容(實(shí)例講解)
下面小編就為大家?guī)硪黄猵ython遞歸打印某個目錄的內(nèi)容(實(shí)例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08

