python编程应用中级_如何利用Python辅助开发HSK中级课程-数据统计篇
HSK中級(4級)課程的開發難度比1-3級大上許多。原因主要有:生詞量翻倍:3級是300個新增詞,4級是600個新增詞(腦容量明顯不夠了)
語法數量猛增:3級的語法數量在50左右,而4級的語法數量,基于《HSK4標準教程》的統計,為113個。另外,新增大量的詞義辨析,在HSK3是沒有的。
課文數量增多:由于生詞與語法的增加,導致課文數量也需要增加。HSK3級的課文數在80篇短課文,而HSK4級的課文數為100篇,其中對話60篇,短文40篇。
另外還有一些定量的數據需要匹配HSK4大綱要求,例如課文的長度,句子的長度,平均每篇課文的生詞數等等,這些都不再是人肉統計能做的了。
所以Python對于Excel表格的良好處理能力,可以幫助我們在前期獲得一些重要數據,為開發HSK中級課程提供數據基礎。
首先,列出需要的數據,見下表
生詞總數(基礎詞+擴展詞+超綱詞)
基礎詞個數
擴展詞個數
超綱詞個數
專有名詞個數
課文數
平均生詞個數(每篇text)
語法個數
平均每課語法個數
以上數據絕大部分只要用Excel就能計算。需要利用Python計算的數據如下
生詞復現率
平均文本字數(總)
平均文本字數(對話)
平均文本字數(敘述)
平均句長(字數)(總)
平均句長(字數)(對話)
平均句長(字數)(敘述)
在這里需要開發3個Python程序,對應不同的Excel表格(比如把對話和敘述的文本分開)就能計算所有數據了。3個Python程序為:生詞復線率:了解編寫課程的時候需要將生詞復現幾次,覆蓋量是多少
平均文本字數:了解編寫課文的文本長度,按漢字計算
平均句長:了解編寫課文的句子長度,按漢字計算
生詞復線率
首先計算每個生詞在所有100篇課文中出現的次數。然后就能根據數據畫出生詞復現曲線,代碼如下
#!/usr/bin/env python3
# _*_ coding: utf-8 _*_
#統計在HSK4文本里的詞匯的出現次數
import xlrd
import re
import string
import zhon.hanzi
import jieba
punctuation = string.punctuation + zhon.hanzi.punctuation
origin_script = xlrd.open_workbook("/HSK4課文文本匯總.xlsx")
sheet_1 = origin_script.sheet_by_index(0)
sheet_2 = origin_script.sheet_by_index(3)
nrows_text = sheet_1.nrows
nrows_words = sheet_2.nrows
def delete_head(text):
text = str(text)
text = text.replace('\\n','')
text = text.replace('\'','')
text = text.replace('text:','')
text = text.replace(' ','')
return text
def remove_punctuation(text):
new_text = re.sub(r'[{}]+'.format(punctuation),'',text)
return new_text
dict_word_num = {}
def get_all_text(num):
text_all = []
for i in range(1, num):
text_origin = sheet_1.cell(i,4)
text_no_head_no_pun = remove_punctuation(delete_head(text_origin))
text_words_list = list(jieba.cut(text_no_head_no_pun))
text_all = text_all + text_words_list
return text_all
text_all = get_all_text(nrows_text)
for i in range(1,nrows_words):
new_word = sheet_2.cell(i,0)
new_word_no_head = delete_head(new_word)
count = 0
for i in range(len(text_all)):
if new_word_no_head == text_all[i]:
count = count + 1
dict_word_num[new_word_no_head] = count
new_dict = sorted(dict_word_num.items(), key=lambda x:x[1], reverse=True)
print (new_dict)
計算結果如下按個數與次數排列按比例算
可以看到只有17.6%的生詞沒有復現,剩余的絕大多數的生詞都至少出現1次,整本教材的生詞復現率還是不錯的。
平均文本字數
這里的平均文本字數不包含標點符號(word中的字數統計是包含標點符號的,個人認為不是非常準確),所以要把所有的標點符號作為一個符號集,從文本中剔除,然后統計文本長度即可。
代碼如下(因為會經常調用,所以定義了一個函數)
def text_characters(text):
punctuation = ' /!:._?,:()《》()……~“”*"";,。!?、&=>
text = re.sub(r'[{}]+'.format(punctuation), '', text)
return len(text)
根據統計,《HSK4標準教程》的平均文本字數如下平均文本字數(總) :172
平均文本字數(對話) :178
平均文本字數(敘述) :163
可以看到在文本字數上,整本教材控制得相當不錯,即使是對話與敘述這兩種文體,字數差別也不大。
平均句長
首先計算一篇課文的文本總字數(不包含標點符號),然后計算有多少個句子符號,例如”,。!?;“。
之所以把逗號和分號也加入,是因為考慮到學生的閱讀習慣是根據逗號來切分的。如果一篇文章的逗號較多,會降低學生的閱讀難度。所以把包含逗號的分句也算作一個“句子”。
代碼如下 (與上面的平均文本字數一起使用)
def avg_sentence_len(text):
length3 = text_characters(text)
length1 = len(text)
punctuation = '!,。;?'
text_without_pnct = re.sub(r'[{}]+'.format(punctuation), '', text)
length2 = len(text_without_pnct)
avg_sentence_length = round(length3 / (length1-length2), 2)
return avg_sentence_length
根據統計,《HSK4標準教程》的平均句長如下:平均句長(字數)(總) :9.6
平均句長(字數)(對話) :9
平均句長(字數)(敘述) :10.6
可以看到,整本教材的句長也控制得相當不錯,兩種文體幾乎沒有顯著差異。
即使細分到每一課的數據,最低值8.24,最高值11.24,依然是不錯的句長控制。每課的平均句長
綜上所述,如果要自行開發HSK中級課程(4級),那么課程的關鍵數據大概如下僅供參考,非學術研究
接下來就是正式的大綱編寫了,困難的部分才剛剛開始……
【未完待續】
總結
以上是生活随笔為你收集整理的python编程应用中级_如何利用Python辅助开发HSK中级课程-数据统计篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对话数据集
- 下一篇: 挂断电话的实现(即类似于电话号码黑名单)