日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Python——jieba优秀的中文分词库(基础知识+实例)

發(fā)布時(shí)間:2023/12/10 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python——jieba优秀的中文分词库(基础知识+实例) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Hello,World!

從去年開始學(xué)習(xí)Python,在長(zhǎng)久的學(xué)習(xí)過(guò)程中,發(fā)現(xiàn)了許多有趣的知識(shí),不斷充實(shí)自己。今天我所寫的內(nèi)容也是極具趣味性,關(guān)于優(yōu)秀的中文分詞庫(kù)——jieba庫(kù)。

🏔關(guān)于Jieba

? ?? ? ?🐒什么是jieba?

1、jieba 是目前表現(xiàn)較為不錯(cuò)的 Python 中文分詞組件,它主要有以下特性:

  • 中文文本需要通過(guò)分詞獲得單個(gè)的詞語(yǔ)
  • jieba需要額外安裝
  • jieba庫(kù)提供三種分詞模式

2、jieba庫(kù)的分詞原理:利用一個(gè)中文詞庫(kù),確定漢字之間的關(guān)聯(lián)概率,漢字間概率大的組成詞組,形成分詞結(jié)果。除了分詞,用戶還可以添加自定義的詞組。【這一點(diǎn)是很有趣的😄!】

3、jieba庫(kù)支持四種分詞模式:精確模式、全模式、搜索引擎模式、paddle模式,并且支持繁體分詞,以及自定義詞典。具體介紹:

  • 精確模式,試圖將句子最精確地切開,適合文本分析;
  • 全模式,把句子中所有的可以成詞的詞語(yǔ)都掃描出來(lái), 速度非常快,但是不能解決歧義;
  • 搜索引擎模式,在精確模式的基礎(chǔ)上,對(duì)長(zhǎng)詞再次切分,提高召回率,適合用于搜索引擎分詞。

????????算法

  • 基于前綴詞典實(shí)現(xiàn)高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構(gòu)成的有向無(wú)環(huán)圖 (DAG)
  • 采用了動(dòng)態(tài)規(guī)劃查找最大概率路徑, 找出基于詞頻的最大切分組合
  • 對(duì)于未登錄詞,采用了基于漢字成詞能力的 HMM 模型,使用了 Viterbi 算法

正文來(lái)了!!!

🏔一、安裝jieba庫(kù)

? ? ? ? 🐒1.? 此次內(nèi)容創(chuàng)作,我主要使用的軟件有Anaconda,Jupyter Notebook,Pycharm等,看過(guò)我之前文章的大佬們,相信對(duì)Anaconda都有一個(gè)簡(jiǎn)單的了解,這里就不一一敘述了,直接安裝🙂。

因?yàn)閖ieba庫(kù)不是Anaconda中自帶的,所以需要我們自己下載,首先進(jìn)入jieba庫(kù)官網(wǎng):jieba · PyPIhttps://pypi.org/project/jieba/#files

如下圖:

?點(diǎn)擊官網(wǎng)中文件下載即可(如果下載速度比較慢,可以私聊我!💪)

? ? ? ? 🐒2.? 將壓縮包解壓到anaconda的pkgs目錄。

? ? ? ? 🐒3.? 打開anaconda prompt,切換目錄至比如我的D:/anaconda/pkgs/jieba-0.42,輸入cmd進(jìn)入命令行模式
執(zhí)行? python setup.py install? ?即可。

? ? ? ? 🐒4.? 再次打開jupyter notebook 測(cè)試

import jieba,正常。pycharm中 import jieba ,正常。由此,我們的第一步安裝完成!

pip install jiebaimport jieba

?🏔二、jieba庫(kù)的使用

? ? ? ? 🐒1.? 精確模式

????????將語(yǔ)句最精確的切分,不存在冗余數(shù)據(jù),適合做文本分析。

????????#精確模式

????????jieba.cut(text, cut_all=False)

????????案例分析:

????????精確模式分析是不存在冗余數(shù)據(jù)的,把完整的text文本按照中文詞庫(kù)的標(biāo)準(zhǔn)完成拆分。如圖所示:

import jieba seg_list = jieba.cut("我來(lái)到北京清華大學(xué)", cut_all=False) print("Default Mode: " + "/ ".join(seg_list)) # 精確模式

? ? ? 🐒 2.? 全模式

????????將語(yǔ)句中所有可能是詞的詞語(yǔ)都切分出來(lái),速度很快,但是存在冗余數(shù)據(jù)。

????????#全模式

????????jieba.cut(text, cut_all=True)

????????案例分析:

????????全模式與精確模式的不同在于,全模式存在冗余數(shù)據(jù),是將存在可能的詞語(yǔ)全部切分出來(lái),從第一個(gè)字到最后一個(gè)字遍歷作為詞語(yǔ)第一個(gè)字。例如:以“吉”開頭的詞語(yǔ)包括“吉林”,“吉林省”,以“長(zhǎng)”開頭的名詞包括“長(zhǎng)春”“長(zhǎng)春市”等等。如圖所示:

?不難看出,輸出的內(nèi)容存在冗余數(shù)據(jù)。

seg_list = jieba.cut("我來(lái)到吉林省長(zhǎng)春市高新技術(shù)產(chǎn)業(yè)開發(fā)區(qū)光谷大街1188號(hào)", cut_all=True) print("Full Mode: " + "/ ".join(seg_list)) # 全模式

? ? ? 🐒 3、搜索引擎模式

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

????????#搜索引擎模式

????????jieba.lcut_for_search(text)

????????案例分析:

????????搜索引擎模式是將精確模式中的長(zhǎng)詞,再次按照全模式切分。如圖所示:

seg_list = jieba.cut_for_search("小明碩士畢業(yè)于中國(guó)科學(xué)院計(jì)算所,后在日本京都大學(xué)深造") # 搜索引擎模式 print(", ".join(seg_list))

? ? ? ? 🐒4、Viterbi算法

?此處,“杭研”并沒(méi)有在詞典中,但是也被Viterbi算法識(shí)別出來(lái)了。

? ? ? ? 🐒5、自定義詞典

????????在jieba自定義字典方面,目前我所了解到的常見的應(yīng)用環(huán)境是各網(wǎng)絡(luò)平臺(tái)對(duì)違禁詞的查詢搜索處理,以及網(wǎng)站也對(duì)用戶個(gè)人信息的處理,對(duì)購(gòu)物方面評(píng)價(jià)信息的處理等等。因此,我同樣也使用了jupyter notebook嘗試了自定義詞典的使用,text文本文件及運(yùn)行結(jié)果如下圖所示:

?

//自定義詞典使用 import jieba test_sent = "李小福是創(chuàng)新辦主任也是云計(jì)算方面的專家" jieba.load_userdict("E://userdict.txt") words = jieba.cut(test_sent) print(list(words))

?????????可以看出,我的自定義詞典在運(yùn)行過(guò)程中,起到了具體的作用。可想而知,當(dāng)我們?cè)趯?duì)一篇文章進(jìn)行內(nèi)容的分析處理是,也是可以使用jieba庫(kù)的!可以通過(guò)用戶自定義詞典來(lái)增強(qiáng)歧義糾錯(cuò)能力!

部分文本解析語(yǔ)法:

def getext():fname=input("請(qǐng)輸入要打開的文件路徑及名稱,以txt結(jié)尾:")fo=open(fname) #打開該文件,默認(rèn)是文本文件,文本文件其實(shí)就是一個(gè)字符串txt=fo.read() #<文件名>.read() 默認(rèn)是讀取文件全部?jī)?nèi)容txt=txt.lower() #將文本所有字母小寫for ch in '!"#$%()*+<_>/:;<>=?@[\]\^_{}|~':txt=txt.replace(ch,'') #將文本中含有的所有上述字符都變?yōu)榭崭駌eturn txt hamlettxt=getext() words=hamlettxt.split() #默認(rèn)值,是將文本中單詞按照空格分成一個(gè)一個(gè)的單詞,并將結(jié)果保存成列表類型 counts={} #定義一個(gè)空字典類型,因?yàn)槲覀兿M麊卧~和該單詞出現(xiàn)的次數(shù)作為一個(gè)鍵值對(duì) for word in words: #遍歷words列表的每一個(gè)值counts[word]=counts.get(word,0)+1 items=list(counts.items()) #將該字典轉(zhuǎn)化成一個(gè)列表,其中的鍵值對(duì)是以元組的形式存在 items.sort(key=lambda x:x[1],reverse=True) for i in range(10):word,count=items[i] #items[i] 是個(gè)元組,元組可以帶括號(hào),可以不帶括號(hào);賦值print("{:<10}{:>5}".format(word,count))

? 🏔三、 使用語(yǔ)法

? ? ? ? ? ? ? ? 🐒1.? 對(duì)詞組的基本操作

?????????添加

str = "你好呀,我叫李華!多多關(guān)照!" jieba.add_word("你") print(jieba.lcut(str))

? ? ? ? ?刪除

str = "你好呀,我叫李華!多多關(guān)照!" jieba.del_word("李華") print(jieba.lcut(str))

?????????調(diào)整詞出現(xiàn)的頻率

str = "你好呀,我叫李華!多多關(guān)照!" jieba.suggest_freq(("李", "華"), True) print(jieba.lcut(str))

? ? ? ? ? ? ? ?🐒 2.? 關(guān)鍵字提取

????????TFIDF算法

import jieba.analyse # 導(dǎo)包jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=()) jieba.analyse.TFIDF(idf_path=None) # 創(chuàng)建一個(gè)新的 TFIDF 實(shí)例,idf_path是指指定 IDF 頻率文件的路徑

參數(shù):

  • sentence:要提取的文本
  • topK:返回多少個(gè)具有最高TF/IDF權(quán)重的關(guān)鍵字。默認(rèn)值為 20
  • withWeight:是否返回關(guān)鍵字的TF/IDF權(quán)重。默認(rèn)為假
  • allowPOS:過(guò)濾包含POS(詞性)的單詞。空無(wú)過(guò)濾,可以選擇['ns', 'n', 'vn', 'v','nr']

????????TextRank算法

jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v')) # 有默認(rèn)詞性 jieba.analyse.TextRank() # 新建自定義 TextRank 實(shí)例

????????? ? ? ? 🐒3.? 詞性標(biāo)注

jieba.posseg.POSTokenizer(tokenizer=None)

新建自定義分詞器,tokenizer 參數(shù)可指定內(nèi)部使用的 jieba.Tokenizer 分詞器

jieba.posseg.dt 為默認(rèn)詞性標(biāo)注分詞器

import jieba.posseg str = "你好呀,我叫李華!多多關(guān)照!" pt = jieba.posseg.POSTokenizer() print(pt.lcut(str)) # 得到 pair鍵值對(duì),使用遍歷取值 # print(jieba.posseg.cut(str)) # 作用一樣 for i, k in ps.lcut(str): print(i, k)

? ? ? ? ? ? ? ? 🐒4.??Tokenize:返回詞語(yǔ)在原文的起止位置

  • 注意,輸入?yún)?shù)只接受 unicode

默認(rèn)模式

result = jieba.tokenize(u'永和服裝飾品有限公司') for tk in result:print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))

搜索模式

result = jieba.tokenize(u'永和服裝飾品有限公司', mode='search') for tk in result:print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))

?????????如上文所示,關(guān)于Pyhton中文分詞庫(kù)——jieba庫(kù)的介紹,暫時(shí)結(jié)束,如果后續(xù)學(xué)習(xí)到了新的內(nèi)容,會(huì)再次進(jìn)行介紹!各位大佬們,如果發(fā)現(xiàn)文章內(nèi)容錯(cuò)誤,希望可以指出,評(píng)論或私信都可🙂

部分內(nèi)容來(lái)源:GitHub - fxsjy/jieba: 結(jié)巴中文分詞

總結(jié)

以上是生活随笔為你收集整理的Python——jieba优秀的中文分词库(基础知识+实例)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。