
简介新沪教牛津版四年级下册小学英语全册单元知识点小结面向使用该版本教材的四年级学生与英语教师。资源将全册各单元的重难点整理成一份可打印的复习文档围绕核心词汇、拓展词汇、核心句型与了解句型四个模块展开能帮助学习者系统梳理基础知识点也可作为教师期末复习提纲或教案补充材料。资源为单个docx文档体积约48KB内容结构清晰便于按模块查阅与打印。已有139人学习下载适合需要巩固词汇语法、强化句型运用的学生使用。文档在词汇部分涵盖水果、时间、感官动词、形容词等常用词类在句型部分包含How does it feel?、Is it... or...?、What nice grapes! 等典型表达并适当提供举一反三例句有助于提升学生在日常生活场景中的听说读写综合运用能力。1. 把一份四年级英语知识点docx当成教学数据源来用拿到新沪教牛津版四年级下册的全册知识点小结我的第一反应不是打印背诵而是把它当成一个结构还算规整的教学数据源。文档按四个模块组织每一模块都拆出核心词汇、拓展词汇、核心句型、了解句型词汇覆盖名词、动词、形容词、连词等十余种词性句型自带解读和举一反三。也就是说教案、试卷、复习卡都能从这一份docx里派生出来。这篇东西不聊怎么上课聊怎么用Python把这个docx拆成结构化数据再快速生成题库和自测页面。适合小学英语老师、教辅教研员以及想给孩子做精准复习的家长。2. 全册知识点文档的内容骨架模块、词性和句型的分层逻辑2.1 四个模块其实对应四类真实生活场景先看整体骨架。文档按 Module 分成四个板块第一个板块围绕五感词汇集中在水果、时间、自然现象句型聚焦触觉和味觉第二个板块围绕学科、运动、乐器句型聚焦课程安排和物品归属第三个板块围绕作息和日期星期、月份、时间表达大量出现动词短语成了重头戏第四个板块围绕动植物和成长故事出现 leaf、seed、duckling、swan 这类故事词汇句型聚焦拥有和喜好。这四块的划分逻辑不是语法难度而是生活主题。对老师来说这意味着讲词汇时要按场景打包而不是按字母表孤立背单词对程序化处理来说主题是现成的分类标签。下面这张表是我用来做单元概览的直接放在教案首页后面命制试卷时也按这个框架打标签。模块主题核心词汇示例核心句型示例Module 1五感体验strawberry, noise, shadow, feel, softHow does it feel? Its soft.Module 2爱好与课程subject, football, violin, joinWhat lessons do we have today?Module 3作息与日期quarter, Sunday, January, get upWhat time is it? Its half past seven.Module 4动植物与故事plant, leaf, seed, duckling, swanI have a garden.实际做复习时我会再补一列易错点比如 Module 3 的 half past seven 很容易漏掉 halfModule 2 的 play football 和 play the violin 在冠词上经常混淆。补完之后这张表就不再是单词列表而是整份复习资料的考点地图。2.2 核心词汇和拓展词汇的分工决定记忆优先级文档在每个模块里都分核心词汇和拓展词汇。核心词汇是要求会写、会拼、会用的拓展词汇是阅读和听力中能认出即可的。这个分级在设计复习计划时特别重要核心词汇用来做听写和填空拓展词汇用来做匹配和判断。如果全部混在一起学生很容易在 strawberry 和 triangle 这类词上消耗过多精力。我对比过这份文档的拓展词汇选得比较克制比如 Module 2 里只补了 today、behind、drum 这种高频词没有硬塞超纲内容。词汇表按词性分组这件事也值得注意。文档专门列出感官动词、名词、形容词、副词、代词、连词等类别。小学阶段的学生不一定需要知道副词这个术语但老师需要利用词性来设计替换练习。比如 touch、feel、smell 放在同一组学生能自然感知感官动词的用法共性。做自动提取时词性分类可以当作一个可靠的二级标签后面生成选择题时干扰项尽量从同类词里选题目才不至于一眼看出答案。2.3 核心句型的“解读举一反三”结构是天然的模板库这个文档最值钱的部分是核心句型。每条句型都包含一个示例句、一句解读、一组举一反三。比如 How does it feel? Its soft. 是原句How do the apples feel? They are hard. 是替换后的变体。从数据工程的角度看原句是模板变体是数据增强后的样本。教师可以人为总结替换规律程序也可以做部分自动提取。解读字段说明在什么场景下用举一反三给的是同句式不同词的替换结果这两部分直接决定了这个知识点是会背还是会用。还有一类了解句型比如 Is it a toy dog? No, it isnt. 和 Here is a photo of my family. 这些在试卷里通常以情景对话题出现不需要学生掌握完整语法结构但要能听懂并做出正确回答。我在整理时会把了解句型放进听力和口语题把核心句型放进笔试和填空这样整份文档就被拆解成了教学分层。2.4 用脚本统计各模块词条数量验证复习权重拿到文档之后我先跑一个最简单的统计看每个模块的词条密度避免凭感觉分配复习时间。用 python-docx 遍历段落并按 Module 分组即可from docx import Document from collections import Counter doc Document(新沪教牛津版四年级下册小学英语全册单元知识点小结.docx) counter Counter() module_name unknown for para in doc.paragraphs: text para.text.strip() if text.startswith(Module): module_name text continue if text: counter[module_name] 1 for k, v in counter.items(): print(k, v)这个脚本只做一件事统计每个模块下非空段落的数量。Counter 是 Python 标准库的计数器不需要额外安装。输出结果大致能看出第一个模块的词汇和句型密度最高复习权重也应当最高。这个数字本身就是后续设计单元试卷时的题量依据哪个模块词条多哪个模块就多出两道题。3. 用 python-docx 把知识点docx拆成结构化复习卡片3.1 为什么选 python-docx 而不是手动复制拿到的是 .docx最常见的处理方式有两种手动在 Word 里复制粘贴或者用 Python 读。手动复制的问题在于格式乱词条和解释经常粘成一团而且后期要再改成试题或卡片还得重新排版。python-docx 是处理 .docx 最成熟的库它能把段落、表格、样式暴露给程序适合做批量提取。安装命令很简单pip install python-docx建议装 3.x 版本2.x 和 3.x 在 style 处理上有差异而我们要做的段落遍历3.x 更稳。如果环境里已经有旧版先pip install -U python-docx升一下。装完后在脚本头部导入 Document 类即可不需要额外依赖。3.2 先做一次段落遍历摸清文档结构拿到文档后第一步不是写完整解析器而是先遍历一遍所有段落看看标题、词条、空行分别长什么样。基础代码如下from docx import Document doc Document(新沪教牛津版四年级下册小学英语全册单元知识点小结.docx) for i, para in enumerate(doc.paragraphs): text para.text.strip() if text: print(i, text)运行结果里会看到两类关键内容一类是 Module Using my five senses 这样的模块标题一类是“一、 核心词汇”这样的分类标题剩下的就是词条和例句。每个段落的样式大多是正文文本但这不妨碍我们用文本前缀来识别层级。如果打印太占屏可以改成只输出前 50 段确认规律后再写解析器。3.3 按前缀规则提取模块、分类和词条遍历确认后可以写一个结构化解析脚本。思路很直观遇到以 Module 开头的段落开启新模块遇到匹配“一、二、三、四”的段落开启新分类其他非空段落都归入当前分类。完整代码如下import re import json from docx import Document doc Document(新沪教牛津版四年级下册小学英语全册单元知识点小结.docx) data {modules: []} current_module None for para in doc.paragraphs: text para.text.strip() if not text: continue # 识别模块标题例如 Module Using my five senses if re.match(r^Module\s, text): current_module {name: text, categories: []} data[modules].append(current_module) continue if current_module is None: continue # 识别 一、核心词汇 这类分类标题去掉横杠后的空格 cat_match re.match(r^([一二三四五六七八九十])、(.*)$, text) if cat_match: current_module[categories].append( {name: cat_match.group(2).strip(), items: []} ) continue # 其他段落归入当前分类 if current_module[categories]: current_module[categories][-1][items].append(text) print(json.dumps(data, ensure_asciiFalse, indent2))这段代码有三处可以按实际文档调整。第一Module 后面可能是半角空格也可能是全角空格正则里的\s都能匹配。第二分类标题可能是“核心词汇”“拓展词汇”“核心句型”“了解句型”这里用通用的中文数字来匹配“一、二、三、四”不会因为具体名称变化而失效。第三空行全部跳过避免生成空节点。输出是一个嵌套 JSON每个模块下面挂分类分类下面挂词条后续转 CSV、转 JSON 都很方便。3.4 输出CSV让Excel和在线题库都能直接吃JSON 适合程序使用但教研场景里大多数同事更习惯用 Excel。所以我会把上一步的 data 再转成一份扁平 CSV。代码很短import csv with open(knowledge_points.csv, w, newline, encodingutf-8-sig) as f: writer csv.writer(f) writer.writerow([module, category, content]) for mod in data[modules]: for cat in mod[categories]: for item in cat[items]: writer.writerow([mod[name], cat[name], item])这里有个细节编码必须用utf-8-sig普通utf-8写入的 CSV 用 Excel 打开会乱码因为 Excel 默认按 ANSI 解析。加上 BOM 之后双击打开就是正常中文。字段顺序我固定为 module、category、content 三列内容列里可能同时存在词汇解释和例句这是因为原文档在核心句型分类下的每一条都是整句带解读强行拆分反而会丢信息。如果后续要做更细的训练数据可以在这个 CSV 基础上再写一层规则去拆。3.5 docx表格内容不要漏读这个文档里还有不少表格形态的内容比如 Module 2 的课程表、Module 3 的星期和月份但原文档大多以段落文本呈现。如果以后处理其他年级的类似文档要注意一个坑docx 里的表格不在 paragraphs 里必须单独遍历 doc.tables。常见做法是把表格按行读出补到 CSV 末尾for tbl in doc.tables: for row in tbl.rows: cells [cell.text.strip() for cell in row.cells] print(cells)为什么要单独考虑因为课程表、月份表这类信息在试卷中经常被改成“根据表格回答问题”的题型。如果只遍历段落表格信息会被静默丢掉后期补数据又得重新打开 Word很浪费时间。所以我的习惯是段落和表格都解析最后统一写入 CSV。4. 基于知识库快速生成选择题与填空题库4.1 把核心句型映射成四种常见题型生成题库之前先想清楚题型和知识点的对应关系。以这份文档为例大致可以分成四类词汇题对应核心词汇里的名词、动词、形容词适合做看图选词或英译中句型题对应核心句型适合做情景选择给出中文场景选英文句子语法点对应单复数、第三人称单数、冠词适合做填空和改错听力题对应了解句型适合做听音选答语不需要在笔试里出现。一份完整的单元试卷通常就是把上面四类题按比例拼起来。这份文档恰好把词汇、句型、语法点都混在段落里所以我先按关键词给词条打标再按标签生成对应题目。这里的关键是保留上一步 CSV 里的 category 字段直接用它判断该词条属于词汇还是句型。4.2 用Python生成单选题的完整示例下面是一个简单的生成器。它从整理好的题目构造列表里随机选题然后生成题干、选项和正确答案import random # 每条题目 (题干, 正确答案, 三个干扰项) item_pool [ (How does it feel?, Its soft., [Its sweet., Its high., Its loud.]), (What time is it?, Its half past seven., [Its seven., Its six thirty., Its eight fifteen.]), (What lessons do we have today?, We have Chinese, Maths and English., [I like Chinese., She has Art., Yes, we do.]), (Whose guitar is it?, Its Joes guitar., [Its Joe., He is Joe., Joe plays it.]), ] def make_choice(question, correct, wrong_options): options wrong_options [correct] random.shuffle(options) return { question: question, options: options, answer: correct } for item in item_pool: t make_choice(*item) print(t[question]) for idx, opt in enumerate(t[options], 1): print(f {idx}. {opt}) print(f (正确答案: {t[answer]}))逻辑说明make_choice 接收题干、正确选项和干扰项列表把干扰项和正确答案合并后打乱得到的就是可直接使用的单选题。item_pool 是人工整理的种子数据真正使用时建议把 CSV 里的句型分类读进来用正则把解读里的内容拆成题干和答案干扰项则从同模块的其他句型中抽取。这里有个参数要求干扰项尽量控制在 3 个4 个选项是小学英语试卷的常规配置且干扰项要和正确答案保持同样的句型和时态。比如题干是 What time is it?干扰项就不要出现 I like Maths. 这种完全不同话题的句子。4.3 举一反三句型可以生成替换式改写题文档里的举一反三是很好的改写素材。比如原句 The sun rises in the morning.举一反三是 The moon goes down in the morning.学生需要理解主语和动词的替换关系。我不主张全自动生成这类题因为单复数、时态、冠词都会中出错。我的常见做法是让脚本输出半成品把原句和举一反三句子拆成主语、谓语、宾语槽位再由老师手工校准一遍。下面是一个槽位提取示例def extract_slots(sentence): # 把句子按空格切成词取第一个词和其余部分。 words sentence.split() return { first: words[0] if words else , rest: .join(words[1:]) } print(extract_slots(The sun rises in the morning.))输出会是 {first: The, rest: sun rises in the morning.}这只是一个演示。真正用的时候要把冠词和名词合并成一个槽位不然 the sun 会被拆成 The 和 sun。我的建议是先在同一模块内找句型结构相同的句子再人工确认替换词最后生成题目。对一次单元考来说准备 8 到 10 道这样的改写题就够了。4.4 用知识点矩阵给试卷打分和查漏生成题库之后还要解决试卷覆盖度的问题。拿到一份现成试卷我会做一个知识点矩阵行是模块列是词汇、句型、语法、听力每个空格里记录这道题考的是哪个词或哪条句型。然后用 Excel 透视表统计每个格子的题目数量就能看出这张试卷是偏向第一个模块的感官形容词还是第三个模块的时间表达。这个矩阵也能反过来用把学生错题反向映射到知识点针对性地布置复习任务。下表是我常用的简化模板模块词汇句型语法Module 1 五感soft, hard, thickHow does it feel?单复数Module 2 爱好football, violinWhose guitar is it?play/the 乐器Module 3 作息quarter, oclockWhat time is it?时间介词Module 4 动植物leaf, seedI like reading.一般现在时这个表格的用途有两个一是规划新试卷的覆盖面二是分析已有试卷的薄弱点。如果某个模块的语法列是空的说明这张试卷对那个模块的语法考查不足后期要补题。我一般会把表格粘到试卷分析报告的首页后面再贴错题统计这样教研组讨论时一眼就能看到问题。5. 进阶技巧把知识点小结变成可交互的自测页面5.1 本地HTML Quiz页面怎么搭前面生成的题库最终要能让孩子用起来。我通常会把题库导出成 JSON然后塞进一个单文件 HTML 页面双击即可打开不需要服务器也不需要联网。结构是这样的页面上显示一道题四个选项按钮点按钮后判断正误最后显示得分。核心代码不需要框架原生 JavaScript 就能写完。下面给一个最小示例注意题库是从 CSV 转出来的数组!DOCTYPE html html head meta charsetutf-8 title四年级下册知识自测/title /head body div idquiz/div script const questions [ {q: How does it feel?, opts: [Its sweet., Its hard., Its soft., Its high.], a: 2}, {q: What time is it?, opts: [Its seven., Its eight., Its half past seven., Its six.], a: 2} ]; let idx 0, score 0; const quiz document.getElementById(quiz); function render() { if (idx questions.length) { quiz.innerHTML 完成得分 score / questions.length; return; } const item questions[idx]; let html p item.q /p; item.opts.forEach((opt, i) { html button onclickcheck(${i})${opt}/button; }); quiz.innerHTML html; } function check(i) { if (i questions[idx].a) score; idx; render(); } render(); /script /body /html这段代码的逻辑很直接questions 数组里每项有题干、四个选项和正确选项的索引 arender 负责渲染当前题check 负责判定并切换下一题。真正做题时我不会直接在 HTML 里手写题目而是用脚本把第 4.2 节生成的 CSV 转成 JSON 后粘贴进 questions。转的时候注意把正确答案的文本换成索引或者改为在 check 里比较文本文本比较更省事也避免索引错位。5.2 一个容易踩的坑play the violin 和 play basketball生成题目时最容易翻车的点是乐器名词前冠词的处理。文档里明确写了 play the violin、play the guitar但在拓展词汇里又出现了 basketball、football很多自动生成的题目会把 play the basketball 当成正确选项。我的检查方法是写一个很小的正则把 play (the )?(football|basketball|volleyball|violin|guitar|piano) 这类组合全部抽出来对抽到的内容做一次人工复核。判断逻辑可以放在生成脚本的最后一步当作安全检查import re # 从之前生成的 CSV 读入所有句子 with open(knowledge_points.csv, encodingutf-8-sig) as f: rows list(csv.DictReader(f)) for row in rows: m re.search(rplay (the )?(football|basketball|volleyball|violin|guitar|piano), row[content]) if m: has_the bool(m.group(1)) item m.group(2) if item in [football, basketball, volleyball] and has_the: print(可疑play the, item) elif item in [violin, guitar, piano] and not has_the: print(可疑play, item)这段脚本会把有问题的组合打到控制台比如 play the basketball人工看到后改掉即可。最后生成的 HTML 页面也可以再加一个错题回顾按钮把答错的题目重新抽出来显示一遍这样复习闭环就完整了。整个流程从 docx 到自测页一次跑通后下次处理其他年级的知识点文档只需要把解析脚本的目录换成新的文件路径。本文还有配套的精品资源点击获取