Hello,World!
從去年開(kāi)始學(xué)習(xí)Python,在長(zhǎng)久的學(xué)習(xí)過(guò)程中,發(fā)現(xiàn)了許多有趣的知識(shí),不斷充實(shí)自己。今天我所寫(xiě)的內(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模式,并且支持繁體分詞,以及自定義詞典。具體介紹:
- 精確模式,試圖將句子最精確地切開(kāi),適合文本分析;
- 全模式,把句子中所有的可以成詞的詞語(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.? 打開(kāi)anaconda prompt,切換目錄至比如我的D:/anaconda/pkgs/jieba-0.42,輸入cmd進(jìn)入命令行模式
執(zhí)行? python setup.py install? ?即可。
? ? ? ? ??4.? 再次打開(kāi)jupyter notebook 測(cè)試
import jieba,正常。pycharm中 import jieba ,正常。由此,我們的第一步安裝完成!
pip install jieba
import 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è)字。例如:以“吉”開(kāi)頭的詞語(yǔ)包括“吉林”,“吉林省”,以“長(zhǎng)”開(kāi)頭的名詞包括“長(zhǎng)春”“長(zhǎng)春市”等等。如圖所示:
?不難看出,輸出的內(nèi)容存在冗余數(shù)據(jù)。
seg_list = jieba.cut("我來(lái)到吉林省長(zhǎng)春市高新技術(shù)產(chǎn)業(yè)開(kāi)發(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自定義字典方面,目前我所了解到的常見(jiàn)的應(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ì)算方面的專(zhuān)家"
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)輸入要打開(kāi)的文件路徑及名稱(chēng),以txt結(jié)尾:")
fo=open(fname) #打開(kāi)該文件,默認(rèn)是文本文件,文本文件其實(shí)就是一個(gè)字符串
txt=fo.read() #<文件名>.read() 默認(rèn)是讀取文件全部?jī)?nèi)容
txt=txt.lower() #將文本所有字母小寫(xiě)
for ch in '!"#$%()*+<_>/:;<>=?@[\]\^_{}|~':
txt=txt.replace(ch,'') #將文本中含有的所有上述字符都變?yōu)榭崭? return txt
hamlettxt=getext()
words=hamlettxt.split() #默認(rèn)值,是將文本中單詞按照空格分成一個(gè)一個(gè)的單詞,并將結(jié)果保存成列表類(lèi)型
counts={} #定義一個(gè)空字典類(lèi)型,因?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(詞性)的單詞??諢o(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)論或私信都可??文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-779074.html
部分內(nèi)容來(lái)源:GitHub - fxsjy/jieba: 結(jié)巴中文分詞文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-779074.html
到了這里,關(guān)于Python——jieba優(yōu)秀的中文分詞庫(kù)(基礎(chǔ)知識(shí)+實(shí)例)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!