您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)如何在python中使用jieba庫,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
Python是一種編程語言,內(nèi)置了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強大,在許多領(lǐng)域中都有廣泛的應(yīng)用,例如最熱門的大數(shù)據(jù)分析,人工智能,Web開發(fā)等。
jieba是優(yōu)秀的中文分詞第三方庫
中文文本需要通過分詞獲得單個的詞語
jieba是優(yōu)秀的中文分詞第三方庫,需要額外安裝
jieba庫提供三種分詞模式,最簡單只需要掌握一個函數(shù)
pip install jieba
jieba分詞依靠中文詞庫
利用一個中文詞庫,確定漢字之間的關(guān)聯(lián)概率
漢字間概率大的組成詞組,形成分詞結(jié)果
精確模式:把文本精確地切分開,不存在冗余單詞(最常用)
全模式:把文本中所有可能的詞語都掃描出來,有冗余
搜索引擎模式:在精確模式的基礎(chǔ)上,對長詞再次切分
函數(shù) | 描述 |
---|---|
jieba.lcut(s) | 精確模式,返回一個列表類型的分詞結(jié)果 |
jieba.lcut(s,cut_all=True) | 全模式,返回一個列表類型的分詞結(jié)果,存在冗余 |
jieba.lcut_for_search(s) | 搜索引擎模式,返回一個列表類型的分詞結(jié)果,存在冗余 |
jieba.lcut(s) | 精確模式,返回一個列表類型的分詞結(jié)果 |
jieba.add_word(s) | 向分詞詞典增加新詞w |
例子:
>>> jieba.lcut("中國是一個偉大的國家") ['中國', '是', '一個', '偉大', '的', '國家'] >>> jieba.lcut("中國是一個偉大的國家", cut_all=True) ['中國', '國是', '一個', '偉大', '的', '國家'] >>> jieba.lcut_for_search("中華人民共和國是偉大的") ['中華', '華人', '人民', '共和', '共和國', '中華人民共和國', '是', '偉大', '的']
問題分析
英文文本: Hamlet 分析詞頻
https://python123.io/resources/pye/hamlet.txt
中文文本: 《三國演義》 分析人物
https://python123.io/resources/pye/threekingdoms.txt
代碼如下:
def getText(): # 打開 hamlet.txt 這個文件 txt = open("hamlet.txt", "r").read() # 避免大小寫對詞頻統(tǒng)計的干擾,將所有單詞轉(zhuǎn)換為小寫 txt = txt.lower() # 將文中出現(xiàn)的所有特殊字符替換為空格 for ch in '|"#$%^&*()_+-=\\`~{}[];:<>?/': txt = txt.replace(ch, " ") # 返回一個所以后單詞都是小寫的,單詞間以空格間隔的文本 return txt hamletTxt = getText() # split() 默認使用空格作為分隔符 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ù)進行排序,其中使用了 lambda 函數(shù)。更多解釋請看:
https://www.runoob.com/python/att-list-sort.html
下面使用 jieba 庫來統(tǒng)計《三國演義》中任務(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))
運行結(jié)果:
曹操 953 孔明 836 將軍 772 卻說 656 玄德 585 關(guān)公 510 丞相 491 二人 469 不可 440 荊州 425 玄德曰 390 孔明曰 390 不能 384 如此 378 張飛 358
我們可以看到得出的結(jié)果與我們想象的有些差異,比如
“卻說”、“二人”等與人名無關(guān)
“諸葛亮”、“孔明”都是同一個人
“孔明”和“孔明曰”分詞不符合我們的需求
所以我們需要對上面代碼進行優(yōu)化,在詞頻統(tǒng)計的基礎(chǔ)上,面向問題改造我們的程序。
下面是《三國演義》人物數(shù)量統(tǒng)計代碼的升級版,升級版中對于某些確定不是人名的詞,即使做了詞頻統(tǒng)計,也要將它刪除掉。使用寄一個集合excludes來接收一些確定不是人名但是又排序比較靠前的單詞列進去。
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))
運行結(jié)果:
曹操 963 孔明 847 張飛 366 商議 359 如何 352 主公 340 軍士 320 呂布 303 左右 298 軍馬 297 趙云 283 劉備 282 引兵 279 次日 278 大喜 274
可以看出還是有像“商議”、“如何”等不是人物的詞出現(xiàn)在統(tǒng)計結(jié)果,我們將這些詞加入到 excludes 中,多次運行程序后最后得到《三國演義》任務(wù)出場順序前20:
關(guān)于如何在python中使用jieba庫就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。