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级),那么课程的关键数据大概如下仅供参考,非学术研究
接下来就是正式的大纲编写了,困难的部分才刚刚开始……
【未完待续】