import re def fre(TargetName,desName): '''打開 TargetName 文本,統計總單詞數、獨特的單詞數、單詞詞頻,並寫入 desName 文件中''' dict = {} # 存放單詞 number = 0 # 統計累計文本總單詞數 uniqueNum = 0 # 統計不重復的單詞的個數 # 打開文本 with open(TargetName,'r',encoding='utf-8') as f: for line in f: # 逐行讀取 # 使用正則表達式替換除了 字母和空白符 以外的所有其他符號 line = re.sub(r'[^\w\s-]+', ' ', line) word = line.split() # 將句子分割成單詞列表 for w in word: # 遍歷單詞列表 number += 1 # 每遍歷一個單詞,總單詞數就+1 w = w.lower() # 單詞轉換成全小寫的形式 if w not in dict: # 如果單詞不在dict里面,就把單詞放進去,設置這個單詞的詞頻為1,並且 duniqueNum+1 dict[w] = 1 uniqueNum += 1 else: # 如果單詞已經存在,就將詞頻數+1 dict[w] = dict[w]+1 #格式化打印 print(f'{"Total words": <20} {number}') print(f'{"Unique words": <20} {uniqueNum}') # 將詞頻寫入文件 with open(desName, 'w', encoding='utf8') as f: # 先寫入總詞數、不重復單詞數的信息 f.write(f'{"Total words": <20} {number}\n') f.write(f'{"Unique words": <20} {uniqueNum}\n') f.write('-----------------------------\n') for i in sorted(dict.items(), key=lambda x: x[1], reverse=True): # 將字典降序排序,並遍歷 f.write(f'{i[0]: <20} {i[1]}\n') print(f'{i[0]: <20} {i[1]}') if __name__=="__main__": # 要分析的文件的路徑 name = r'C:\blood.txt' # 生成的詞頻的路徑 desName = 'C:\dict.txt' fre(name,desName)