最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Python中文分詞而生的jieba庫(kù)

 更新時(shí)間:2023年07月05日 10:29:46   作者:小斌哥ge  
這篇文章主要介紹了詳解Python中文分詞而生的jieba庫(kù),在Python中,最好用的中文分詞庫(kù)是jieba。用“結(jié)巴”給一個(gè)中文分詞庫(kù)命名,非常生動(dòng)形象,同時(shí)還帶有一種程序員式的幽默感,需要的朋友可以參考下

jieba庫(kù)

中文分詞,通俗來(lái)說(shuō),就是將一句(段)話按一定的規(guī)則(算法)拆分成詞語(yǔ)、成語(yǔ)、單個(gè)文字。 中文分詞是很多應(yīng)用技術(shù)的前置技術(shù),如搜索引擎、機(jī)器翻譯、詞性標(biāo)注、相似度分析等,都是先對(duì)文本信息分詞處理,再用分詞結(jié)果來(lái)搜索、翻譯、對(duì)比等。

在Python中,最好用的中文分詞庫(kù)是jieba。用“結(jié)巴”給一個(gè)中文分詞庫(kù)命名,非常生動(dòng)形象,同時(shí)還帶有一種程序員式的幽默感。

一、最好的Python中文分詞組件

“結(jié)巴”中文分詞:做最好的 Python 中文分詞組件

這是jieba分詞的slogan,打開(kāi)jieba分詞的GitHub、PyPI源,都會(huì)在簡(jiǎn)介里看到這句標(biāo)語(yǔ)。這充分體現(xiàn)了jieba開(kāi)發(fā)團(tuán)隊(duì)的愿景和目標(biāo),在目前看來(lái),jieba已經(jīng)稱得上最好的Python中文分詞庫(kù)。 2022年4月寫(xiě)本文時(shí),jieba在GitHub上已經(jīng)獲得了28.3K的Star,而且數(shù)量正在快速增長(zhǎng),足夠證明jieba的受歡迎程度非常高。 jieba除了有Python語(yǔ)言的版本,也有C++、JAVA、iOS等十幾門(mén)編程語(yǔ)言的版本,從PC端到移動(dòng)端,都可以支持。這點(diǎn)值得給jieba的維護(hù)團(tuán)隊(duì)點(diǎn)贊,說(shuō)不定未來(lái),jieba可以做所有語(yǔ)言里最好的中文分詞組件。

二、jieba的使用方法

Step1. 安裝jieba

pip install jieba

jieba是第三方庫(kù),需要先安裝才能使用,直接使用pip安裝即可,jieba兼容Python2和Python3,安裝命令都一樣。如果安裝慢,可以添加-i參數(shù)指定鏡像源。

Step2. 調(diào)用jieba進(jìn)行分詞

import jieba
test_content = '迅雷不及掩耳盜鈴兒響叮當(dāng)仁不讓世界充滿愛(ài)之勢(shì)'
cut_res = jieba.cut(test_content, cut_all=True)
print(list(cut_res))

運(yùn)行結(jié)果:

['迅雷', '迅雷不及', '迅雷不及掩耳', '不及', '掩耳', '掩耳盜鈴', 
'兒', '響叮當(dāng)', '叮當(dāng)', '當(dāng)仁不讓', '不讓', '世界', '充滿', '愛(ài)',
 '之', '勢(shì)']

jieba分詞的使用非常簡(jiǎn)單,直接導(dǎo)入jieba庫(kù),調(diào)用cut()方法,傳入需要切分的內(nèi)容,即可返回分詞結(jié)果。返回結(jié)果是一個(gè)可迭代的生成器generator,可以進(jìn)行遍歷,也可以轉(zhuǎn)換成list打印出結(jié)果。

三、jieba分詞的四種模式

jieba分詞支持四種分詞模式:

1.精確模式:

試圖將句子最精確地切開(kāi),適合文本分析。

cut_res = jieba.cut(test_content, cut_all=False)
print('[精確模式]:', list(cut_res))
cut_res = jieba.cut(test_content, cut_all=False, HMM=False)
print('[精確模式]:', list(cut_res))

[精確模式]: ['迅雷不及', '掩耳盜鈴', '兒響', '叮', '當(dāng)仁不讓', '世界', '充滿', '愛(ài)之勢(shì)']
[精確模式]: ['迅雷不及', '掩耳盜鈴', '兒', '響', '叮', '當(dāng)仁不讓', '世界', '充滿', '愛(ài)', '之', '勢(shì)']

精確模式是最常用的分詞模式,分詞結(jié)果不存在冗余數(shù)據(jù)。 HMM參數(shù)默認(rèn)為T(mén)rue,根據(jù)HMM模型(隱馬爾可夫模型)自動(dòng)識(shí)別新詞。如上面的例子中,HMM為T(mén)rue,結(jié)果中將“兒響”、“愛(ài)之勢(shì)”識(shí)別成了新詞,HMM為False,這些字只能單獨(dú)成詞,分成單個(gè)文字。

2.全模式:

把句子中所有可以成詞的詞語(yǔ)都掃描出來(lái), 速度非???,但是不能解決歧義。

cut_res = jieba.cut(test_content, cut_all=True)
print('[全模式]:', list(cut_res))

結(jié)果

[全模式]: ['迅雷', '迅雷不及', '迅雷不及掩耳', '不及', '掩耳', '掩耳盜鈴', 
'兒', '響叮當(dāng)', '叮當(dāng)', '當(dāng)仁不讓', '不讓', '世界', '充滿', '愛(ài)', '之', '勢(shì)']

全模式從待分詞內(nèi)容的第一個(gè)字開(kāi)始遍歷,將每一個(gè)字作為詞語(yǔ)的第一個(gè)字,返回所有可能的詞語(yǔ),會(huì)重復(fù)利用詞語(yǔ)和字,因此也可能會(huì)出現(xiàn)多種含義。 cut_all參數(shù)默認(rèn)為False,即默認(rèn)不是全模式,將cut_all設(shè)置為T(mén)rue,則采用全模式分詞。

3.搜索引擎模式:

在精確模式的基礎(chǔ)上,對(duì)長(zhǎng)詞再次切分,提高召回率,適合用于搜索引擎分詞。

cut_res = jieba.cut_for_search(test_content)
print('[搜索引擎模式]:', list(cut_res))

結(jié)果

[搜索引擎模式]: ['迅雷', '不及', '迅雷不及', '掩耳', '掩耳盜鈴', '兒響', 
'叮', '不讓', '當(dāng)仁不讓', '世界', '充滿', '愛(ài)之勢(shì)']

搜索引擎模式在精確模式的基礎(chǔ)上,對(duì)精確模式中的長(zhǎng)詞,再按照全模式進(jìn)一步分詞,用于搜索時(shí)可以匹配到更多的結(jié)果。

4.paddle模式:

利用PaddlePaddle深度學(xué)習(xí)框架,訓(xùn)練序列標(biāo)注(雙向GRU)網(wǎng)絡(luò)模型實(shí)現(xiàn)分詞。同時(shí)支持詞性標(biāo)注。 paddle模式使用需先安裝paddlepaddle-tiny,安裝命令:pip install paddlepaddle-tiny==1.6.1。目前paddle模式支持jieba v0.40及以上版本。

jieba v0.40以下版本,請(qǐng)升級(jí)jieba,pip install jieba --upgrade 。 上面是官方的描述,但是,當(dāng)前已經(jīng)找不到paddlepaddle-tiny鏡像源了,感興趣可以去PaddlePaddle官網(wǎng)找找方法。 通常不會(huì)使用到paddle模式,所以我們了解前面三種模式即可。

5.小結(jié)

cut()方法有四個(gè)參數(shù),

  • sentence接收待分詞的內(nèi)容;
  • cut_all設(shè)置是否使用全模式;
  • HMM設(shè)置是否使用HMM模型識(shí)別新詞;
  • use_paddle設(shè)置是否使用panddle模式。

cut_for_search()有兩個(gè)參數(shù),

sentence和HMM。

cut()和cut_for_search()都是返回generator

如果想直接返回列表,可以使用對(duì)應(yīng)的lcut()和lcut_for_search(),用法完全相同。

四、自定義分詞詞典

使用jieba分詞時(shí),分詞結(jié)果需要與jieba的詞典庫(kù)進(jìn)行匹配,才能返回到分詞結(jié)果中。因此有些詞需要用戶自定義,才能識(shí)別到。

1.添加自定義詞語(yǔ)到詞典中

jieba.add_word('鈴兒響叮當(dāng)')
jieba.add_word('讓世界充滿愛(ài)')
jieba.add_word('迅雷不及掩耳之勢(shì)')
lcut_res = jieba.lcut(test_content, cut_all=True, HMM=False)
print('[添加自定義詞語(yǔ)]:', lcut_res)

結(jié)果

[添加自定義詞語(yǔ)]: ['迅雷', '迅雷不及', '迅雷不及掩耳', '不及', '掩耳', '掩耳盜鈴',
 '鈴兒響叮當(dāng)', '響叮當(dāng)', '叮當(dāng)', '當(dāng)仁不讓', '不讓', '讓世界充滿愛(ài)', '世界', 
 '充滿', '愛(ài)', '之', '勢(shì)']

add_word()有三個(gè)參數(shù),分別是添加的詞語(yǔ)、詞頻和詞性,詞頻和詞性可以省略。 添加自定義詞語(yǔ)后,自定義詞語(yǔ)如果能匹配到,就會(huì)返回到分詞結(jié)果中。如果自定義詞語(yǔ)在待分詞語(yǔ)句中沒(méi)有連續(xù)的匹配結(jié)果,分詞結(jié)果中不會(huì)體現(xiàn)。

2.添加指定的文件作為分詞詞典

自定義詞典格式要和默認(rèn)詞典dict.txt一樣,一個(gè)詞占一行,每一行分三部分:詞語(yǔ)、詞頻(可省略)、詞性(可省略),用空格隔開(kāi),順序不可顛倒。file_name若為路徑或二進(jìn)制方式打開(kāi)的文件,則文件必須為UTF-8編碼。 本文自定義一個(gè)mydict.txt文本文件,內(nèi)容如下:

迅雷不及掩耳之勢(shì) 3 a
掩耳盜鈴 3 a
鈴兒響叮當(dāng) 3 a
當(dāng)仁不讓 3 a
讓世界充滿愛(ài) 3 n

文件編碼要設(shè)置成UTF-8,在PyCharm可以點(diǎn)擊File>Settings>File Encodings,將Global Encoding和Project Encoding設(shè)置成UTF-8。

在這里插入圖片描述

然后使用load_userdict()加載自定義詞典。

jieba.load_userdict('mydict.txt')
lcut_res = jieba.lcut(test_content, cut_all=True, HMM=False)
print('[使用自定義詞典]:', lcut_res)

結(jié)果

[使用自定義詞典]: ['迅雷', '迅雷不及', '迅雷不及掩耳', '不及', '掩耳', '掩耳盜鈴', 
'鈴兒響叮當(dāng)', '響叮當(dāng)', '叮當(dāng)', '當(dāng)仁不讓', '不讓', '讓世界充滿愛(ài)', '世界', 
'充滿', '愛(ài)', '之', '勢(shì)']

使用了自定義詞典,會(huì)同時(shí)根據(jù)jieba的默認(rèn)詞典和自定義詞典進(jìn)行分詞。添加自定義詞典和添加單個(gè)詞語(yǔ)的效果一樣,區(qū)別是可以批量添加,而不用重復(fù)調(diào)用add_word()。

3.從詞典中刪除詞語(yǔ)

jieba.del_word('不及')
jieba.del_word('不讓')
jieba.del_word('之')
lcut_res = jieba.lcut(test_content, cut_all=True, HMM=False)
print('[刪除詞語(yǔ)]:', lcut_res)

結(jié)果

[刪除詞語(yǔ)]: ['迅雷', '迅雷不及', '迅雷不及掩耳', '掩耳', '掩耳盜鈴', '兒', 
'響叮當(dāng)', '叮當(dāng)', '當(dāng)仁不讓', '世界', '充滿', '愛(ài)', '之', '勢(shì)']

刪除的詞語(yǔ)一般是語(yǔ)氣助詞、邏輯連接詞等,這些詞對(duì)于文本分析沒(méi)有實(shí)際意義,反而會(huì)成為干擾。 在設(shè)置刪除的詞語(yǔ)后,結(jié)果中不再有刪除的詞語(yǔ),但對(duì)于單個(gè)字,會(huì)獨(dú)立成詞,所以刪除后在結(jié)果中也還存在。

4.調(diào)整詞語(yǔ)的詞頻

調(diào)整詞語(yǔ)的詞頻,調(diào)整其在結(jié)果中被分出來(lái)的可能性,使分詞結(jié)果滿足預(yù)期。分兩種情況,一種是將分詞結(jié)果中的一個(gè)長(zhǎng)詞拆分成多個(gè)詞,另一種是將分詞結(jié)果中的多個(gè)詞組成一個(gè)詞。

lcut_res = jieba.lcut(test_content, cut_all=False, HMM=False)
print('[設(shè)置前]:', lcut_res)
jieba.suggest_freq('讓世界充滿愛(ài)', True)
lcut_res = jieba.lcut(test_content, cut_all=False, HMM=False)
print('[設(shè)置后]:', lcut_res)

結(jié)果

[設(shè)置前]: ['迅雷不及', '掩耳盜鈴', '兒', '響', '叮', '當(dāng)仁不讓', '世界', '充滿', '愛(ài)', '之', '勢(shì)']
[設(shè)置后]: ['迅雷不及', '掩耳盜鈴', '兒', '響叮當(dāng)', '仁', '不', '讓世界充滿愛(ài)', '之', '勢(shì)']

suggest_freq()有兩個(gè)參數(shù),segment參數(shù)表示分詞的片段,如果是將一個(gè)詞拆開(kāi),則傳入拆開(kāi)后的元組,如果是指定某個(gè)詞要作為一個(gè)整體,則傳入字符串;tune參數(shù)為T(mén)rue,則調(diào)整詞語(yǔ)的詞頻。 注意:自動(dòng)計(jì)算的詞頻在使用HMM新詞發(fā)現(xiàn)功能時(shí)可能無(wú)效。

五、關(guān)鍵詞提取

關(guān)鍵詞提取使用jieba中的analyse模塊,基于兩種不同的算法,提供了兩個(gè)不同的方法。

1.基于TF-IDF算法的關(guān)鍵詞提取

from jieba import analyse
key_word = analyse.extract_tags(test_content, topK=3)
print('[key_word]:', list(key_word))
key_word = analyse.extract_tags(test_content, topK=3, withWeight=True)
print('[key_word]:', list(key_word))

結(jié)果

[key_word]: ['迅雷不及', '兒響', '愛(ài)之勢(shì)']
[key_word]: [('迅雷不及', 1.7078239289857142), ('兒響', 1.7078239289857142), ('愛(ài)之勢(shì)', 1.7078239289857142)]

extract_tags()方法有四個(gè)參數(shù),sentence為待提取的文本;topK為返回最大權(quán)重關(guān)鍵詞的個(gè)數(shù),默認(rèn)值為20;withWeight表示是否返回權(quán)重,是的話返回(word, weight)的list,默認(rèn)為False;allowPOS為篩選指定詞性的詞,默認(rèn)為空,即不篩選。

2.基于TextRank算法的關(guān)鍵詞提取

key_word = analyse.textrank(test_content, topK=3)
print('[key_word]:', list(key_word))
allow = ['ns', 'n', 'vn', 'v', 'a', 'm', 'c']
key_word = analyse.textrank(test_content, topK=3, allowPOS=allow)
print('[key_word]:', list(key_word))

結(jié)果

[key_word]: ['兒響', '世界']
Prefix dict has been built successfully.
[key_word]: ['充滿', '兒響', '世界']

textrank()方法與extract_tags()方法用法相似,需要注意的是allowPOS有默認(rèn)值(‘ns’, ‘n’, ‘vn’, ‘v’),默認(rèn)篩選這四種詞性的詞,可以自己設(shè)置。其他參數(shù)都與extract_tags()方法相同。

六、詞性標(biāo)注

詞性標(biāo)注使用jieba中的posseg模塊,標(biāo)注分詞后每個(gè)詞的詞性,采用和ictclas兼容的標(biāo)記法。

from jieba import posseg
pos_word = posseg.lcut(test_content)
print(pos_word)

結(jié)果

[pair('迅雷不及', 'i'), pair('掩耳盜鈴', 'i'), pair('兒響', 'n'),
 pair('叮', 'v'), pair('當(dāng)仁不讓', 'i'), pair('世界', 'n'), 
 pair('充滿', 'a'), pair('愛(ài)', 'v'), pair('之', 'u'), pair('勢(shì)', 'ng')]

posseg.lcut()有兩個(gè)參數(shù),sentence和HMM。 詞性和詞性標(biāo)簽參考下表:

標(biāo)簽含義標(biāo)簽含義標(biāo)簽含義標(biāo)簽含義
n普通名詞f方位名詞s處所名詞t時(shí)間
nr人名ns地名nt機(jī)構(gòu)名nw作品名
nz其他專名v普通動(dòng)詞vd動(dòng)副詞vn名動(dòng)詞
a形容詞ad副形詞an名形詞d副詞
m數(shù)量詞q量詞r代詞p介詞
c連詞u助詞xc其他虛詞w標(biāo)點(diǎn)符號(hào)
PER人名LOC地名ORG機(jī)構(gòu)名TIME時(shí)間

七、返回詞語(yǔ)在原文的起止位置

返回詞語(yǔ)在原文的起止位置使用jieba中的Tokenize模塊,實(shí)際調(diào)用時(shí)使用tokenize()方法。

res = jieba.tokenize(test_content)
for r in res:
    if len(r[0]) > 3:
        print('word:{}\t start:{}\t end:{}'.format(*r))
    elif len(r[0]) > 1:
        print('word:{}\t\t start:{}\t end:{}'.format(*r))
    else:
        print('word:{}\t\t\t start:{}\t end:{}'.format(*r))

結(jié)果

word:迅雷不及     start:0     end:4
word:掩耳盜鈴     start:4     end:8
word:兒響         start:8     end:10
word:叮             start:10     end:11
word:當(dāng)仁不讓     start:11     end:15
word:世界         start:15     end:17
word:充滿         start:17     end:19
word:愛(ài)之勢(shì)         start:19     end:22

tokenize()方法有三個(gè)參數(shù),unicode_sentence為待分詞內(nèi)容,注意,只接受unicode編碼內(nèi)容;mode參數(shù)為指定分詞模式,如需要使用搜索引擎模式,則設(shè)置mode=‘search’;HMM默認(rèn)為T(mén)rue。 以上就是jieba分詞的常用功能介紹,更多用法請(qǐng)從下方參考文檔訪問(wèn)GitHub。

到此這篇關(guān)于詳解Python中文分詞而生的jieba庫(kù)的文章就介紹到這了,更多相關(guān)Python的jieba庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python?中strip()函數(shù)詳細(xì)說(shuō)明及使用方法

    Python?中strip()函數(shù)詳細(xì)說(shuō)明及使用方法

    strip()函數(shù)是Python字符串方法之一,用于處理字符串的前導(dǎo)和尾隨空白字符,它返回一個(gè)新字符串,該字符串是原始字符串去除前導(dǎo)和尾隨空格(包括空格、制表符、換行符等)后的結(jié)果,這篇文章主要介紹了Python?中strip()函數(shù)詳細(xì)說(shuō)明及使用方法,需要的朋友可以參考下
    2024-02-02
  • Django中template for如何使用方法

    Django中template for如何使用方法

    這篇文章主要介紹了Django中template for如何使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Python字符串逐字符或逐詞反轉(zhuǎn)方法

    Python字符串逐字符或逐詞反轉(zhuǎn)方法

    這篇文章主要介紹了Python字符串逐字符或逐詞反轉(zhuǎn)方法,本文對(duì)逐字符或逐詞分別給出兩種方法,需要的朋友可以參考下
    2015-05-05
  • python標(biāo)準(zhǔn)庫(kù)之time模塊的語(yǔ)法與簡(jiǎn)單使用

    python標(biāo)準(zhǔn)庫(kù)之time模塊的語(yǔ)法與簡(jiǎn)單使用

    在平常的代碼中,我們常常需要與時(shí)間打交道,那么在Python中,與時(shí)間處理有關(guān)的模塊就包括:time、datetime以及calendar,這篇文章主要給大家介紹了關(guān)于python標(biāo)準(zhǔn)庫(kù)之time模塊的語(yǔ)法與使用的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • python?中defaultdict()對(duì)字典進(jìn)行初始化的用法介紹

    python?中defaultdict()對(duì)字典進(jìn)行初始化的用法介紹

    這篇文章主要介紹了python?中defaultdict()對(duì)字典進(jìn)行初始化,一般情況下,在使用字典時(shí),先定義一個(gè)空字典(如dict_a?=?{}),然后往字典中添加元素只需要?dict_a[key]?=?value即可,本文通過(guò)實(shí)例代碼介紹具體用法,需要的朋友可以參考下
    2022-07-07
  • python pygame模塊編寫(xiě)飛機(jī)大戰(zhàn)

    python pygame模塊編寫(xiě)飛機(jī)大戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了python pygame模塊編寫(xiě)飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 深入探討opencv圖像矯正算法實(shí)戰(zhàn)

    深入探討opencv圖像矯正算法實(shí)戰(zhàn)

    在機(jī)器視覺(jué)中,對(duì)于圖像的處理有時(shí)候因?yàn)榉胖玫脑驅(qū)е翿OI區(qū)域傾斜,這個(gè)時(shí)候我們會(huì)想辦法把它糾正為正確的角度視角來(lái),本文主要介紹了opencv圖像矯正算法,感興趣的可以了解一下
    2021-05-05
  • 從基礎(chǔ)到進(jìn)階詳解Python操作SmartArt的完整指南

    從基礎(chǔ)到進(jìn)階詳解Python操作SmartArt的完整指南

    SmartArt 是微軟在 Office 2007 里推出的一套“智能圖表”系統(tǒng),這篇文章會(huì)帶你搞清楚 Python 處理 SmartArt 的各種姿勢(shì),快跟隨小編一起學(xué)習(xí)起來(lái)吧
    2026-04-04
  • Python爬取微信讀書(shū)實(shí)現(xiàn)讀書(shū)免費(fèi)自由

    Python爬取微信讀書(shū)實(shí)現(xiàn)讀書(shū)免費(fèi)自由

    主要跟大家介紹一下,我是如何用Python爬取小說(shuō),再導(dǎo)入微信讀書(shū)的。成功實(shí)現(xiàn)在微信讀書(shū)中各種“白票”付費(fèi)小說(shuō),有需要的朋友可以借鑒參考下
    2021-09-09
  • python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生管理系統(tǒng)

    python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02

最新評(píng)論

磴口县| 临武县| 浦北县| 友谊县| 台江县| 张家口市| 齐河县| 新营市| 盖州市| 宁德市| 巩义市| 兴文县| 兴山县| 大庆市| 通化县| 海淀区| 女性| 健康| 嘉峪关市| 新绛县| 伊宁县| 巴青县| 巧家县| 信宜市| 桐城市| 宽城| 新营市| 乐业县| 奈曼旗| 黄平县| 庆元县| 扎赉特旗| 靖远县| 夏河县| 富阳市| 夹江县| 莆田市| 普安县| 常熟市| 沅陵县| 鹿泉市|