python jieba庫的基本使用
一、jieba庫概述
jieba是優(yōu)秀的中文分詞第三方庫
- 中文文本需要通過分詞獲得單個(gè)的詞語
- jieba是優(yōu)秀的中文分詞第三方庫,需要額外安裝
- jieba庫提供三種分詞模式,最簡單只需要掌握一個(gè)函數(shù)
二、jieba庫安裝
pip install jieba
三、jieba分詞的原理
jieba分詞依靠中文詞庫
- 利用一個(gè)中文詞庫,確定漢字之間的關(guān)聯(lián)概率
- 漢字間概率大的組成詞組,形成分詞結(jié)果
四、jieba分詞的3種模式
- 精確模式:把文本精確地切分開,不存在冗余單詞(最常用)
- 全模式:把文本中所有可能的詞語都掃描出來,有冗余
- 搜索引擎模式:在精確模式的基礎(chǔ)上,對長詞再次切分
五、jieba庫常用函數(shù)
函數(shù) | 描述 |
---|---|
jieba.lcut(s) | 精確模式,返回一個(gè)列表類型的分詞結(jié)果 |
jieba.lcut(s,cut_all=True) | 全模式,返回一個(gè)列表類型的分詞結(jié)果,存在冗余 |
jieba.lcut_for_search(s) | 搜索引擎模式,返回一個(gè)列表類型的分詞結(jié)果,存在冗余 |
jieba.lcut(s) | 精確模式,返回一個(gè)列表類型的分詞結(jié)果 |
jieba.add_word(s) | 向分詞詞典增加新詞w |
例子:
>>> jieba.lcut("中國是一個(gè)偉大的國家") ['中國', '是', '一個(gè)', '偉大', '的', '國家'] >>> jieba.lcut("中國是一個(gè)偉大的國家", cut_all=True) ['中國', '國是', '一個(gè)', '偉大', '的', '國家'] >>> jieba.lcut_for_search("中華人民共和國是偉大的") ['中華', '華人', '人民', '共和', '共和國', '中華人民共和國', '是', '偉大', '的']
六、文本詞頻示例
問題分析
- 英文文本: Hamlet 分析詞頻
https://python123.io/resources/pye/hamlet.txt
- 中文文本: 《三國演義》 分析人物
https://python123.io/resources/pye/threekingdoms.txt
代碼如下:
def getText(): # 打開 hamlet.txt 這個(gè)文件 txt = open("hamlet.txt", "r").read() # 避免大小寫對詞頻統(tǒng)計(jì)的干擾,將所有單詞轉(zhuǎn)換為小寫 txt = txt.lower() # 將文中出現(xiàn)的所有特殊字符替換為空格 for ch in '|"#$%^&*()_+-=\\`~{}[];:<>?/': txt = txt.replace(ch, " ") # 返回一個(gè)所以后單詞都是小寫的,單詞間以空格間隔的文本 return txt hamletTxt = getText() # split() 默認(rèn)使用空格作為分隔符 words = hamletTxt.split() counts = {} for word in 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] print("{0:<10}{1:>5}".format(word,count))
上面代碼中的
items.sort(key=lambda x:x[1], reverse=True)
是根據(jù)單詞出現(xiàn)的次數(shù)進(jìn)行排序,其中使用了 lambda 函數(shù)。更多解釋請看:
https://www.runoob.com/python/att-list-sort.html
下面使用 jieba 庫來統(tǒng)計(jì)《三國演義》中任務(wù)出場的次數(shù):
import jieba txt = open("threekingdoms.txt","r",encoding="utf-8").read() words = jieba.lcut(txt) counts = {} for word in words: if len(word) == 1: continue else: counts[word] = counts.get(word, 0) + 1 items = list(counts.items()) items.sort(key=lambda x:x[1], reverse=True) for i in range(15): word, count = items[i] print("{0:<10}{1:>5}".format(word,count))
運(yùn)行結(jié)果:
曹操 953 孔明 836 將軍 772 卻說 656 玄德 585 關(guān)公 510 丞相 491 二人 469 不可 440 荊州 425 玄德曰 390 孔明曰 390 不能 384 如此 378 張飛 358
我們可以看到得出的結(jié)果與我們想象的有些差異,比如
- “卻說”、“二人”等與人名無關(guān)
- “諸葛亮”、“孔明”都是同一個(gè)人
- “孔明”和“孔明曰”分詞不符合我們的需求
所以我們需要對上面代碼進(jìn)行優(yōu)化,在詞頻統(tǒng)計(jì)的基礎(chǔ)上,面向問題改造我們的程序。
下面是《三國演義》人物數(shù)量統(tǒng)計(jì)代碼的升級版,升級版中對于某些確定不是人名的詞,即使做了詞頻統(tǒng)計(jì),也要將它刪除掉。使用寄一個(gè)集合excludes來接收一些確定不是人名但是又排序比較靠前的單詞列進(jìn)去。
import jieba txt = open("threekingdoms.txt","r",encoding="utf-8").read() excludes = {"將軍","卻說","荊州","二人","不可","不能","如此"} words = jieba.lcut(txt) counts = {} for word in words: if len(word) == 1: continue elif word == "諸葛亮" or word == "孔明曰": rword == "孔明" elif word == "關(guān)公" or word == "云長": rword == "關(guān)羽" elif word == "玄德" or word == "玄德曰": rword == "劉備" elif word == "孟德" or word == "丞相": rword == "曹操" else: rword = word counts[rword] = counts.get(rword, 0) + 1 items = list(counts.items()) items.sort(key=lambda x:x[1], reverse=True) for i in range(15): word, count = items[i] print("{0:<10}{1:>5}".format(word,count))
運(yùn)行結(jié)果:
曹操 963 孔明 847 張飛 366 商議 359 如何 352 主公 340 軍士 320 呂布 303 左右 298 軍馬 297 趙云 283 劉備 282 引兵 279 次日 278 大喜 274
可以看出還是有像“商議”、“如何”等不是人物的詞出現(xiàn)在統(tǒng)計(jì)結(jié)果,我們將這些詞加入到 excludes 中,多次運(yùn)行程序后最后得到《三國演義》任務(wù)出場順序前20:
七、文本詞頻統(tǒng)計(jì)問題舉一反三
應(yīng)用問題擴(kuò)展
- 《紅樓夢》、《西游記》、《水滸傳》...等名著都可以統(tǒng)計(jì)它的任務(wù)出場次數(shù)
- 政府工作報(bào)告、科研論文、新聞報(bào)道...中出現(xiàn)的大量的詞頻進(jìn)行分析,進(jìn)而找到每篇文章的重點(diǎn)內(nèi)容
- 進(jìn)一步,對文本的詞語或詞匯繪制成詞云,使其展示的效果更加直觀
以上內(nèi)容資料均來源于中國大學(xué)MOOC網(wǎng)-北京理工大學(xué)Python語言程序設(shè)計(jì)課程
課程地址:https://www.icourse163.org/course/BIT-268001
以上就是python jieba庫的基本使用的詳細(xì)內(nèi)容,更多關(guān)于python jieba庫的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python調(diào)用易語言動(dòng)態(tài)鏈接庫實(shí)現(xiàn)驗(yàn)證碼功能
今天成功把易語言調(diào)用驗(yàn)證碼通殺的DLL在Python中成功調(diào)用了,心理美滋滋的,接著把我的經(jīng)驗(yàn)及示例代碼分享給大家,希望對大家有所幫助2021-08-08Python數(shù)學(xué)建模PuLP庫線性規(guī)劃實(shí)際案例編程詳解
本節(jié)以一個(gè)實(shí)際數(shù)學(xué)建模案例,來為大家講解PuLP求解線性規(guī)劃問題的建模與編程。來鞏固加深大家對Python數(shù)學(xué)建模PuLP庫線性規(guī)劃的運(yùn)用理解2021-10-10如何通過pycharm實(shí)現(xiàn)對數(shù)據(jù)庫的查詢等操作(非多步操作)
這篇文章主要介紹了如何通過pycharm實(shí)現(xiàn)對數(shù)據(jù)庫的查詢等操作(非多步操作),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07使用wxPython和Pandas實(shí)現(xiàn)XLSX分析器和網(wǎng)頁打開器
這篇文章主要為大家詳細(xì)介紹了如何使用wxPython和Pandas實(shí)現(xiàn)XLSX分析器和網(wǎng)頁打開器,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2024-10-10python網(wǎng)頁請求urllib2模塊簡單封裝代碼
這篇文章主要分享一個(gè)python網(wǎng)頁請求模塊urllib2模塊的簡單封裝代碼,有需要的朋友參考下2014-02-02