三國人物出場頻次分析
案例需求:《三國演義》這本小說(約64萬字)是大家耳熟能詳?shù)囊徊拷?jīng)典小說葵姥,我們都知道在作者羅貫中的筆中一直都視蜀漢為正統(tǒng)驶兜,那么真的是這樣嗎血柳,今天我們通過對其中人物的出場頻次進行分析迹恐;看看誰才是作者心中的“主角”逗载。
實現(xiàn)思路批什,利用分詞工具進行分詞然后進行詞頻統(tǒng)計
jieba分詞
由于中文文本中的單詞不是通過空格或者標點符號分割的农曲,我們要使用分詞工具進行分詞,jieba 是目前最好的 Python 中文分詞組件驻债,它主要有以下 3 種特性:
特點
- 支持 3 種分詞模式:精確模式乳规、全模式、搜索引擎模式
- 全模式合呐,把句子中所有的可以成詞的詞語都掃描出來, 速度非衬旱模快,但是不能解決歧義淌实;
- 搜索引擎模式冻辩,在精確模式的基礎(chǔ)上,對長詞再次切分拆祈,提高召回率恨闪,適合用于搜索引擎分詞。
算法
- 基于前綴詞典實現(xiàn)高效的詞圖掃描放坏,生成句子中漢字所有可能成詞情況所構(gòu)成的有向無環(huán)圖 (DAG)
- 采用了動態(tài)規(guī)劃查找最大概率路徑, 找出基于詞頻的最大切分組合
- 對于未登錄詞咙咽,采用了基于漢字成詞能力的 HMM 模型,使用了 Viterbi 算法
安裝
pip install jieba
主要函數(shù)列表
- jieba.cut
# 1
# jieba.cut 精確模式 將字符串分割成等量的中文
# jieba.cut生成的是一個生成器淤年,generator钧敞,
# 也就是可以通過for循環(huán)來取里面的每一個詞
seg_list = jieba.cut("我來到北京清華大學(xué)")
print(seg_list)
# <generator object Tokenizer.cut at 0x0C922470>
for seg in seg_list:
print(seg)
# 我
# 來到
# 北京
# 清華大學(xué)
seg_list = jieba.cut("我來到北京清華大學(xué)")
print("使用join: " + "/ ".join(seg_list))
# 使用join: 我/ 來到/ 北京/ 清華大學(xué)
- jieba.lcut
# 2
# jieba.lcut返回類型列表類型
seg_list = jieba.lcut("我來到北京清華大學(xué)")
print(seg_list)
# ['我', '來到', '北京', '清華大學(xué)']
- 是否采用全模式
# 3.
# cut_all 參數(shù)用來控制是否采用全模式蜡豹;即將字符串的所有分詞可能均列舉出來 冗余性最大 默認是精確模式
seg_list = jieba.cut("我來到北京清華大學(xué)", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
# Full Mode: 我/ 來到/ 北京/ 清華/ 清華大學(xué)/ 華大/ 大學(xué)
seg_list = jieba.lcut("我來到北京清華大學(xué)", cut_all=True)
print("lcut全模式: ", seg_list)
# lcut全模式: ['我', '來到', '北京', '清華', '清華大學(xué)', '華大', '大學(xué)']
- 搜索引擎模式
# 4
# 搜索引擎模式,首先執(zhí)行精確模式犁享,然后在對其中長詞進一步切分獲得最終結(jié)果
# 該模式更傾向于尋找短詞語余素,這種方式具有一定的冗余度,但是比全模式要少
seg_list = jieba.cut_for_search("小明碩士畢業(yè)于中國科學(xué)院計算所炊昆,后在日本京都大學(xué)深造") # 搜索引擎模式
print(", ".join(seg_list))
小結(jié) 如何選型:
- 如果希望對文本分詞準確桨吊,不產(chǎn)生冗余 ----》 精確模式
- 如果希望對文本分詞更為準確,不漏掉任何分詞的 可能結(jié)果 -----》全模式
- 如果沒想好怎么用凤巨,可以使用搜索引擎模式