jieba库(jieba库的介绍以及分词原理,jieba的三种模式和常用函数,利用Jieba模块进行中文词语的统计)
環(huán)境:? Python3.6 +? windows10
jieba介紹以及分詞的原理
1. jieba 是Python中的優(yōu)秀的中文分詞第三方庫
? ? --中文文本需要通過分詞獲得單個的詞語
2. jieba 庫提供三種分詞模式 ,最簡單只需要掌握一個函數(shù)
3.jieba庫的安裝
? ?只需要在cmd 中,? ?pip? install jieba? ? ?
4.. jieba分詞的原理? ??
? ? ? ? 通過中文詞庫的方式來識別分詞的
? ? ? ? -- 利用一個中文詞庫,確定漢字之間的關(guān)聯(lián)概率
? ? ? ?-- 通過計算漢字之間的概率,漢字間概率大的組成詞組,形成分詞結(jié)果
? ? ? ?-- 除了分詞,用戶還可以添加自定義的詞組
?jieba的三種模式以及函數(shù)介紹
?1.jieba分詞的三種模式? ? ?
? ? ? 精確模式 :?把文本精確的切分開,不存在冗余單詞? ?(就是切分開之后一個不剩的精確組合) 常用
? ? ?全模式 :?把文本中所有可能的詞語都掃描出來,有冗余
? ? ? ? ? ? ? ? ? 即: 可能有一個文本,可以從不同的角度來切分,變成不同的詞語。在全模式下把不同的詞語都挖掘出來
? ? 搜索引擎模式:在精確 模式基礎(chǔ)上,對長詞語再次切分
2. jieba庫的常用函數(shù)
? ?(1)精確模式 函數(shù)? jieba.lcut(str)? ? ?返回列表類型
import jieba """jieba.lcut(str)""" s = "中國是一個偉大的國家" print(jieba.lcut(s)) """輸出結(jié)果: ['中國', '是', '一個', '偉大', '的', '國家']"""? (2)全模式? ? jieba.lcut(str,cut_all=True)? ? ?返回列表類型 ,有冗余
print(jieba.lcut(s,cut_all=True)) """輸出結(jié)果:['中國', '國是', '一個', '偉大', '的', '國家']"""(3) 搜索引擎模式: jieba.lcut_for_search(str)? 返回列表類型,有冗余
? ? ?先按照精確模式進(jìn)行分詞,然后把把比較長的詞進(jìn)行再次分詞
s1 = "中華人民共和國是偉大的" print(jieba.lcut_for_search(s1)) ''' 輸出結(jié)果 : ['中華', '華人', '人民', '共和', '共和國', '中華人民共和國', '是', '偉大', '的'] '''(4) jieba.add_word(str)? ?向分詞詞典添加新詞 str
?
?jieba使用實(shí)例
文本詞頻的統(tǒng)計 :? 一篇文章中,出現(xiàn)了哪些詞?哪些詞出現(xiàn)的最多?
?1. 首先是英文文本 ,對照英文的分詞,進(jìn)行中文分詞?? 用到的英文文本的網(wǎng)站? ?網(wǎng)站的文本賦全部賦值下來,然后進(jìn)行保存,:?https://python123.io/resources/pye/hamlet.txt
def getText():txt = open("E:\\\shuju\\hamelet.txt", "r").read()# 文章中的所有單詞轉(zhuǎn)化為小寫txt = txt.lower()# 使用空格個來替換掉所有的符號for ch in "!\"#$%&()*+,-./:;<>=?@[\\]_'{|}~":txt = txt.replace(ch, " ")return txtdef main():hamletTxt = getText()words = hamletTxt.split()counts = {}for word in words:# 獲取鍵對應(yīng)的值,如果鍵不存在,給出默認(rèn)值0# 獲取 每個單詞出現(xiàn)的次數(shù)counts[word] = counts.get(word, 0) + 1# 把字典的鍵值對轉(zhuǎn)化為元組,全部存放在列表里面items = list(counts.items())# 進(jìn)行排序,按照每個元組的第二個值,即字典的值,進(jìn)行降序排序items.sort(key=lambda x:x[1],reverse=True)# 對降序排序的前10個進(jìn)行處理,# 格式化輸出 : word: 最低長度為10,不夠補(bǔ)空格 counts: 最低長度為5,不夠的話補(bǔ)空格# print(items)for i in range(10):word,counts = items[i]print("{0:<10}{1:>5}".format(word,counts))if __name__ == '__main__':main()運(yùn)行結(jié)果:
the 1143 and 966 to 762 of 669 i 631 you 554 a 546 my 514 hamlet 471 in 4512.中文的文本進(jìn)行分析,和英文的相比不同,中文中的有名稱、詞語成語等
? ?現(xiàn)在只統(tǒng)計三國演義中的人物的出現(xiàn)次數(shù),取出排行前10的人物出現(xiàn)的次數(shù)
? ? 中文的文本網(wǎng)站: 三國演義的片段文本:?https://python123.io/resources/pye/threekingdoms.txt
? ?詳細(xì)看代碼的注釋
"""人物出場統(tǒng)計""" import jieba# 讀取所有的文件 txt = open("E:\\shuju\\threekingdoms.txt","r",encoding="utf-8").read() # 使用jieba分詞的精確模式 words = jieba.lcut(txt) counts = {} '''對進(jìn)行分詞的之后的結(jié)果進(jìn)行處理,解決類似于孔明和諸葛亮是一個人物的問題,給其重新賦值''' for word in words:# 排除長度為1的if len(word) == 1:continueelif word == "諸葛亮" or word == "孔明曰":rword = "孔明"elif word == "關(guān)公" or word == "云長":rword = "關(guān)羽"elif word == "玄德" or word == "玄德曰":rword = "劉備"elif word == "孟德" or word == "丞相":rword = "曹操"elif word == "周瑜" or word == "都督":rword = "周瑜"else:rword = word# 統(tǒng)計出場的次數(shù)counts[rword] = counts.get(rword,0) + 1 '''因?yàn)榉衷~之后,可能不是人物的詞要比人物的次數(shù)多,所以進(jìn)行處理,如果統(tǒng)計的結(jié)果里面出現(xiàn)了不是人物的結(jié)果,就對其進(jìn)行刪除,可以先不進(jìn)行處理,看看會出現(xiàn)哪些值,然后把這些值放在一個集合里面,然后可以進(jìn)行相應(yīng)的刪除多次進(jìn)行運(yùn)行,然后添加之后,就可以得到想要的結(jié)果''' excludes = {"將軍","卻說","二人","不可","荊州","不能","如此","商議","如何","主公","軍士","左右","軍馬","引兵","次日","大喜","東吳","天下","于是","今日","不敢","魏兵","陛下","不知","一人","人馬","漢中","只見","眾將","后主","大叫","上馬","蜀兵"} for ex in excludes:del counts[ex] # 刪除不是人物的值 items = list(counts.items()) # 安裝從大到小進(jìn)行排序 items.sort(key=lambda x:x[1],reverse=True) # 只要前排序時候出場次數(shù)最多的前10個 for i in range(10):word,count = items[i]print("{0:<10}{1:>5}".format(word,count))運(yùn)行結(jié)果:
曹操 1451 孔明 1383 劉備 1252 關(guān)羽 784 周瑜 438 張飛 358 呂布 300 趙云 278 孫權(quán) 264 司馬懿 2213.同樣的道理,我們可以進(jìn)行西游記等,還有其他的中文文本的統(tǒng)計,
? ? 還有中文的期刊。新聞等,都是可以進(jìn)行統(tǒng)計的。
總結(jié)
以上是生活随笔為你收集整理的jieba库(jieba库的介绍以及分词原理,jieba的三种模式和常用函数,利用Jieba模块进行中文词语的统计)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 555的传说
 - 下一篇: 理解 JavaScript 闭包