python進行中文字頻、高頻字覆蓋率統計

題目:用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))       # 打印高頻字的總覆蓋率

代碼運行後的結果:

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章