Files
English/kouyu_english/assets/courses/A0/a0-01.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

386 lines
10 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-01",
"level": "A0",
"status": "approved",
"title": "你好,我是……",
"canDo": "介绍姓名并回应问候",
"categories": [],
"coreItems": [
{
"id": "A0-W36",
"type": "word",
"en": "hello",
"zh": "你好",
"match": [
[
"hello"
]
],
"review": {
"prompt": "把“你好”写成英文。",
"dictation": {
"sentence": "Hello, how are you?",
"meaning": "你好,你怎么样?"
}
}
},
{
"id": "A0-W37",
"type": "word",
"en": "hi",
"zh": "嗨",
"match": [
[
"hi"
]
],
"review": {
"prompt": "把“嗨”写成英文。",
"dictation": {
"sentence": "Hi, whats your name?",
"meaning": "嗨,你叫什么名字?"
}
}
},
{
"id": "A0-W40",
"type": "word",
"en": "thanks",
"zh": "谢谢",
"match": [
[
"thanks"
]
],
"review": {
"prompt": "把“谢谢”写成英文。",
"dictation": {
"sentence": "Im okay, thanks.",
"meaning": "我还可以,谢谢。"
}
}
},
{
"id": "A0-P01",
"type": "phrase",
"en": "I'm [name].",
"match": [
[
"my name is",
"/\\bi am (?!from\\b|good\\b|okay\\b|ok\\b|fine\\b|great\\b|tired\\b)[a-z]/"
]
],
"review": {
"prompt": "向新同学介绍你的名字。",
"hint": "用 Im / I am 或 My name is 介绍一个名字。",
"dictation": {
"sentence": "Im Tom.",
"meaning": "我是 Tom。"
}
},
"usage": {
"when": "想让对方知道你叫什么,自我介绍的时候说。",
"reply": "对方通常回一句 Nice to meet you.",
"swap": "My name is Tom. 意思一样,正式一点。",
"confuse": [
{
"id": "A0-P02",
"note": "What's your name? 是问对方,I'm Tom. 是说自己;别人问了你才用这句回答。"
}
]
}
},
{
"id": "A0-P02",
"type": "phrase",
"en": "What's your name?",
"match": [
[
"what is your name"
]
],
"review": {
"prompt": "问对方叫什么名字。",
"hint": "试着问:Whats your name?",
"dictation": {
"sentence": "Whats your name?",
"meaning": "你叫什么名字?"
}
},
"usage": {
"when": "你想知道对方叫什么名字。",
"reply": "对方会回 I'm Tom. 或 My name is Tom.",
"confuse": [
{
"id": "A0-P01",
"note": "I'm Tom. 是回答,What's your name? 是提问;想知道对方名字才用这句。"
},
{
"id": "A0-P05",
"note": "How are you? 问的是对方今天状态好不好,不是名字;见面先问好,想认识对方才问名字。"
},
{
"id": "A0-P07",
"note": "What's your phone number? 问的是号码;两句都以 What's your 开头,区别全在后面那个词。"
}
]
}
},
{
"id": "A0-P03",
"type": "phrase",
"en": "Nice to meet you.",
"match": [
[
"nice to meet you"
]
],
"review": {
"prompt": "对初次见面的人说“很高兴认识你”。",
"dictation": {
"sentence": "Nice to meet you.",
"meaning": "很高兴认识你。"
}
},
"usage": {
"when": "刚认识、知道对方名字之后,说一句客气话。",
"reply": "对方会回 Nice to meet you, too.",
"confuse": [
{
"id": "A0-P01",
"note": "I'm Tom. 是告诉对方你叫什么,Nice to meet you. 是知道名字之后才说的客气话。"
},
{
"id": "A0-P05",
"note": "How are you? 是在问状态,要回答好不好;Nice to meet you. 只是客气话,不用回答。"
}
]
}
}
],
"segments": [
{
"id": "a0-01-a",
"title": "你好,我是……",
"minutes": 12,
"itemIds": [
"A0-W36",
"A0-W37",
"A0-W40",
"A0-P01",
"A0-P02",
"A0-P03"
],
"grammarNote": "介绍自己时,把名字放在 I’m 后面:I’m Mia. 不需要先学复杂时态。",
"vocabulary": [
{
"id": "a0-01-hello",
"word": "Hello",
"meaning": "你好",
"example": "Hello. Im Mia.",
"exampleMeaning": "你好。我是 Mia。",
"ipa": "/həˈləʊ/"
},
{
"id": "a0-01-name",
"word": "name",
"meaning": "名字",
"example": "My name is Shen.",
"exampleMeaning": "我的名字是 Shen。",
"ipa": "/neɪm/"
},
{
"id": "a0-01-nice",
"word": "Nice to meet you",
"meaning": "很高兴认识你",
"example": "Nice to meet you, too.",
"exampleMeaning": "我也很高兴认识你。"
},
{
"id": "a0-01-thanks",
"word": "thanks",
"meaning": "谢谢",
"example": "Thanks. Nice to meet you, too.",
"exampleMeaning": "谢谢。我也很高兴认识你。",
"ipa": "/θæŋks/"
}
],
"sceneId": "a0-01-a",
"listening": {
"text": "Hello. Im Mia. Nice to meet you.",
"question": "Mia 在做什么?",
"options": [
"自我介绍",
"买东西",
"问时间"
]
},
"speaking": [
{
"text": "Hello. Im Shen. Nice to meet you.",
"tip": ""
}
],
"reading": {
"text": "Mia: Hello. Im Mia. Whats your name?\nShen: Hi. Im Shen.\nMia: Nice to meet you.\nShen: Thanks. Nice to meet you, too.",
"question": "Shen 说的最后一句是什么?",
"options": [
"Nice to meet you, too.",
"Whats your name?",
"Hi. Im Shen."
]
},
"writing": {
"prompt": "写一句问候和姓名介绍。",
"example": "Hello. Im Shen.",
"accept": [
[
"hello",
"hi"
],
[
"i am",
"my name is"
]
],
"hint": "试着同时写一句问候和姓名,例如:Hello. I’m …"
},
"independent": {
"prompt": "不看句框,介绍你的名字并回应“Nice to meet you”。",
"help": "Hi. Im … / Nice to meet you, too.",
"accept": [
[
"i'm + #word",
"i am + #word",
"my name is",
"my name's"
],
[
"nice to meet you"
]
]
}
}
],
"scenes": [
{
"id": "a0-01-a",
"kind": "main",
"title": "你好,我是……",
"goal": "问候、介绍姓名并回应见面问候",
"turns": [
{
"ai": "Hi! Im Mia. Whats your name?",
"aiZh": "嗨!我是 Mia。你叫什么名字?",
"goal": "说出你的名字",
"model": "Im Alex.",
"accept": [
"i'm + #word",
"i am + #word",
"my name is",
"my name's",
"name is"
]
},
{
"ai": "Nice to meet you. Say: Nice to meet you, too.",
"aiZh": "很高兴认识你。请说:Nice to meet you, too(我也很高兴认识你)。",
"goal": "回应 Nice to meet you",
"model": "Nice to meet you, too.",
"accept": [
"nice to meet you"
]
},
{
"ai": "Great! Say hello one more time.",
"aiZh": "太棒了!再打一次招呼吧。",
"goal": "再打一次招呼",
"model": "Hello!",
"accept": [
"hello",
"hi",
"hey"
]
},
{
"ai": "Now ask me my name!",
"aiZh": "现在请问我的名字!",
"goal": "反问对方的名字",
"model": "Whats your name?",
"accept": [
"what's your name",
"what is your name",
"your name",
"#question"
]
}
]
},
{
"id": "a0-meet",
"kind": "variant",
"title": "初次见面",
"goal": "姓名、地点、状态或喜好,并反问",
"turns": [
{
"ai": "Hi! My name is Mia. Whats your name?",
"aiZh": "嗨!我叫 Mia。你叫什么名字?",
"goal": "介绍姓名",
"model": "My name is Alex.",
"accept": [
"i'm + #word",
"i am + #word",
"my name is",
"my name's",
"name is"
]
},
{
"ai": "Nice to meet you. Where are you from?",
"aiZh": "很高兴认识你。你来自哪里?",
"goal": "说明来自哪里",
"model": "Im from Hong Kong.",
"accept": [
"i'm from",
"i am from",
"from + #word"
]
},
{
"ai": "Great! How are you today? Or what do you like?",
"aiZh": "很好!你今天怎么样?或者你喜欢什么?",
"goal": "表达状态或喜好",
"model": "Im good, thanks. / I like coffee.",
"accept": [
"good",
"okay",
"ok",
"fine",
"great",
"tired",
"i like",
"i love"
]
},
{
"ai": "Im good, thanks. Now ask me one question!",
"aiZh": "我很好,谢谢。现在请问我一个问题!",
"goal": "反问对方",
"model": "Whats your name? / Where are you from?",
"accept": [
"#question"
]
}
],
"practice": {
"title": "初次见面",
"summary": "介绍姓名、地点、状态或喜好,并反问对方",
"recapPrompt": "再用英语介绍一次自己。",
"alwaysOpen": true
}
}
],
"tasks": [],
"materials": []
}