資深Python程序員教你簡單、有趣的程序:
使用第三方庫jieba切分,統計統計名著三國演義中人物名字出現次數。
資深Python程序員教你統計,三國中人物名字出現的頻率,很簡單
其中一個jieba庫是一個對中文文本依照漢字間關聯概率進行詞組劃分的第三方庫,使用簡單,且非常好用
import jieba
def getWords():
txt = open('novels/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
word_list = list(counts.items())
word_list.sort(key = lambda x : x[1], reverse = True)
return word_list
進行人肉優化,去掉不是人名的詞語,并將一些指同一個人物的詞合并到一個人物下。
import jieba
def countWords(excludes, merges):
txt = open('novels/threekingdoms.txt', 'r', encoding = 'utf-8').read()
words = jieba.lcut(txt)
counts = {}
# 取出長度為一的詞和符號以及excludes中的詞
for word in words:
if len(word) == 1 or word in excludes:
continue
else:
counts[word] = counts.get(word, 0) + 1
# 合并名稱相同的人名
for merge in merges:
for name in merge[1]:
counts[merge[0]] += counts.get(name, 0)
del counts[name]
word_list = list(counts.items())
word_list.sort(key = lambda x : x[1], reverse = True)
return word_list
excludes = {'卻說','二人','不可','主公','陛下','漢中','只見','眾將','后主','蜀兵','上馬','大叫','太守','此人','夫人',
'先主','后人','背后','城中','天子','一面','何不','大軍','忽報','先生','百姓','何故','不能','如此','如何',
'然后','先鋒','不如','趕來','原來','令人','江東','下馬','喊聲','正是','徐州','忽然','荊州','左右','軍馬',
'因此','成都','不見','未知','大敗','大事','之后','一軍','引軍','起兵','軍中','接應','引兵','次日','大喜',
'進兵','大驚','可以','以為','大怒','不得','心中','下文','一聲','追趕','糧草','天下','東吳','于是','都督',
'曹兵','一齊','分解','回報','分付','只得','出馬','三千','大將','許都','隨后','報知','今日','不敢','魏兵',
'前面','之兵','且說','眾官','洛陽','領兵','商議','軍士','星夜','精兵','城上','之計','不肯','相見','其言',
'一日','而行','文武','襄陽','準備','若何','出戰','親自','必有','一人','人馬','不知','何人','此事','之中',
'伏兵','祁山','乘勢','忽見','大笑','樊城','兄弟','首級','立于','西川','傳令','當先','五百','一彪','堅守',
'此時','之間','投降','五千','埋伏','長安','三路','遣使','將軍','關興','軍師','朝廷','三軍','大王','回見',
'大將軍','必然','將士','是夜','小路' }
merges = [ ('劉備',('玄德','玄德曰','玄德問','劉玄德','玄德大','玄德自','玄德聞','皇叔','劉皇叔')),
('關羽',('關公','云長','關云長')),
('孔明',('諸葛亮','孔明曰','孔明笑','孔明之','孔明自')),
('曹操',('丞相','孟德','曹公','曹孟德')),
('張飛',('翼德','張翼德'))
]
word_list = countWords(excludes, merges)
for i in range(30):
word, count = word_list[i]
print('{0:^10}{1:{3}^10}{2:^15}'.format(i+1, word, count, chr(12288))) # chr(12288)為中文空格 ```
結果如下,當然其中類似將軍、英雄、主公、大哥、君這種詞語無法判斷指的是誰,這里僅統計能夠判斷的,所以這里只能做一個相對的參考。
1 劉備 1578
2 曹操 1485
3 孔明 1485
4 關羽 820
5 張飛 393
6 呂布 300
7 趙云 278
8 孫權 264
9 司馬懿 221
10 周瑜 217
11 袁紹 191
12 馬超 185
13 魏延 180
14 黃忠 168
15 姜維 151
16 馬岱 127
17 龐德 122
18 孟獲 122
19 劉表 120
20 夏侯惇 116
21 董卓 114
22 孫策 108
23 魯肅 107
24 徐晃 97
25 司馬昭 89
26 夏侯淵 88
27 王平 88
28 劉璋 85
29 袁術 84
30 呂蒙 83
以上是Python語言中的一個小案例,僅供大家參考。
另外有需要云服務器可以了解下創新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前標題:資深Python程序員教你統計,三國中人物名字出現的頻率,很簡單-創新互聯
標題來源:http://vcdvsql.cn/article30/ddpgpo.html
成都網站建設公司_創新互聯,為您提供網站收錄、移動網站建設、網站策劃、App設計、標簽優化、軟件開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯