Python——jieba优秀的中文分词库(基础知识+实例)
Hello,World!
從去年開始學習Python,在長久的學習過程中,發現了許多有趣的知識,不斷充實自己。今天我所寫的內容也是極具趣味性,關于優秀的中文分詞庫——jieba庫。
🏔關于Jieba
? ?? ? ?🐒什么是jieba?
1、jieba 是目前表現較為不錯的 Python 中文分詞組件,它主要有以下特性:
- 中文文本需要通過分詞獲得單個的詞語
- jieba需要額外安裝
- jieba庫提供三種分詞模式
2、jieba庫的分詞原理:利用一個中文詞庫,確定漢字之間的關聯概率,漢字間概率大的組成詞組,形成分詞結果。除了分詞,用戶還可以添加自定義的詞組?!具@一點是很有趣的😄!】
3、jieba庫支持四種分詞模式:精確模式、全模式、搜索引擎模式、paddle模式,并且支持繁體分詞,以及自定義詞典。具體介紹:
- 精確模式,試圖將句子最精確地切開,適合文本分析;
- 全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非???#xff0c;但是不能解決歧義;
- 搜索引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用于搜索引擎分詞。
????????算法
- 基于前綴詞典實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖 (DAG)
- 采用了動態規劃查找最大概率路徑, 找出基于詞頻的最大切分組合
- 對于未登錄詞,采用了基于漢字成詞能力的 HMM 模型,使用了 Viterbi 算法
正文來了!!!
🏔一、安裝jieba庫
? ? ? ? 🐒1.? 此次內容創作,我主要使用的軟件有Anaconda,Jupyter Notebook,Pycharm等,看過我之前文章的大佬們,相信對Anaconda都有一個簡單的了解,這里就不一一敘述了,直接安裝🙂。
因為jieba庫不是Anaconda中自帶的,所以需要我們自己下載,首先進入jieba庫官網:jieba · PyPIhttps://pypi.org/project/jieba/#files
如下圖:
?點擊官網中文件下載即可(如果下載速度比較慢,可以私聊我!💪)
? ? ? ? 🐒2.? 將壓縮包解壓到anaconda的pkgs目錄。
? ? ? ? 🐒3.? 打開anaconda prompt,切換目錄至比如我的D:/anaconda/pkgs/jieba-0.42,輸入cmd進入命令行模式
執行? python setup.py install? ?即可。
? ? ? ? 🐒4.? 再次打開jupyter notebook 測試
import jieba,正常。pycharm中 import jieba ,正常。由此,我們的第一步安裝完成!
pip install jiebaimport jieba?🏔二、jieba庫的使用
? ? ? ? 🐒1.? 精確模式
????????將語句最精確的切分,不存在冗余數據,適合做文本分析。
????????#精確模式
????????jieba.cut(text, cut_all=False)
????????案例分析:
????????精確模式分析是不存在冗余數據的,把完整的text文本按照中文詞庫的標準完成拆分。如圖所示:
import jieba seg_list = jieba.cut("我來到北京清華大學", cut_all=False) print("Default Mode: " + "/ ".join(seg_list)) # 精確模式? ? ? 🐒 2.? 全模式
????????將語句中所有可能是詞的詞語都切分出來,速度很快,但是存在冗余數據。
????????#全模式
????????jieba.cut(text, cut_all=True)
????????案例分析:
????????全模式與精確模式的不同在于,全模式存在冗余數據,是將存在可能的詞語全部切分出來,從第一個字到最后一個字遍歷作為詞語第一個字。例如:以“吉”開頭的詞語包括“吉林”,“吉林省”,以“長”開頭的名詞包括“長春”“長春市”等等。如圖所示:
?不難看出,輸出的內容存在冗余數據。
seg_list = jieba.cut("我來到吉林省長春市高新技術產業開發區光谷大街1188號", cut_all=True) print("Full Mode: " + "/ ".join(seg_list)) # 全模式? ? ? 🐒 3、搜索引擎模式
????????在精確模式的基礎上,對長詞再次進行切分,提高召回率,適合用于搜索引擎分詞。
????????#搜索引擎模式
????????jieba.lcut_for_search(text)
????????案例分析:
????????搜索引擎模式是將精確模式中的長詞,再次按照全模式切分。如圖所示:
seg_list = jieba.cut_for_search("小明碩士畢業于中國科學院計算所,后在日本京都大學深造") # 搜索引擎模式 print(", ".join(seg_list))? ? ? ? 🐒4、Viterbi算法
?此處,“杭研”并沒有在詞典中,但是也被Viterbi算法識別出來了。
? ? ? ? 🐒5、自定義詞典
????????在jieba自定義字典方面,目前我所了解到的常見的應用環境是各網絡平臺對違禁詞的查詢搜索處理,以及網站也對用戶個人信息的處理,對購物方面評價信息的處理等等。因此,我同樣也使用了jupyter notebook嘗試了自定義詞典的使用,text文本文件及運行結果如下圖所示:
?
//自定義詞典使用 import jieba test_sent = "李小福是創新辦主任也是云計算方面的專家" jieba.load_userdict("E://userdict.txt") words = jieba.cut(test_sent) print(list(words))?????????可以看出,我的自定義詞典在運行過程中,起到了具體的作用。可想而知,當我們在對一篇文章進行內容的分析處理是,也是可以使用jieba庫的!可以通過用戶自定義詞典來增強歧義糾錯能力!
部分文本解析語法:
def getext():fname=input("請輸入要打開的文件路徑及名稱,以txt結尾:")fo=open(fname) #打開該文件,默認是文本文件,文本文件其實就是一個字符串txt=fo.read() #<文件名>.read() 默認是讀取文件全部內容txt=txt.lower() #將文本所有字母小寫for ch in '!"#$%()*+<_>/:;<>=?@[\]\^_{}|~':txt=txt.replace(ch,'') #將文本中含有的所有上述字符都變為空格return txt hamlettxt=getext() words=hamlettxt.split() #默認值,是將文本中單詞按照空格分成一個一個的單詞,并將結果保存成列表類型 counts={} #定義一個空字典類型,因為我們希望單詞和該單詞出現的次數作為一個鍵值對 for word in words: #遍歷words列表的每一個值counts[word]=counts.get(word,0)+1 items=list(counts.items()) #將該字典轉化成一個列表,其中的鍵值對是以元組的形式存在 items.sort(key=lambda x:x[1],reverse=True) for i in range(10):word,count=items[i] #items[i] 是個元組,元組可以帶括號,可以不帶括號;賦值print("{:<10}{:>5}".format(word,count))? 🏔三、 使用語法
? ? ? ? ? ? ? ? 🐒1.? 對詞組的基本操作
?????????添加
str = "你好呀,我叫李華!多多關照!" jieba.add_word("你") print(jieba.lcut(str))? ? ? ? ?刪除
str = "你好呀,我叫李華!多多關照!" jieba.del_word("李華") print(jieba.lcut(str))?????????調整詞出現的頻率
str = "你好呀,我叫李華!多多關照!" jieba.suggest_freq(("李", "華"), True) print(jieba.lcut(str))? ? ? ? ? ? ? ?🐒 2.? 關鍵字提取
????????TFIDF算法
import jieba.analyse # 導包jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=()) jieba.analyse.TFIDF(idf_path=None) # 創建一個新的 TFIDF 實例,idf_path是指指定 IDF 頻率文件的路徑參數:
- sentence:要提取的文本
- topK:返回多少個具有最高TF/IDF權重的關鍵字。默認值為 20
- withWeight:是否返回關鍵字的TF/IDF權重。默認為假
- allowPOS:過濾包含POS(詞性)的單詞??諢o過濾,可以選擇['ns', 'n', 'vn', 'v','nr']
????????TextRank算法
jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v')) # 有默認詞性 jieba.analyse.TextRank() # 新建自定義 TextRank 實例????????? ? ? ? 🐒3.? 詞性標注
jieba.posseg.POSTokenizer(tokenizer=None)新建自定義分詞器,tokenizer 參數可指定內部使用的 jieba.Tokenizer 分詞器
jieba.posseg.dt 為默認詞性標注分詞器
import jieba.posseg str = "你好呀,我叫李華!多多關照!" pt = jieba.posseg.POSTokenizer() print(pt.lcut(str)) # 得到 pair鍵值對,使用遍歷取值 # print(jieba.posseg.cut(str)) # 作用一樣 for i, k in ps.lcut(str): print(i, k)? ? ? ? ? ? ? ? 🐒4.??Tokenize:返回詞語在原文的起止位置
- 注意,輸入參數只接受 unicode
默認模式
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]))?????????如上文所示,關于Pyhton中文分詞庫——jieba庫的介紹,暫時結束,如果后續學習到了新的內容,會再次進行介紹!各位大佬們,如果發現文章內容錯誤,希望可以指出,評論或私信都可🙂
部分內容來源:GitHub - fxsjy/jieba: 結巴中文分詞
總結
以上是生活随笔為你收集整理的Python——jieba优秀的中文分词库(基础知识+实例)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql注意事项2点
- 下一篇: eclipse在ubuntu13.04下