題目:用python統計《孟子》總體長度、字種、字頻、高頻字覆蓋率。
《孟子》全文下載:點擊下載
高頻字:字頻>=500的字
本題有三個地方要注意:
1、《孟子》中含有大量的標點符號,統計時應該把它們排除在外。
2、統計字頻、高頻字覆蓋率是難點。
3、如何用相對直觀、好看的方式打印輸出結果。
源代碼:
#《孟子》總體長度
f = open('ex_menzi.txt', 'r', encoding='utf-8')
text=f.read()
for ch in "《》,。:!‧「」『』〈〉;﹖.! \n?":
text = text.replace(ch, "") # 去掉文章的標點符號
print("《孟子》的總體長度:", len(text))
#《孟子》字種
result = set(text)
print("《孟子》的字種:\n", result)
print("《孟子》的字種總長:", len(result))
#《孟子》字頻
my_dict={}
for char in text:
if char in my_dict:
my_dict[char] = my_dict[char]+1
else:
my_dict[char] = 1
#《孟子》高頻字的覆蓋率
rate = {} # 創建字典,儲存每個高頻字及其對應的覆蓋率
number = 0 # 統計所有高頻字出現的總次數
for word in my_dict.keys():
if my_dict.get(word, 0) >= 500: # 高頻字字頻>=500
rate[word] = my_dict.get(word, 0)/len(text)
number = number + my_dict.get(word, 0)
else:
continue
# 輸出高頻字覆蓋率
items = list(rate.items()) # 返回所有的鍵值對
print("每個高頻字的覆蓋率如下:")
for i in range(len(items)):
word, count = items[i]
print(word, " ", '%.2f%%' % (count * 100)) # 打印每個高頻字及其覆蓋率
print("高頻字總覆蓋率是:")
print('%.2f%%' % (number/len(text) * 100)) # 打印高頻字的總覆蓋率
代碼運行後的結果: