Files
English/kouyu_english/assets/courses/A0/a0-04.json
T
shenleiandClaude Opus 5 6b42b7abc3 feat: 独立词库、三向认词与当日快闪复习
## 独立词库

理解词原先只能跟着课程单元走,学完 A0 十课词汇量只增加约 22 个实词,
不足以解决"记不住单词"。新增一份独立词库 assets/words/wordbank.json
(2748 词,A1–B1),挂进 receptiveWordRegistry 的合成单元 bank-A1/A2/B1,
完全复用理解词已有的状态机,不依赖课程进度,第一天就能用。

数据来源、许可与合成规则记在 tool/words/DATA-NOTE.md:CEFR-J 定等级、
公开词书提供音标、AI 重写全部释义并生成例句、OpenSubtitles 提供口语词频。
词书部分为 CC BY-NC-SA 4.0 且上游权利不明,仅供个人非商用;
若要分发或上架,须替换音标那一列。

## 背单词机制

- 间隔阶梯 1/3/7/15/30/60/120 天,连续答对上一级,答错回第一级。
  原先首次答对后要等 7 天才复习,正是"第二天就忘"的成因。
- 每日新词上限(10 分钟 8 个 / 20 分钟 15 个 / 30 分钟 20 个)。
  阶梯第一级是次日,今天引入的新词就是明天的工作量。
- 新词按口语频率发放,不再按字母序 —— A1 从 a.m./ability 变成 no/not/know/just。
- 三个方向按层级轮转:看词(英→中)→ 听词(音→中)→ 想词(中→英)。
  想词题仍是选择题,不要求产出,理解词定位不变,不进升级分母。
- 单词页独立成 tab,首页今日任务卡下方给一张认词入口卡。

## 用法对照

课程 JSON 增加 usage 字段(when/reply/swap/confuse):一个句型用在什么场合、
对方通常怎么答、还能怎么说、跟哪个学过的句型容易混。
知道 How are you? 的意思,不等于知道它不是用来问名字的。

## 复习流

- 当日快闪(recap)独立成队列,不占复习预算,也不计入积压。
- 只发放当日预算内的量,其余保持到期状态等下次,不悄悄丢弃或改期。
- 答错的项隔几题后回来,而不是立刻重问。

测试 296 通过,flutter analyze 干净。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-20 23:54:17 +09:00

783 lines
18 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"id": "a0-04",
"level": "A0",
"status": "approved",
"title": "数字与电话号码",
"canDo": "说 010 与虚拟号码",
"categories": [],
"coreItems": [
{
"id": "A0-W01",
"type": "word",
"en": "zero",
"zh": "零",
"match": [
[
"zero"
]
],
"review": {
"prompt": "把“零”写成英文。",
"dictation": {
"sentence": "Zero, one, two.",
"meaning": "零、一、二。"
}
}
},
{
"id": "A0-W02",
"type": "word",
"en": "one",
"zh": "一",
"match": [
[
"one"
]
],
"review": {
"prompt": "把“一”写成英文。",
"dictation": {
"sentence": "My number is one-two-three.",
"meaning": "我的号码是一二三。"
}
}
},
{
"id": "A0-W03",
"type": "word",
"en": "two",
"zh": "二",
"match": [
[
"two"
]
],
"review": {
"prompt": "把“二”写成英文。",
"dictation": {
"sentence": "Its two oclock.",
"meaning": "现在两点。"
}
}
},
{
"id": "A0-W04",
"type": "word",
"en": "three",
"zh": "三",
"match": [
[
"three"
]
],
"review": {
"prompt": "把“三”写成英文。",
"dictation": {
"sentence": "Its three oclock.",
"meaning": "现在三点。"
}
}
},
{
"id": "A0-W05",
"type": "word",
"en": "four",
"zh": "四",
"match": [
[
"four"
]
],
"review": {
"prompt": "把“四”写成英文。",
"dictation": {
"sentence": "Its four oclock.",
"meaning": "现在四点。"
}
}
},
{
"id": "A0-W06",
"type": "word",
"en": "five",
"zh": "五",
"match": [
[
"five"
]
],
"review": {
"prompt": "把“五”写成英文。",
"dictation": {
"sentence": "Its five oclock.",
"meaning": "现在五点。"
}
}
},
{
"id": "A0-W07",
"type": "word",
"en": "six",
"zh": "六",
"match": [
[
"six"
]
],
"review": {
"prompt": "把“六”写成英文。",
"dictation": {
"sentence": "Its six oclock.",
"meaning": "现在六点。"
}
}
},
{
"id": "A0-W08",
"type": "word",
"en": "seven",
"zh": "七",
"match": [
[
"seven"
]
],
"review": {
"prompt": "把“七”写成英文。",
"dictation": {
"sentence": "Its seven oclock.",
"meaning": "现在七点。"
}
}
},
{
"id": "A0-W09",
"type": "word",
"en": "eight",
"zh": "八",
"match": [
[
"eight"
]
],
"review": {
"prompt": "把“八”写成英文。",
"dictation": {
"sentence": "Its eight oclock.",
"meaning": "现在八点。"
}
}
},
{
"id": "A0-W10",
"type": "word",
"en": "nine",
"zh": "九",
"match": [
[
"nine"
]
],
"review": {
"prompt": "把“九”写成英文。",
"dictation": {
"sentence": "Its nine oclock.",
"meaning": "现在九点。"
}
}
},
{
"id": "A0-W11",
"type": "word",
"en": "ten",
"zh": "十",
"match": [
[
"ten"
]
],
"review": {
"prompt": "把“十”写成英文。",
"dictation": {
"sentence": "Its ten oclock.",
"meaning": "现在十点。"
}
}
},
{
"id": "A0-W20",
"type": "word",
"en": "phone",
"zh": "电话",
"match": [
[
"phone"
]
],
"review": {
"prompt": "把“电话”写成英文。",
"dictation": {
"sentence": "Its a phone.",
"meaning": "这是一部电话。"
}
}
},
{
"id": "A0-P07",
"type": "phrase",
"en": "What's your phone number?",
"match": [
[
"what is your phone number"
]
],
"review": {
"prompt": "问对方的电话号码。",
"dictation": {
"sentence": "Whats your phone number?",
"meaning": "你的电话号码是多少?"
}
},
"usage": {
"when": "你想记下对方的电话号码。",
"reply": "对方会回 My number is 123.",
"confuse": [
{
"id": "A0-P02",
"note": "What's your name? 问名字,这句问号码;都以 What's your 开头,听清后面的词再答。"
}
]
}
},
{
"id": "A0-P08",
"type": "phrase",
"en": "My number is [digits].",
"match": [
[
"#numbers:3"
]
],
"review": {
"prompt": "报出一个虚构的三位号码。",
"hint": "说出至少三个英文数字,也可用 My number is … 开头。",
"dictation": {
"sentence": "My number is one-three-eight.",
"meaning": "我的号码是一三八。"
}
},
"usage": {
"when": "别人问你电话号码的时候,把号码报出来。",
"reply": "对方多半会复述一遍跟你确认。",
"confuse": [
{
"id": "A0-P01",
"note": "I'm Tom. 回答的是名字,My number is 123. 回答的是号码。"
}
]
}
}
],
"vocabulary": [
{
"id": "a0-04-three",
"word": "three",
"meaning": "三",
"example": "One, three, eight.",
"exampleMeaning": "一、三、八。",
"ipa": "/θriː/"
},
{
"id": "a0-04-number",
"word": "number",
"meaning": "号码",
"example": "My number is 1-3-8.",
"exampleMeaning": "我的号码是 138。",
"ipa": "/ˈnʌmbə(r)/"
},
{
"id": "a0-04-phone",
"word": "phone",
"meaning": "电话",
"example": "Whats your phone number?",
"exampleMeaning": "你的电话号码是多少?"
}
],
"segments": [
{
"id": "a0-04-a",
"title": "数字与电话号码",
"minutes": 12,
"itemIds": [
"A0-W01",
"A0-W02",
"A0-W03",
"A0-W04",
"A0-W05",
"A0-W06"
],
"grammarNote": "数字单独说就可以:zero, one, two。每个词之间稍微停顿。",
"vocabulary": [
{
"id": "A0-W01",
"word": "zero",
"meaning": "零",
"example": "Zero, one, two.",
"exampleMeaning": "零、一、二。",
"ipa": "/ˈzɪrəʊ/"
},
{
"id": "A0-W02",
"word": "one",
"meaning": "一",
"example": "One, two, three.",
"exampleMeaning": "一、二、三。",
"ipa": "/wʌn/"
},
{
"id": "A0-W03",
"word": "two",
"meaning": "二",
"example": "Two and three.",
"exampleMeaning": "二和三。",
"ipa": "/tuː/"
},
{
"id": "A0-W04",
"word": "three",
"meaning": "三",
"example": "Three, four, five.",
"exampleMeaning": "三、四、五。",
"ipa": "/θriː/"
},
{
"id": "A0-W05",
"word": "four",
"meaning": "四",
"example": "Four and five.",
"exampleMeaning": "四和五。",
"ipa": "/fɔː/"
},
{
"id": "A0-W06",
"word": "five",
"meaning": "五",
"example": "Five, please.",
"exampleMeaning": "五,请。",
"ipa": "/faɪv/"
}
],
"sceneId": "a0-04-a",
"listening": {
"text": "One, two, three.",
"question": "听到哪一组数字?",
"options": [
"123",
"132",
"213"
]
},
"speaking": [
{
"text": "Zero, one, two, three.",
"tip": ""
}
],
"reading": {
"text": "Mia: One, two, three.\nShen: Four, five.",
"question": "Shen 接着说了哪两个数字?",
"options": [
"Four, five",
"One, two",
"Three, four"
]
},
"writing": {
"prompt": "把 0、1、2、3 写成英文。",
"example": "zero, one, two, three",
"accept": [
[
"zero"
],
[
"one"
],
[
"two"
],
[
"three"
]
],
"hint": "请写出 zero、one、two、three 四个数字。"
},
"independent": {
"prompt": "不看帮助,说出三个 0 到 5 的数字。",
"help": "zero / one / two / three / four / five",
"accept": [
[
"#min:3",
"zero",
"one",
"two",
"three",
"four",
"five"
]
]
}
},
{
"id": "a0-04-b",
"title": "数字与电话号码",
"minutes": 12,
"itemIds": [
"A0-W07",
"A0-W08",
"A0-W09",
"A0-W10",
"A0-W11",
"A0-W20"
],
"grammarNote": "认物品可以说 It is a phone. 口语里也常说 Its a phone.",
"vocabulary": [
{
"id": "A0-W07",
"word": "six",
"meaning": "六",
"example": "Six, seven, eight.",
"exampleMeaning": "六、七、八。",
"ipa": "/sɪks/"
},
{
"id": "A0-W08",
"word": "seven",
"meaning": "七",
"example": "Seven, eight, nine.",
"exampleMeaning": "七、八、九。",
"ipa": "/ˈsevən/"
},
{
"id": "A0-W09",
"word": "eight",
"meaning": "八",
"example": "Eight, nine, ten.",
"exampleMeaning": "八、九、十。",
"ipa": "/eɪt/"
},
{
"id": "A0-W10",
"word": "nine",
"meaning": "九",
"example": "Nine and ten.",
"exampleMeaning": "九和十。",
"ipa": "/naɪn/"
},
{
"id": "A0-W11",
"word": "ten",
"meaning": "十",
"example": "Ten, please.",
"exampleMeaning": "十,请。",
"ipa": "/ten/"
},
{
"id": "A0-W20",
"word": "phone",
"meaning": "电话;手机",
"example": "It is a phone.",
"exampleMeaning": "它是一部手机。",
"ipa": "/fəʊn/"
}
],
"sceneId": "a0-04-b",
"listening": {
"text": "Six, seven, eight.",
"question": "听到哪一组数字?",
"options": [
"678",
"687",
"768"
]
},
"speaking": [
{
"text": "My phone is here.",
"tip": ""
}
],
"reading": {
"text": "Mia: Six, seven, eight.\nShen: Nine, ten.",
"question": "Shen 最后说了哪两个数字?",
"options": [
"Nine, ten",
"Six, seven",
"Seven, eight"
]
},
"writing": {
"prompt": "把 6、7、8 写成英文。",
"example": "six, seven, eight",
"accept": [
[
"six"
],
[
"seven"
],
[
"eight"
]
],
"hint": "请写出 six、seven、eight 三个数字。"
},
"independent": {
"prompt": "不看帮助,说出三个 6 到 10 的数字。",
"help": "six / seven / eight / nine / ten",
"accept": [
[
"#min:3",
"six",
"seven",
"eight",
"nine",
"ten"
]
]
}
},
{
"id": "a0-04-c",
"title": "数字与电话号码",
"minutes": 12,
"itemIds": [
"A0-P07",
"A0-P08"
],
"grammarNote": "报号码时一个数字一个数字说:one-three-eight,不把它读成一百三十八。",
"vocabulary": [
{
"id": "A0-P07",
"word": "What's your phone number?",
"meaning": "你的电话号码是多少?",
"example": "What's your phone number?",
"exampleMeaning": "你的电话号码是多少?"
},
{
"id": "A0-P08",
"word": "My number is one-three-eight.",
"meaning": "我的号码是 138。",
"example": "My number is one-three-eight.",
"exampleMeaning": "我的号码是 138。"
}
],
"sceneId": "a0-04-c",
"listening": {
"text": "My number is one-three-eight.",
"question": "号码是多少?",
"options": [
"138",
"183",
"318"
]
},
"speaking": [
{
"text": "My number is one-three-eight.",
"tip": "号码一个数字一个数字地读,数字之间稍停:one - three - eight。"
}
],
"reading": {
"text": "Mia: Whats your phone number?\nShen: My number is five-zero-two.\nMia: Five-two-zero?\nShen: No. Five-zero-two.",
"question": "Shen 最后确认的号码是哪一个?",
"options": [
"502",
"520",
"205"
]
},
"writing": {
"prompt": "把虚拟号码 139 写成英文。",
"example": "one-three-nine",
"accept": [
[
"#numbers:3"
]
],
"hint": "用英文一个一个写出三个数字,例如 one-three-nine。"
},
"independent": {
"prompt": "不看句框,说出一个三位虚拟号码。",
"help": "My number is one-two-three.",
"accept": [
[
"#min:3",
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine",
"zero"
]
]
}
}
],
"scenes": [
{
"id": "a0-04-a",
"kind": "main",
"title": "数字与电话号码",
"goal": "听辨并说出 0 到 5",
"turns": [
{
"ai": "Say zero, one, two.",
"aiZh": "请说 zero, one, two012)。",
"goal": "说出 zero, one, two",
"model": "zero, one, two",
"accept": [
"zero",
"one",
"two"
]
},
{
"ai": "Now say three, four, five.",
"aiZh": "现在请说 three, four, five345)。",
"goal": "说出 three, four, five",
"model": "three, four, five",
"accept": [
"three",
"four",
"five"
]
}
]
},
{
"id": "a0-04-b",
"kind": "main",
"title": "数字与电话号码",
"goal": "听辨 6 到 10 并认识 phone",
"turns": [
{
"ai": "Say six, seven, eight.",
"aiZh": "请说 six, seven, eight678)。",
"goal": "说出 six, seven, eight",
"model": "six, seven, eight",
"accept": [
"six",
"seven",
"eight"
]
},
{
"ai": "What is this? Say: It is a phone.",
"aiZh": "这是什么?请说:It is a phone(这是一部手机)。",
"goal": "说出 It is a phone.",
"model": "It is a phone.",
"accept": [
"it is a phone",
"it's a phone"
]
}
]
},
{
"id": "a0-04-c",
"kind": "main",
"title": "数字与电话号码",
"goal": "询问并报告三位号码",
"turns": [
{
"ai": "What is your phone number?",
"aiZh": "你的电话号码是多少?",
"goal": "报出你的三位号码",
"model": "My number is one-three-eight.",
"accept": [
"my number is + #digit"
]
},
{
"ai": "Say a three-digit number again.",
"aiZh": "请再说一次三位数字。",
"goal": "再说一次三位数字",
"model": "one-three-eight",
"accept": [
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine",
"zero"
]
}
]
},
{
"id": "a0-number",
"kind": "variant",
"title": "留个电话",
"goal": "问候并交换一个虚拟电话号码",
"turns": [
{
"ai": "Hi! How are you today?",
"aiZh": "嗨!你今天好吗?",
"goal": "说出你今天的状态",
"model": "Im good, thanks.",
"accept": [
"good",
"okay",
"ok",
"fine",
"great",
"tired"
]
},
{
"ai": "Good. Whats your phone number? Use a fake number.",
"aiZh": "好的。你的电话号码是多少?用一个虚拟号码。",
"goal": "报出一个号码",
"model": "My number is one-three-eight.",
"accept": [
"#digit"
]
},
{
"ai": "Sorry, please say it again.",
"aiZh": "抱歉,请再说一遍。",
"goal": "再说一次号码",
"model": "One-three-eight.",
"accept": [
"#digit"
]
},
{
"ai": "Thanks! Now ask me one question.",
"aiZh": "谢谢!现在问我一个问题。",
"goal": "反问对方",
"model": "Whats your phone number?",
"accept": [
"#question"
]
}
],
"practice": {
"title": "留个电话",
"summary": "问候、报出号码、再说一遍,并反问对方",
"recapPrompt": "用英语报一次你的虚拟电话号码。"
}
}
],
"tasks": [],
"materials": []
}