高考英語詞頻統計

前言:受我表哥邀請,幫忙統計歷年的高考英語詞頻,並保存到表格中,這樣方便發給學生學習需要重點注意的單詞,正好他也對python感興趣,我就簡單的給他寫了一個小程序,每次把要統計的word文檔放入data文件中就雙擊寫好的程序可以給到Excel的單詞的詞頻,也非常的方便對於不熟悉編程的人士運用它!


操作環境: window10, python37, jupyter

數據樣式:
在這裏插入圖片描述



1、讀取文件夾中的每個word名稱

import os
filelist=os.listdir("./data")
for fileName in filelist:
    pathName = "./data/" + fileName
    print (pathName)
./data/2017全國卷1高考英語試題及其參考答案.docx
./data/2017年全國Ⅱ卷英語高考試題(Word精校版,含答案).docx
./data/2017年高考英語全國卷3(含答案).docx
./data/2018全國Ⅰ卷英語高考真題.docx
./data/2018全國Ⅱ卷英語高考真題.docx
./data/2018全國Ⅲ卷英語高考真題.docx
./data/2019年全國卷Ⅱ英語高考試題文檔版.docx
./data/2019年全國卷Ⅲ高考英語試題.docx
./data/2019高考英語全國1.docx


2、讀取每個word的文字

import docx2txt
my_text = docx2txt.process(pathName)
print (my_text)

在這裏插入圖片描述
爲了避免干擾因素,我們可以提前去掉/n, /t, \xa0, 數字,A., B.,C., D., 去掉選項序號加上點是爲了識別出它是選項,不是大寫的字母。



3、數據清洗

這裏進行數據清洗的目的主要是去掉中文,換行符,製表符,ABDC選項,並把單詞大寫換爲小寫等等

filelist=os.listdir("./data")
word_text = ""
for fileName in filelist:
    my_text = docx2txt.process("./data/" + fileName)#讀取word的內容
    text = "".join(i for i in my_text if ord(i) < 256)#去除中文
    word_text = word_text + text #把所有的試卷內容合併到一起
    print ("導入:",fileName, " 字符長度:",len(text))
#替換掉干擾元素爲空格
word_text = word_text.replace('\n',' ').replace('\xa0', ' ').replace('\t', ' ').replace('A.', ' ').replace('B.', ' ').replace('C.', ' ').replace('D.', ' ')
word_text = "".join(re.findall("[^\d']+",word_text)).lower()#替換掉數值,並把大寫字母全部轉爲小寫

附:字母大小轉換

strs = "yangyou.Ayouleyang"
print(strs.upper())          # 把所有字符中的小寫字母轉換成大寫字母
print(strs.lower())          # 把所有字符中的大寫字母轉換成小寫字母
print(strs.capitalize())     # 把第一個字母轉化爲大寫字母,其餘小寫
print(strs.title())          # 把每個單詞的第一個字母轉化爲大寫,其餘小寫 
YANGYOU.AYOULEYANG
yangyou.ayouleyang
Yangyou.ayouleyang
Yangyou.Ayouleyang

4、詞頻統計

words = jieba.lcut(word_text) #分詞
counts = {}
#過濾掉字符爲1的詞,包括符號
for word in words:
    if len(word) == 1:
        continue
    else:
        #把結果添加進字典,並統計詞頻
        counts[word] = counts.get(word, 0) + 1       
items = sorted(counts.items(), key=lambda item:item[1], reverse=True)#對字典進行排序
#把字典變爲數組,方便寫入Excel
all_page = []
for i in range(len(items)):
    word, count = items[i]
    page = [word, count]#生成數組
    all_page.append(page)

5、寫入表格

book = xlwt.Workbook(encoding = 'utf-8')#創建工作簿
sheet = book.add_sheet('高考',cell_overwrite_ok=True)#創建表名,cell_overwrite_ok=True用於確認同一個cell單元是否可以重設值
head = ['單詞','詞頻']#定義表頭,即Excel中第一行標題
for h in range(len(head)):
    sheet.write(0,h,head[h])#寫入表頭

j = 1#第一行開始
for list in all_page:
    k = 0
    for date in list:
        sheet.write(j, k, date)#迭代列,並寫入數據,重新設置,需要cell_overwrite_ok=True
        k = k+1
    j = j+1
book.save('./高考單詞詞頻統計表.xls')

6、源碼彙總

import os,docx2txt, re, jieba, xlwt

filelist=os.listdir("./data")
word_text = ""
for fileName in filelist:
    my_text = docx2txt.process("./data/" + fileName)#讀取word的內容
    text = "".join(i for i in my_text if ord(i) < 256)#去除中文
    word_text = word_text + text #把所有的試卷內容合併到一起
    print ("導入:",fileName, " 字符長度:",len(text))
#替換掉干擾元素爲空格
word_text = word_text.replace('\n',' ').replace('\xa0', ' ').replace('\t', ' ').replace('A.', ' ').replace('B.', ' ').replace('C.', ' ').replace('D.', ' ')
word_text = "".join(re.findall("[^\d']+",word_text)).lower()#替換掉數值,並把大寫字母全部轉爲小寫

words = jieba.lcut(word_text) #分詞
counts = {}
#過濾掉字符爲1的詞,包括符號
for word in words:
    if len(word) == 1:
        continue
    else:
        #把結果添加進字典,並統計詞頻
        counts[word] = counts.get(word, 0) + 1       
items = sorted(counts.items(), key=lambda item:item[1], reverse=True)#對字典進行排序
#把字典變爲數組,方便寫入Excel
all_page = []
for i in range(len(items)):
    word, count = items[i]
    page = [word, count]#生成數組
    all_page.append(page)

book = xlwt.Workbook(encoding = 'utf-8')#創建工作簿
sheet = book.add_sheet('高考',cell_overwrite_ok=True)#創建表名,cell_overwrite_ok=True用於確認同一個cell單元是否可以重設值
head = ['單詞','詞頻']#定義表頭,即Excel中第一行標題
for h in range(len(head)):
    sheet.write(0,h,head[h])#寫入表頭

j = 1#第一行開始
for list in all_page:
    k = 0
    for date in list:
        sheet.write(j, k, date)#迭代列,並寫入數據,重新設置,需要cell_overwrite_ok=True
        k = k+1
    j = j+1
book.save('./高考單詞詞頻統計表.xls')

統計結果:
在這裏插入圖片描述

最後,把代碼和文件夾的數據放在一起,只需要把要統計的word文檔放進data中,雙擊count.py就完成統計,並生成“高考單詞詞頻統計表.xls”
在這裏插入圖片描述

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