feat: A1 短材料复现本单元理解词,并加入黑夜模式
课程内容 - 重写全部 21 个 A1 单元的听读材料,把本单元理解词织进听/读文本, 单元内理解词复现率从约 20% 提升到约 77%(各单元 56–96%)。 - 修正 U01 房间号与机场大巴同为 thirty 的撞车(改为 17/30/40)。 - 校验器容差按级别读取(A1 为 8%),materials 覆盖率、字数、 选项子串等校验全部通过;course_content_test 通过。 黑夜模式 - app_theme 拆分明/暗两套调色板,AppColors 随亮度切换; main 用 theme/darkTheme/themeMode + builder 镜像已解析亮度; 主题偏好持久化到快照;进度页新增“外观主题”切换。 文档 - COURSE-PACK-JSON.md 更新 A1 词池覆盖(840/933)与材料复现约定。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
9ab08c25ef
commit
febfd30f49
@@ -0,0 +1,224 @@
|
|||||||
|
# 课程内容包 JSON 格式
|
||||||
|
|
||||||
|
> 对应《学习引擎规格》第 5 节。本文说明 A1–B1 单元内容包的文件位置、字段和程序校验规则。A0 仍按《A0 初始核心课程包》,不在此格式内。
|
||||||
|
|
||||||
|
## 1. 文件与工具
|
||||||
|
|
||||||
|
| 路径 | 内容 |
|
||||||
|
|---|---|
|
||||||
|
| `kouyu_english/assets/courses/course-map.json` | 主题地图:等级、单元顺序、每级的数量范围、名称白名单 |
|
||||||
|
| `kouyu_english/assets/courses/<等级>/<单元ID>.json` | 单元内容包,一个单元一个文件 |
|
||||||
|
| `kouyu_english/tool/courses/lexicon/` | 锁定的 CEFR-J 数据与 `SOURCES.md` |
|
||||||
|
| `kouyu_english/tool/courses/pools/` | 等级词池(`build_word_pools.py` 生成) |
|
||||||
|
| `kouyu_english/tool/courses/validate.dart` | 校验全部内容包,报告词池覆盖率 |
|
||||||
|
| `kouyu_english/test/course_content_test.dart` | 在 `flutter test` 中要求校验零错误 |
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd kouyu_english
|
||||||
|
dart run tool/courses/validate.dart # 错误和覆盖率
|
||||||
|
dart run tool/courses/validate.dart --uncovered B1 # 按主题列出未覆盖的词池词
|
||||||
|
dart run tool/courses/validate.dart --levels B1-U14 # 打印条目的计算等级
|
||||||
|
```
|
||||||
|
|
||||||
|
内容包目前只是资源文件,尚未加入 `pubspec.yaml`,运行时也还不读取。
|
||||||
|
|
||||||
|
## 2. 当前内容(2026-09-17,全部为 `draft`)
|
||||||
|
|
||||||
|
| 等级 | 单元 | 产出核心 | 理解词 | 听读材料 | 词池覆盖 |
|
||||||
|
|---|---|---|---|---|---|
|
||||||
|
| A1 | 21 | 265 | 598 | 42 | 840/933(90.0%) |
|
||||||
|
| A2 | 15 | 217 | 862 | 44 | 1040/1078(96.5%) |
|
||||||
|
| B1 | 14 | 206 | 1121 | 42 | 1345/1552(86.7%) |
|
||||||
|
|
||||||
|
全部由 AI 起草、程序校验通过,尚未经过独立审核和用户确认,不能冻结。
|
||||||
|
|
||||||
|
## 3. course-map.json
|
||||||
|
|
||||||
|
```jsonc
|
||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"goal": "日常生活与旅行",
|
||||||
|
"sources": ["CEFR-J Vocabulary Profile 1.5(…)", "CEFR-J Grammar Profile 20180315(…)"],
|
||||||
|
"minimumPoolCoverage": 0.85, // 等级词池覆盖下限
|
||||||
|
"alwaysAllowedWords": ["oh", "ok", …], // 任何文本都可用的语气词
|
||||||
|
"names": ["tom", "london", "mr", …], // 全局专名、缩写
|
||||||
|
"levels": [{
|
||||||
|
"id": "B1",
|
||||||
|
"title": "独立应对大多数情况",
|
||||||
|
"coreRange": [10, 15],
|
||||||
|
"receptiveRange": [70, 110],
|
||||||
|
"materials": {"count": [2, 3], "listeningWords": [250, 550], "readingWords": [300, 500]},
|
||||||
|
// A1 的材料较短,且可选 "unknownTolerance"(默认 0.02)放宽超纲词占比
|
||||||
|
"units": [{"id": "B1-U01", "file": "B1/B1-U01.json", "title": "…", "categories": ["旅行"], "canDo": "…"}]
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
各等级范围:
|
||||||
|
|
||||||
|
| 等级 | 产出核心 | 理解词 | 听读材料 | 听力词数 | 阅读词数 |
|
||||||
|
|---|---|---|---|---|---|
|
||||||
|
| A1 | 10–15 | 20–35 | 2 篇 | 60–120 | 80–150 |
|
||||||
|
| A2 | 10–15 | 40–65 | 2–3 篇 | 120–280 | 150–250 |
|
||||||
|
| B1 | 10–15 | 70–110 | 2–3 篇 | 250–550 | 300–500 |
|
||||||
|
|
||||||
|
A1 材料短、面向零基础,`unknownTolerance` 设为 0.08(听读材料默认 0.02):允许更多“课程尚未正式教、但零基础者需要”的常用词,前提是每个都写进 `glosses` 给出中文,问题选项用中文以免受“选项须在原文出现”的限制。
|
||||||
|
|
||||||
|
`units` 的顺序就是推荐学习顺序,校验“已教的词”时按此顺序累积。
|
||||||
|
|
||||||
|
## 4. 单元文件
|
||||||
|
|
||||||
|
### 4.1 ID 规则
|
||||||
|
|
||||||
|
所有 ID 都以单元 ID 开头,序号从 1 连续编号:
|
||||||
|
|
||||||
|
| 前缀 | 对象 | 例子 |
|
||||||
|
|---|---|---|
|
||||||
|
| `W` | 产出核心:单词 | `B1-U14-W01` |
|
||||||
|
| `P` | 产出核心:词块或句型 | `B1-U14-P01` |
|
||||||
|
| `R` | 理解词 | `B1-U14-R01` |
|
||||||
|
| `S` | 教学段 | `B1-U14-S1` |
|
||||||
|
| `C` | 场景 | `B1-U14-C1` |
|
||||||
|
| `T` | 任务 | `B1-U14-T1` |
|
||||||
|
| `M` | 听读材料 | `B1-U14-M1` |
|
||||||
|
|
||||||
|
### 4.2 顶层字段
|
||||||
|
|
||||||
|
```jsonc
|
||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "B1-U14",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "B1",
|
||||||
|
"title": "写说明与投诉", // title/categories/canDo 必须与 course-map 一致
|
||||||
|
"categories": ["日常", "旅行"],
|
||||||
|
"canDo": "写邮件说明经过并提出要求",
|
||||||
|
"status": "draft", // draft / reviewed / frozen
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": ["CEFR-J Vocabulary Profile 1.5", "CEFR-J Grammar Profile 20180315"],
|
||||||
|
"reviews": [], // 审核记录
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": ["seaview", "palace"], // 本单元专名,小写
|
||||||
|
"grammar": [{"id": "142", "use": "active"}, {"id": "215", "use": "receptive", "reason": "…"}],
|
||||||
|
"coreItems": […], "receptiveWords": […], "segments": […], "scenes": […], "tasks": […],
|
||||||
|
"materials": […], // A1 起(A1 为短材料)
|
||||||
|
"rubric": {"dimensions": […]}, // A2 起(A1 无开放任务评分标准)
|
||||||
|
"excluded": [{"en": "…", "reason": "…"}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.3 coreItems(产出核心)
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"id": "B1-U14-P08",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I would like to request a full refund.",
|
||||||
|
"zh": "我想申请全额退款。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [["request a full refund", "request a refund"]],
|
||||||
|
"example": {"en": "I would like to request a refund for the second night.", "zh": "我想申请退还第二晚的费用。"},
|
||||||
|
"review": {"prompt": "在邮件里提出退款要求。"}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- `type`:`word` / `phrase` / `pattern`。
|
||||||
|
- `match`:判定用户是否用到本项。外层数组之间为“且”,内层为“或”;每个词条按连续短语匹配(缩写展开、忽略大小写和标点)。`en` 和 `example.en` 都必须满足。
|
||||||
|
- `sceneWord`:高于本等级或 CEFR-J 未收录、但场景必需的词句设为 `true`,并写 `sceneReason`;每单元不超过产出核心的 1/3。
|
||||||
|
- `review.prompt`:复习时的中文任务,不能直接包含英文答案。
|
||||||
|
|
||||||
|
### 4.4 receptiveWords(理解词)
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"id": "B1-U14-R01", "en": "furthermore", "zh": "此外"}
|
||||||
|
```
|
||||||
|
|
||||||
|
- 不高于本等级加一级(B1 单元最高 B2)。
|
||||||
|
- 不能是 A0 或之前单元已教的词(按词形还原比较)。
|
||||||
|
- 必须出现在本单元的教学段、场景或听读材料文本中。
|
||||||
|
|
||||||
|
### 4.5 segments(教学段)
|
||||||
|
|
||||||
|
每单元 2–4 段,每段 8–15 分钟、最多 6 个新产出核心:
|
||||||
|
|
||||||
|
```jsonc
|
||||||
|
{
|
||||||
|
"id": "B1-U14-S1", "title": "说明写信目的", "minutes": 12,
|
||||||
|
"itemIds": ["B1-U14-P01", "B1-U14-P02"],
|
||||||
|
"listening": {"text": "…", "question": "…", "options": ["正确", "干扰", "干扰"]},
|
||||||
|
"speaking": [{"text": "…", "tip": "可选的发音提示"}],
|
||||||
|
"reading": {"text": "多行用 \n", "question": "…", "options": ["…", "…", "…"]},
|
||||||
|
"writing": {"prompt": "…", "example": "…", "itemIds": ["B1-U14-P01"]},
|
||||||
|
"independent": {"prompt": "…", "itemIds": ["B1-U14-P02"]}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- 选项恰好 3 个,第一个是正确答案(界面随机排序);选项不能互为子串。英文选项至少两个在原文出现,且正确选项必须出现。
|
||||||
|
- `writing.example` 必须用到它引用的每个产出核心。
|
||||||
|
|
||||||
|
### 4.6 scenes 与 tasks
|
||||||
|
|
||||||
|
```jsonc
|
||||||
|
{
|
||||||
|
"id": "B1-U14-C1", "kind": "main", // 恰好 1 个 main,另有 2–3 个 variant
|
||||||
|
"title": "…", "learnerRole": "客人", "aiRole": "酒店客服经理", "setting": "…",
|
||||||
|
"turns": [ // 4–7 轮
|
||||||
|
{"ai": "AI 说的话", "goal": "本轮目标", "model": "学习者示范回答", "zh": "示范的中文", "itemIds": ["B1-U14-P01"]}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"id": "B1-U14-T1", "sceneId": "B1-U14-C1", "goal": "…", "itemIds": ["B1-U14-P01"], "slots": ["目的", "经过", "结果", "要求"]}
|
||||||
|
```
|
||||||
|
|
||||||
|
- `model` 必须用到本轮 `itemIds` 引用的产出核心。
|
||||||
|
- 每个场景至少有一个任务,每个任务至少 1 个信息槽。
|
||||||
|
- 每个产出核心都要出现在教学段、场景示范和任务中。
|
||||||
|
|
||||||
|
### 4.7 materials(A1 用短材料,A2、B1 更长)
|
||||||
|
|
||||||
|
```jsonc
|
||||||
|
{
|
||||||
|
"id": "B1-U14-M1", "mode": "reading", "title": "投诉邮件和回复",
|
||||||
|
"text": "…",
|
||||||
|
"glosses": {"balcony": "阳台"},
|
||||||
|
"questions": [{"type": "gist", "question": "…", "options": ["正确", "干扰", "干扰"]}] // 2–4 道,gist/detail/inference
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- 每单元听和读都要有。
|
||||||
|
- 超纲词(见第 5 节)按词次不超过该级 `materials.unknownTolerance`(默认 2%,A1 为 8%),每个超纲词都要写进 `glosses`。
|
||||||
|
- A1 材料应尽量把本单元的理解词织进听读文本,让理解词在教学段之外再复现一次(本级平均单元内复现率约 77%);本单元的产出核心与理解词都算已教词,写进材料不计超纲。
|
||||||
|
|
||||||
|
### 4.8 rubric(A2 起)
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"dimensions": [{"name": "说明经过", "bands": ["经过说不清", "能按顺序说明经过,但缺少结果", "按顺序说明经过、结果,并附上证据"], "pass": 1}]}
|
||||||
|
```
|
||||||
|
|
||||||
|
至少 2 个维度,每维至少 3 档;`pass` 是及格档在 `bands` 中的下标(从 0 起),须大于 0。
|
||||||
|
|
||||||
|
## 5. 文本用词检查
|
||||||
|
|
||||||
|
“已知词”包括:`alwaysAllowedWords`、功能词、A0 已教的词、推荐顺序在前的单元的产出核心和理解词、本单元的产出核心和理解词(均按词形还原),以及全局与本单元的 `names`。数字不计。
|
||||||
|
|
||||||
|
| 文本 | 允许的未知词 |
|
||||||
|
|---|---|
|
||||||
|
| 教学段的听、说、读、写示范,场景的 AI 句和示范句 | 0 |
|
||||||
|
| 听读材料 | ≤ `materials.unknownTolerance`(默认 2%,A1 为 8%),且全部有 `glosses` |
|
||||||
|
|
||||||
|
注意:等级低于本单元、但还没有被任何单元教过的词(如 `history`、`culture`)同样算未知词。要在文本中使用,须改写,或把它加为本单元的理解词。
|
||||||
|
|
||||||
|
## 6. 等级与覆盖
|
||||||
|
|
||||||
|
- 语法:`active` 语法项不高于本等级,否则写 `reason`。
|
||||||
|
- 产出核心中的词不高于本等级,除非是场景词。
|
||||||
|
- 覆盖率:等级词池(`tool/courses/pools/`)中,被产出核心、`match` 词块或理解词覆盖的词(含 A0 已教)占比须 ≥ `minimumPoolCoverage`。
|
||||||
|
|
||||||
|
## 7. 状态流转
|
||||||
|
|
||||||
|
`draft`(AI 起草、校验通过)→ `reviewed`(独立审核后,在 `meta.reviews` 记录审核模型、日期和问题清单)→ `frozen`(用户确认,填 `frozenAt`)。已冻结单元的 ID 不复用;修改须提升 `revision` 并遵循《学习引擎规格》5.5 的 stageVersion 规则。
|
||||||
+24
-21
@@ -259,35 +259,37 @@ A2 起的出口任务按 5.8 判定;A2 → B1 与 B1 结业须人工或通过
|
|||||||
- **单元是冻结和学习的基本单位**:某个单元冻结后即可学习,不必等整个等级。
|
- **单元是冻结和学习的基本单位**:某个单元冻结后即可学习,不必等整个等级。
|
||||||
- **单元之间不设门槛**:完成单元的教学段并尝试过单元任务后,即可进入下一单元;掌握在复习中继续推进。积压时按 2.2a 暂停推荐新单元。
|
- **单元之间不设门槛**:完成单元的教学段并尝试过单元任务后,即可进入下一单元;掌握在复习中继续推进。积压时按 2.2a 暂停推荐新单元。
|
||||||
- **推荐顺序按依赖排列**(如价格先于购物、日期先于预订、问路先于交通)。用户可以自选单元;跳到后面的单元时,前面单元中被引用的词句作为预热新项先教。
|
- **推荐顺序按依赖排列**(如价格先于购物、日期先于预订、问路先于交通)。用户可以自选单元;跳到后面的单元时,前面单元中被引用的词句作为预热新项先教。
|
||||||
- **单元规模**:产出核心 10–15 项(词、词块、句型);理解词 A1 20–35 项、A2 30–50 项、B1 50–80 项(两层词汇见 3.5)。A1 数量已按词池试建结果调整(5.4);A2、B1 仍是初始估计,建好词池后再调整。
|
- **单元规模**:产出核心 10–15 项(词、词块、句型);理解词 A1 20–35 项、A2 40–65 项、B1 70–110 项(两层词汇见 3.5)。三个等级的数量都已按词池和起草结果调整(5.4),以 `course-map.json` 为准。
|
||||||
|
|
||||||
### 5.2 主题地图
|
### 5.2 主题地图
|
||||||
|
|
||||||
A0 保持现有 10 节核心课(见《A0 初始核心课程包》)。A1 起的单元如下,“类别”表示该单元主要服务日常还是旅行。修改主题地图(增删、合并或调整单元)须用户确认;已冻结单元的 ID 不复用。
|
A0 保持现有 10 节核心课(见《A0 初始核心课程包》)。A1 起的单元如下,机器可读版本是 `kouyu_english/assets/courses/course-map.json`,单元内容包格式见《课程内容包 JSON 格式》(COURSE-PACK-JSON.md)。A1 按词池试建结果补了“家人与住处”“描述人和感受”,把“开口求助与数字”放在最前,并按依赖调整了顺序(如问路先于打车、公交)。“类别”表示该单元主要服务日常还是旅行。修改主题地图(增删、合并或调整单元)须用户确认;已冻结单元的 ID 不复用。
|
||||||
|
|
||||||
**A1:固定的生活与旅行互动**
|
**A1:固定的生活与旅行互动**
|
||||||
|
|
||||||
| 单元 | 主题 | 类别 | 单元结束后能做什么 |
|
| 单元 | 主题 | 类别 | 单元结束后能做什么 |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| A1-U01 | 在咖啡店点单 | 日常 | 点饮料、说规格、礼貌确认 |
|
| A1-U01 | 开口求助与数字 | 旅行/日常 | 没听懂时礼貌求助,说 11–100 的数字,拼读字母 |
|
||||||
| A1-U02 | 价格与付款 | 日常/旅行 | 问价、说 100 以内的金额、选择现金或刷卡 |
|
| A1-U02 | 价格与付款 | 日常/旅行 | 问价、说 100 以内的金额、选择现金或刷卡 |
|
||||||
| A1-U03 | 在餐厅点餐 | 日常/旅行 | 点餐、问推荐、要账单 |
|
| A1-U03 | 在咖啡店点单 | 日常 | 点饮料、说大小杯、礼貌确认 |
|
||||||
| A1-U04 | 超市与便利店 | 日常 | 找商品、说数量 |
|
| A1-U04 | 问路 | 旅行 | 问地点、听懂左右和距离 |
|
||||||
| A1-U05 | 买衣服 | 日常 | 问尺码和颜色、试穿 |
|
| A1-U05 | 在餐厅点餐 | 日常/旅行 | 点餐、问推荐、要账单 |
|
||||||
| A1-U06 | 认识新朋友 | 日常 | 问职业、兴趣和住在哪里 |
|
| A1-U06 | 家人与住处 | 日常 | 介绍家人,说住在哪里和家里有什么 |
|
||||||
| A1-U07 | 我的一天 | 日常 | 说作息和常做的事 |
|
| A1-U07 | 公交与地铁 | 旅行 | 买票、问站点、确认下车 |
|
||||||
| A1-U08 | 天气与穿着 | 日常/旅行 | 问天气、说该穿什么 |
|
| A1-U08 | 超市与便利店 | 日常 | 找商品、说数量 |
|
||||||
| A1-U09 | 日期与约时间 | 日常 | 说日期、约见面、改时间 |
|
| A1-U09 | 描述人和感受 | 日常 | 说一个人的外貌和性格,说自己的心情 |
|
||||||
| A1-U10 | 问路 | 旅行 | 问地点、听懂左右和距离 |
|
| A1-U10 | 打车 | 旅行 | 说目的地、确认价格或路线 |
|
||||||
| A1-U11 | 公交与地铁 | 旅行 | 买票、问站点、确认下车 |
|
| A1-U11 | 我的一天 | 日常 | 说作息和常做的事 |
|
||||||
| A1-U12 | 打车 | 旅行 | 说目的地、确认价格或路线 |
|
| A1-U12 | 买衣服 | 日常 | 问尺码和颜色、试穿 |
|
||||||
| A1-U13 | 在机场 | 旅行 | 值机、问登机口、回答入境的简单问题 |
|
| A1-U13 | 日期与约时间 | 日常 | 说日期、约见面、改时间 |
|
||||||
| A1-U14 | 入住酒店 | 旅行 | 说明预订信息、办理入住 |
|
| A1-U14 | 在机场 | 旅行 | 值机、问登机口、回答入境的简单问题 |
|
||||||
| A1-U15 | 酒店里的需求 | 旅行 | 要物品、报告简单问题 |
|
| A1-U15 | 入住酒店 | 旅行 | 说明预订信息、办理入住 |
|
||||||
| A1-U16 | 药店与不舒服 | 日常/旅行 | 说一个症状、听懂基本建议 |
|
| A1-U16 | 天气与穿着 | 日常/旅行 | 问天气、说该穿什么 |
|
||||||
| A1-U17 | 请求帮助 | 日常/旅行 | 礼貌求助、感谢与回应 |
|
| A1-U17 | 酒店里的需求 | 旅行 | 要物品、报告简单问题 |
|
||||||
| A1-U18 | 打电话与留言 | 日常 | 留下姓名、号码和简短信息 |
|
| A1-U18 | 药店与不舒服 | 日常/旅行 | 说一个症状、听懂基本建议 |
|
||||||
| A1-U19 | 周末计划 | 日常 | 说将要做的事 |
|
| A1-U19 | 遇到麻烦时求助 | 日常/旅行 | 说明遇到的麻烦、请求帮忙、感谢与回应 |
|
||||||
|
| A1-U20 | 打电话与留言 | 日常 | 留下姓名、号码和简短信息 |
|
||||||
|
| A1-U21 | 周末计划 | 日常 | 说将要做的事、邀请朋友 |
|
||||||
|
|
||||||
**A2:讲经历、做安排、处理小问题**
|
**A2:讲经历、做安排、处理小问题**
|
||||||
|
|
||||||
@@ -342,7 +344,7 @@ B2 为可选扩展(自然语速的生活与旅行内容、复杂协商和讨
|
|||||||
|
|
||||||
不导入、不抄录:Cambridge English Vocabulary Profile / English Grammar Profile、Oxford 3000、Pearson GSE(没有开放许可)。
|
不导入、不抄录:Cambridge English Vocabulary Profile / English Grammar Profile、Oxford 3000、Pearson GSE(没有开放许可)。
|
||||||
|
|
||||||
原始数据文件与来源说明(版本、下载地址、SHA-256、许可文本)随内容包一同存档。
|
原始数据文件与来源说明(版本、下载地址、SHA-256、许可文本)随内容包一同存档,见 `kouyu_english/tool/courses/lexicon/SOURCES.md`。目前只导入了 CEFR-J 的两份文件,其余数据尚未导入。
|
||||||
|
|
||||||
### 5.4 分级数据怎么用
|
### 5.4 分级数据怎么用
|
||||||
|
|
||||||
@@ -360,6 +362,7 @@ B2 为可选扩展(自然语速的生活与旅行内容、复杂协商和讨
|
|||||||
词池随等级 stageVersion 冻结,分类结果随数据来源一同存档。
|
词池随等级 stageVersion 冻结,分类结果随数据来源一同存档。
|
||||||
- **覆盖检查**:冻结等级 stageVersion 前,本等级词池至少 85% 须被覆盖:作为产出核心或理解词,或出现在产出核心的词块、句型里(如 `Can I have ...?` 覆盖 can、I、have),A0 已教的词也算。每冻结一个单元,其候选词中未覆盖的词顺延到后面的单元;未覆盖的词逐个补进某个单元、放进听读材料,或写入排除项并说明理由。
|
- **覆盖检查**:冻结等级 stageVersion 前,本等级词池至少 85% 须被覆盖:作为产出核心或理解词,或出现在产出核心的词块、句型里(如 `Can I have ...?` 覆盖 can、I、have),A0 已教的词也算。每冻结一个单元,其候选词中未覆盖的词顺延到后面的单元;未覆盖的词逐个补进某个单元、放进听读材料,或写入排除项并说明理由。
|
||||||
- **A1 词池试建(2026-09-17,未经用户抽样审核)**:CEFR-J 1.5 的 A1 共 1,066 个不同词头。排除只属于学校与学术或其他的 102 个(如 homework、grammar、ruler,以及 fairy、prince、lion、kite、DVD 等儿童读物词和过时词),单独保存只属于工作的 15 个(如 meeting、interview、engineer、business),合并 is/was/did 等词形变体后,词池为 932 个。其中 A0 已覆盖 68 个,约 126 个是功能词和数词,其余约 770 个是实词:无主题标注的形容词 109、名词 105、动词 88、副词 40;有标注的 Free time 68、Personal identification 60、House and home 55、Food and drink 52、Shopping 44、Travel 23、Health 23 等。85% 覆盖需要 A1 单元再覆盖约 730 个。按每单元产出核心 12 项、其中约 8 项覆盖词池词(其余是场景词或纯句型)估算,产出核心覆盖约 150 个,加上词块中的功能词约 100 个,理解词需要覆盖约 480 个,也就是每单元平均约 25 个,因此 A1 的理解词数量从 15–30 调为 20–35。试建发现主题地图的缺口:family 类(aunt、cousin、husband、daughter 等约 20 个)和住处类(kitchen、bedroom、sofa、garden 等约 15 个)没有对应的 A1 单元,描述人和情绪的形容词(tall、young、angry、lonely 等)也没有集中的单元。
|
- **A1 词池试建(2026-09-17,未经用户抽样审核)**:CEFR-J 1.5 的 A1 共 1,066 个不同词头。排除只属于学校与学术或其他的 102 个(如 homework、grammar、ruler,以及 fairy、prince、lion、kite、DVD 等儿童读物词和过时词),单独保存只属于工作的 15 个(如 meeting、interview、engineer、business),合并 is/was/did 等词形变体后,词池为 932 个。其中 A0 已覆盖 68 个,约 126 个是功能词和数词,其余约 770 个是实词:无主题标注的形容词 109、名词 105、动词 88、副词 40;有标注的 Free time 68、Personal identification 60、House and home 55、Food and drink 52、Shopping 44、Travel 23、Health 23 等。85% 覆盖需要 A1 单元再覆盖约 730 个。按每单元产出核心 12 项、其中约 8 项覆盖词池词(其余是场景词或纯句型)估算,产出核心覆盖约 150 个,加上词块中的功能词约 100 个,理解词需要覆盖约 480 个,也就是每单元平均约 25 个,因此 A1 的理解词数量从 15–30 调为 20–35。试建发现主题地图的缺口:family 类(aunt、cousin、husband、daughter 等约 20 个)和住处类(kitchen、bedroom、sofa、garden 等约 15 个)没有对应的 A1 单元,描述人和情绪的形容词(tall、young、angry、lonely 等)也没有集中的单元。
|
||||||
|
- **A1–B1 起草结果(2026-09-17,未审核)**:50 个单元全部起草并通过程序校验,状态为 `draft`。词池覆盖 A1 834/933(89.4%)、A2 1040/1078(96.5%)、B1 1344/1552(86.6%)。A2、B1 的理解词范围按实际需要调为 40–65 和 70–110;听读材料词数 A2 听 120–280、读 150–250,B1 听 250–550、读 300–500。
|
||||||
- **A0**:保持已冻结的 60 项(`A0-1.0`),不按数据重新生成。对照 CEFR-J 1.5:40 个单词按词形还原后有 39 个属于 A1(`movies`→`movie`、`okay`→`OK/okay`),`zero` 不在词表中,作为 A0 自有项保留。
|
- **A0**:保持已冻结的 60 项(`A0-1.0`),不按数据重新生成。对照 CEFR-J 1.5:40 个单词按词形还原后有 39 个属于 A1(`movies`→`movie`、`okay`→`OK/okay`),`zero` 不在词表中,作为 A0 自有项保留。
|
||||||
|
|
||||||
### 5.5 单元内容包组成
|
### 5.5 单元内容包组成
|
||||||
|
|||||||
@@ -0,0 +1,918 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U01",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "开口求助与数字",
|
||||||
|
"categories": [
|
||||||
|
"旅行",
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "没听懂时礼貌求助,说 11–100 的数字,拼读字母",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "123-2",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "249",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "Can you…? 是旅行中求助必需的功能问句,本单元只作为固定句块使用"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "59-1",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "239",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "246",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "150",
|
||||||
|
"use": "receptive"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U01-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Excuse me.",
|
||||||
|
"zh": "打扰一下。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"excuse me"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Excuse me. Can you help me?",
|
||||||
|
"zh": "打扰一下,你能帮我吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "你想问路人问题,先礼貌地引起对方注意。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Sorry, I don't understand.",
|
||||||
|
"zh": "抱歉,我没听懂。",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "understand 在 CEFR-J 为 A2,但没听懂时求助是旅行第一天就要用的生存句",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"do not understand",
|
||||||
|
"can not understand"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Sorry, I don't understand. Can you speak slowly, please?",
|
||||||
|
"zh": "抱歉,我没听懂。你能说慢一点吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "对方说得太快,你没听懂,礼貌地告诉对方。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-P03",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "Can you speak slowly, please?",
|
||||||
|
"zh": "你能说慢一点吗?",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "slowly 在 CEFR-J 为 A2,但请对方放慢语速是零基础学习者最常用的求助句",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"speak slowly",
|
||||||
|
"speak more slowly",
|
||||||
|
"slowly"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Sorry, can you speak slowly, please?",
|
||||||
|
"zh": "抱歉,你能说慢一点吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "请对方说慢一点。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-P04",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "Can you help me?",
|
||||||
|
"zh": "你能帮我吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"help me",
|
||||||
|
"help us"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Excuse me. Can you help me?",
|
||||||
|
"zh": "打扰一下,你能帮我吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "在车站,你想请工作人员帮忙。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-P05",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "What does this word mean?",
|
||||||
|
"zh": "这个词是什么意思?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"what does",
|
||||||
|
"what is"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"mean"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Excuse me. What does this word mean?",
|
||||||
|
"zh": "打扰一下,这个词是什么意思?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "你看到一个不认识的词,问它的意思。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-P06",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "Can you write it down, please?",
|
||||||
|
"zh": "你能把它写下来吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"write it down",
|
||||||
|
"write that down",
|
||||||
|
"write down"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Sorry, I don't understand. Can you write it down, please?",
|
||||||
|
"zh": "抱歉,我没听懂。你能写下来吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "你听不清一个号码,请对方写下来。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-P07",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "How do you say this in English?",
|
||||||
|
"zh": "这个用英语怎么说?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"how do you say"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"in english"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Excuse me. How do you say this in English?",
|
||||||
|
"zh": "打扰一下,这个用英语怎么说?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "指着一样东西,问它用英语怎么说。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "eleven",
|
||||||
|
"zh": "十一",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"eleven"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Eleven or twelve?",
|
||||||
|
"zh": "十一还是十二?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "用英语说数字 11。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "twelve",
|
||||||
|
"zh": "十二",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"twelve"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "My room number is twelve.",
|
||||||
|
"zh": "我的房间号是十二。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "用英语说数字 12。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-P08",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen",
|
||||||
|
"zh": "十三到十九(-teen 重音在后)",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"thirteen",
|
||||||
|
"fourteen",
|
||||||
|
"fifteen",
|
||||||
|
"sixteen",
|
||||||
|
"seventeen",
|
||||||
|
"eighteen",
|
||||||
|
"nineteen"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The bus number is seventeen.",
|
||||||
|
"zh": "公交车是十七路。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "用英语说 13 到 19 之间的一个数字,比如 15。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-P09",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "twenty, thirty, forty, fifty, sixty, seventy, eighty, ninety",
|
||||||
|
"zh": "二十到九十(-ty 重音在前),21 说成 twenty-one",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"twenty",
|
||||||
|
"thirty",
|
||||||
|
"forty",
|
||||||
|
"fifty",
|
||||||
|
"sixty",
|
||||||
|
"seventy",
|
||||||
|
"eighty",
|
||||||
|
"ninety"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Forty or fourteen?",
|
||||||
|
"zh": "四十还是十四?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "用英语说 40,再说 45。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-W03",
|
||||||
|
"type": "word",
|
||||||
|
"en": "one hundred",
|
||||||
|
"zh": "一百",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "hundred 在 CEFR-J 为 A2,但说到 100 是本单元的数字目标,下一单元的价格也要用",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"hundred"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Your key number is one hundred.",
|
||||||
|
"zh": "你的钥匙号是一百。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "用英语说数字 100。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R01",
|
||||||
|
"en": "repeat",
|
||||||
|
"zh": "重复"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R02",
|
||||||
|
"en": "pardon",
|
||||||
|
"zh": "(没听清)请再说一遍"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R03",
|
||||||
|
"en": "question",
|
||||||
|
"zh": "问题"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R04",
|
||||||
|
"en": "easy",
|
||||||
|
"zh": "容易的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R05",
|
||||||
|
"en": "difficult",
|
||||||
|
"zh": "难的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R06",
|
||||||
|
"en": "right",
|
||||||
|
"zh": "对的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R07",
|
||||||
|
"en": "wrong",
|
||||||
|
"zh": "错的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R08",
|
||||||
|
"en": "sure",
|
||||||
|
"zh": "当然;好的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R09",
|
||||||
|
"en": "letter",
|
||||||
|
"zh": "字母"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R10",
|
||||||
|
"en": "first",
|
||||||
|
"zh": "第一个"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R11",
|
||||||
|
"en": "email",
|
||||||
|
"zh": "电子邮件"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R12",
|
||||||
|
"en": "address",
|
||||||
|
"zh": "地址"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R13",
|
||||||
|
"en": "listen",
|
||||||
|
"zh": "听"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R14",
|
||||||
|
"en": "look",
|
||||||
|
"zh": "看"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R15",
|
||||||
|
"en": "problem",
|
||||||
|
"zh": "问题;麻烦"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R16",
|
||||||
|
"en": "room",
|
||||||
|
"zh": "房间"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R17",
|
||||||
|
"en": "welcome",
|
||||||
|
"zh": "欢迎;不客气"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R18",
|
||||||
|
"en": "great",
|
||||||
|
"zh": "太好了"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R19",
|
||||||
|
"en": "bus",
|
||||||
|
"zh": "公交车"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R20",
|
||||||
|
"en": "hotel",
|
||||||
|
"zh": "酒店"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R21",
|
||||||
|
"en": "here",
|
||||||
|
"zh": "这里"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R22",
|
||||||
|
"en": "there",
|
||||||
|
"zh": "那里"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R23",
|
||||||
|
"en": "now",
|
||||||
|
"zh": "现在"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R24",
|
||||||
|
"en": "very",
|
||||||
|
"zh": "很"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R25",
|
||||||
|
"en": "fine",
|
||||||
|
"zh": "很好;没问题"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-R26",
|
||||||
|
"en": "answer",
|
||||||
|
"zh": "答案;回答"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U01-S1",
|
||||||
|
"title": "没听懂时怎么说",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P01",
|
||||||
|
"A1-U01-P02",
|
||||||
|
"A1-U01-P03",
|
||||||
|
"A1-U01-P04"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Excuse me. Can you help me? Sure. What's the problem? Sorry, I don't understand. Can you speak slowly, please?",
|
||||||
|
"question": "说话的人没听懂时,请对方做什么?",
|
||||||
|
"options": [
|
||||||
|
"说慢一点",
|
||||||
|
"写下来",
|
||||||
|
"再帮一次忙"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Excuse me. Can you help me?",
|
||||||
|
"tip": "excuse 的 x 读 /ks/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Sorry, I don't understand."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Can you speak slowly, please?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Pardon? Can you repeat that, please?",
|
||||||
|
"tip": "pardon 只需要听懂,会说更好"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Anna: Excuse me. Can you help me?\nTom: Sure. What's the problem?\nAnna: I have a question. Where is the bus?\nTom: The bus is there.\nAnna: Sorry, I don't understand. Can you speak slowly, please?\nTom: Sure. The bus... is... there. Look!\nAnna: Great. Thank you very much.\nTom: You're welcome.",
|
||||||
|
"question": "Anna 没听懂时说了哪一句?",
|
||||||
|
"options": [
|
||||||
|
"Can you speak slowly, please?",
|
||||||
|
"Can you help me?",
|
||||||
|
"Where is the bus?"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "你没听懂对方的话,写两句话:说没听懂,再请对方说慢一点。",
|
||||||
|
"example": "Sorry, I don't understand. Can you speak slowly, please?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P02",
|
||||||
|
"A1-U01-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "想象你在街上找不到路:不看提示,说出引起注意、请求帮忙、请对方说慢一点的三句话。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P01",
|
||||||
|
"A1-U01-P04",
|
||||||
|
"A1-U01-P03"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-S2",
|
||||||
|
"title": "问词义、拼写和写下来",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P05",
|
||||||
|
"A1-U01-P06",
|
||||||
|
"A1-U01-P07"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Excuse me. What does this word mean? This one? Address. Look, this is my email address. Sorry, can you write it down, please? Sure. Here you are.",
|
||||||
|
"question": "他们在说哪个词?",
|
||||||
|
"options": [
|
||||||
|
"地址",
|
||||||
|
"电话",
|
||||||
|
"名字"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "A B C D E F G, H I J K L M N O P, Q R S T U V, W X Y Z.",
|
||||||
|
"tip": "先念熟 26 个字母,才能拼读和听懂别人拼写"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "What does this word mean?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Can you write it down, please?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "How do you say this in English?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "K, E, Y. Key.",
|
||||||
|
"tip": "拼读时一个字母一个字母地说,停顿清楚"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Mia: Excuse me. How do you say this in English?\nTom: It's a key.\nMia: How do you spell that?\nTom: K, E, Y. Three letters. The first letter is K.\nMia: Can you write it down, please?\nTom: Sure. Here you are. Now listen: key.\nMia: Key. Thanks!",
|
||||||
|
"question": "Tom 说第一个字母是什么?",
|
||||||
|
"options": [
|
||||||
|
"K",
|
||||||
|
"E",
|
||||||
|
"Y"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "你看到一个不认识的词,写一句话问它的意思。",
|
||||||
|
"example": "Excuse me. What does this word mean?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "指着身边的一样东西,用英语问它怎么说,再请对方把词写下来。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P07",
|
||||||
|
"A1-U01-P06"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-S3",
|
||||||
|
"title": "11 到 100",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-W01",
|
||||||
|
"A1-U01-W02",
|
||||||
|
"A1-U01-P08",
|
||||||
|
"A1-U01-P09",
|
||||||
|
"A1-U01-W03"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Hello. My room number is fifteen. Fifty? No, fifteen. One, five.",
|
||||||
|
"question": "房间号是多少?",
|
||||||
|
"options": [
|
||||||
|
"15",
|
||||||
|
"50",
|
||||||
|
"51"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "eleven, twelve"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen",
|
||||||
|
"tip": "-teen 重音在后:thir-TEEN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "twenty, thirty, forty, fifty, sixty, seventy, eighty, ninety",
|
||||||
|
"tip": "-ty 重音在前:THIR-ty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "twenty-one, thirty-five, one hundred"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Tom: What's your room number?\nMia: Thirty.\nTom: Thirteen?\nMia: No, that's wrong. Thirty. Three, zero.\nTom: Right, thirty. And the bus number?\nMia: Eleven.",
|
||||||
|
"question": "Mia 的房间号是多少?",
|
||||||
|
"options": [
|
||||||
|
"thirty",
|
||||||
|
"thirteen",
|
||||||
|
"three"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "用英文单词写出 40、14 和 100。",
|
||||||
|
"example": "forty, fourteen, one hundred",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P09",
|
||||||
|
"A1-U01-P08",
|
||||||
|
"A1-U01-W03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "不看提示,用英语从 11 数到 20,再说出 30、50、99 和 100。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-W01",
|
||||||
|
"A1-U01-W02",
|
||||||
|
"A1-U01-P08",
|
||||||
|
"A1-U01-P09",
|
||||||
|
"A1-U01-W03"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U01-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "在街上问公交车",
|
||||||
|
"learnerRole": "游客",
|
||||||
|
"aiRole": "路人",
|
||||||
|
"setting": "你在街边,想知道去酒店坐几路公交车。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello.",
|
||||||
|
"goal": "引起对方注意,请对方帮忙",
|
||||||
|
"model": "Excuse me. Can you help me?",
|
||||||
|
"zh": "打扰一下,你能帮我吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P01",
|
||||||
|
"A1-U01-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. What's your question?",
|
||||||
|
"goal": "问去酒店坐哪路公交车",
|
||||||
|
"model": "Which one is the hotel bus?",
|
||||||
|
"zh": "去酒店坐哪路车?",
|
||||||
|
"itemIds": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "The hotel bus? It's the seventeen bus. It's there.",
|
||||||
|
"goal": "说你没听懂,请对方说慢一点",
|
||||||
|
"model": "Sorry, I don't understand. Can you speak slowly, please?",
|
||||||
|
"zh": "抱歉,我没听懂。你能说慢一点吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P02",
|
||||||
|
"A1-U01-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Bus... seventeen.",
|
||||||
|
"goal": "请对方把号码写下来",
|
||||||
|
"model": "Can you write it down, please?",
|
||||||
|
"zh": "你能写下来吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. Here you are. One, seven.",
|
||||||
|
"goal": "确认号码并道谢",
|
||||||
|
"model": "Seventeen. Thank you very much!",
|
||||||
|
"zh": "十七路。非常感谢!",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P08"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "向朋友问词义",
|
||||||
|
"learnerRole": "学英语的人",
|
||||||
|
"aiRole": "朋友 Tom",
|
||||||
|
"setting": "朋友发来的消息里有个词你不认识。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi! How are you?",
|
||||||
|
"goal": "回答,再问 easy 是什么意思",
|
||||||
|
"model": "I'm fine, thanks. What does easy mean?",
|
||||||
|
"zh": "我很好,谢谢。easy 是什么意思?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Easy means it is not difficult.",
|
||||||
|
"goal": "请对方说慢一点",
|
||||||
|
"model": "Sorry, can you speak slowly, please?",
|
||||||
|
"zh": "抱歉,你能说慢一点吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Easy... is not... difficult. Now, a question for me?",
|
||||||
|
"goal": "指着一样东西,问它用英语怎么说",
|
||||||
|
"model": "Okay, thanks. How do you say this in English?",
|
||||||
|
"zh": "好的,谢谢。这个用英语怎么说?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Good question! The answer is a pen.",
|
||||||
|
"goal": "请对方把词写下来",
|
||||||
|
"model": "Can you write it down, please?",
|
||||||
|
"zh": "你能写下来吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P06"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "在酒店前台听号码",
|
||||||
|
"learnerRole": "住客",
|
||||||
|
"aiRole": "前台",
|
||||||
|
"setting": "你刚到酒店,前台很快地说了房间号。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello. Welcome to the hotel. Your room number is twelve.",
|
||||||
|
"goal": "没听清,请对方说慢一点",
|
||||||
|
"model": "Sorry, I don't understand. Can you speak slowly, please?",
|
||||||
|
"zh": "抱歉,我没听懂。你能说慢一点吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P02",
|
||||||
|
"A1-U01-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Room... twelve. One, two.",
|
||||||
|
"goal": "确认是 11 还是 12",
|
||||||
|
"model": "Eleven or twelve?",
|
||||||
|
"zh": "十一还是十二?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-W01",
|
||||||
|
"A1-U01-W02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Twelve. And your key number is one hundred.",
|
||||||
|
"goal": "重复钥匙号确认",
|
||||||
|
"model": "One hundred? Okay.",
|
||||||
|
"zh": "一百?好的。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-W03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes. And the bus is at four o'clock. Bus number fourteen.",
|
||||||
|
"goal": "确认是 14 还是 40",
|
||||||
|
"model": "Fourteen or forty?",
|
||||||
|
"zh": "十四还是四十?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P08",
|
||||||
|
"A1-U01-P09"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Fourteen. One, four.",
|
||||||
|
"goal": "确认并道谢",
|
||||||
|
"model": "Fourteen. Thank you very much!",
|
||||||
|
"zh": "十四。非常感谢!",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P08"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U01-T1",
|
||||||
|
"sceneId": "A1-U01-C1",
|
||||||
|
"goal": "向路人求助:没听懂时请对方说慢一点并写下来,最后确认公交车号码",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P01",
|
||||||
|
"A1-U01-P04",
|
||||||
|
"A1-U01-P02",
|
||||||
|
"A1-U01-P03",
|
||||||
|
"A1-U01-P06",
|
||||||
|
"A1-U01-P08"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"公交车号码"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-T2",
|
||||||
|
"sceneId": "A1-U01-C2",
|
||||||
|
"goal": "问一个词的意思,再问一样东西用英语怎么说",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P05",
|
||||||
|
"A1-U01-P03",
|
||||||
|
"A1-U01-P07",
|
||||||
|
"A1-U01-P06"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"不认识的词",
|
||||||
|
"要问的东西"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-T3",
|
||||||
|
"sceneId": "A1-U01-C3",
|
||||||
|
"goal": "听前台说号码,逐个确认容易混淆的数字",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U01-P02",
|
||||||
|
"A1-U01-P03",
|
||||||
|
"A1-U01-W01",
|
||||||
|
"A1-U01-W02",
|
||||||
|
"A1-U01-W03",
|
||||||
|
"A1-U01-P08",
|
||||||
|
"A1-U01-P09"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"房间号",
|
||||||
|
"钥匙号",
|
||||||
|
"公交车号码"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U01-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "问路人:坐几路车、住几号房",
|
||||||
|
"text": "Hello! Welcome to the hotel. Do you have a question? Sure, I can help you. Listen, please, and look here. The bus to the hotel is number seventeen. One, seven. Sorry, can you repeat that? Yes, seventeen. Is that right? Great. Your room is number thirty. Three, zero. Now, is everything fine? The airport bus is number forty. It comes every twenty minutes. Please wait here at the bus stop. Have a good day!",
|
||||||
|
"glosses": {
|
||||||
|
"stop": "(公交)站",
|
||||||
|
"minutes": "分钟",
|
||||||
|
"airport": "机场",
|
||||||
|
"wait": "等",
|
||||||
|
"comes": "来"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "这段话主要在帮客人做什么?",
|
||||||
|
"options": [
|
||||||
|
"告诉他公交车号和房间号",
|
||||||
|
"卖给他一张车票",
|
||||||
|
"教他怎么点咖啡"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "去酒店坐几路公交车?",
|
||||||
|
"options": [
|
||||||
|
"十七路",
|
||||||
|
"四十路",
|
||||||
|
"三十路"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U01-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:问词义和拼写",
|
||||||
|
"text": "Anna: Excuse me, can you help me? This word is difficult. I don't understand it. What does it mean?\nTom: This one? It's 'address'. Look, this is my email address.\nAnna: Sorry, can you repeat it? And can you spell it? I'll write the letters down.\nTom: Sure. A, D, D, R, E, S, S. The first letter is A.\nAnna: Let me read it again. Is my answer right or wrong?\nTom: It's right. No problem!\nAnna: Great, thank you. My room is number fifteen.\nTom: Fifteen or fifty?\nAnna: Fifteen. One, five.\nTom: OK, that's fine. The bus stop is over there, near the door. It's very easy.\nAnna: Great, thank you very much!",
|
||||||
|
"glosses": {
|
||||||
|
"spell": "拼读",
|
||||||
|
"stop": "(公交)站",
|
||||||
|
"door": "门",
|
||||||
|
"let": "让;Let me… 让我……",
|
||||||
|
"read": "读"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "Anna 觉得哪个词难、不明白?",
|
||||||
|
"options": [
|
||||||
|
"address(地址)",
|
||||||
|
"hotel(酒店)",
|
||||||
|
"bus(公交车)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "inference",
|
||||||
|
"question": "Tom 为什么说 “Fifteen or fifty?”",
|
||||||
|
"options": [
|
||||||
|
"这两个数字听起来很像",
|
||||||
|
"他没听清房间号,其实两个都不是",
|
||||||
|
"他想换一个房间"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "Could you…?",
|
||||||
|
"reason": "更礼貌的请求放到 A2,A1 先用 Can you…?"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,831 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U02",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "价格与付款",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "问价、说 100 以内的金额、选择现金或刷卡",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "246",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "10",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "123-2",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "146-2",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "141",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "I'll take it. 只作为购物固定句块使用,不讲将来时"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "8",
|
||||||
|
"use": "receptive"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U02-P01",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "How much is it?",
|
||||||
|
"zh": "这个多少钱?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"how much"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Excuse me. How much is this hat?",
|
||||||
|
"zh": "打扰一下,这顶帽子多少钱?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "你在小店看中一样东西,问它的价格。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-P02",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "It's twenty dollars.",
|
||||||
|
"zh": "二十美元。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"dollar",
|
||||||
|
"dollars"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Seven dollars? Here you are.",
|
||||||
|
"zh": "七美元?给你。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "用英语说出价格:35 美元。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "expensive",
|
||||||
|
"zh": "贵的",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"expensive"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Forty dollars? That's expensive.",
|
||||||
|
"zh": "四十美元?太贵了。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "店员说的价格太高了,告诉对方很贵。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "cheap",
|
||||||
|
"zh": "便宜的",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "cheap 在 CEFR-J 为 A2,但和 expensive 成对出现,购物时马上要用",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"cheap"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Is there a cheap one?",
|
||||||
|
"zh": "有便宜一点的吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问店员有没有便宜的。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I'll take it.",
|
||||||
|
"zh": "我买了。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"take it",
|
||||||
|
"take this",
|
||||||
|
"take that",
|
||||||
|
"take the"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Great. I'll take it.",
|
||||||
|
"zh": "太好了,我买了。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "价格合适,告诉店员你买下它。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-P04",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "Can I pay by card?",
|
||||||
|
"zh": "我可以刷卡吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"pay by card",
|
||||||
|
"pay with a card",
|
||||||
|
"pay with card"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'll take it. Can I pay by card?",
|
||||||
|
"zh": "我买了。可以刷卡吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "你想刷卡付款,先问一下店员。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-W03",
|
||||||
|
"type": "word",
|
||||||
|
"en": "cash",
|
||||||
|
"zh": "现金",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "cash 在 CEFR-J 为 A2,但“现金还是刷卡”是旅行付款必答的问题",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"cash"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Oh, wait. I have cash.",
|
||||||
|
"zh": "哦,等等,我有现金。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "店员问你怎么付款,说用现金。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Here you are.",
|
||||||
|
"zh": "给你。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"here you are"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Five dollars. Here you are.",
|
||||||
|
"zh": "五美元,给你。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "把钱递给店员时说一句话。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-W04",
|
||||||
|
"type": "word",
|
||||||
|
"en": "change",
|
||||||
|
"zh": "找零;零钱",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"change"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Thank you. Here's your change.",
|
||||||
|
"zh": "谢谢,这是找您的零钱。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "店员还没找钱,提醒对方找零。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-P06",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "Can I have a receipt, please?",
|
||||||
|
"zh": "可以给我一张收据吗?",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "receipt 在 CEFR-J 为 A2,但旅行报销和核对金额都要用",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"receipt"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "No, thanks. Can I have a receipt, please?",
|
||||||
|
"zh": "不用了,谢谢。可以给我收据吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "付完钱,向店员要一张收据。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-P07",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "Is there an ATM near here?",
|
||||||
|
"zh": "这附近有取款机吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"atm",
|
||||||
|
"cash machine"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I only have cards. Is there an ATM near here?",
|
||||||
|
"zh": "我只有卡。这附近有取款机吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "你需要取现金,问附近有没有取款机。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R01",
|
||||||
|
"en": "price",
|
||||||
|
"zh": "价格"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R02",
|
||||||
|
"en": "buy",
|
||||||
|
"zh": "买"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R03",
|
||||||
|
"en": "want",
|
||||||
|
"zh": "想要"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R04",
|
||||||
|
"en": "money",
|
||||||
|
"zh": "钱"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R05",
|
||||||
|
"en": "cent",
|
||||||
|
"zh": "美分"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R06",
|
||||||
|
"en": "coin",
|
||||||
|
"zh": "硬币"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R07",
|
||||||
|
"en": "only",
|
||||||
|
"zh": "只;仅仅"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R08",
|
||||||
|
"en": "just",
|
||||||
|
"zh": "只是;仅"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R09",
|
||||||
|
"en": "sale",
|
||||||
|
"zh": "打折;出售"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R10",
|
||||||
|
"en": "free",
|
||||||
|
"zh": "免费的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R11",
|
||||||
|
"en": "shop",
|
||||||
|
"zh": "商店"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R12",
|
||||||
|
"en": "ticket",
|
||||||
|
"zh": "票"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R13",
|
||||||
|
"en": "map",
|
||||||
|
"zh": "地图"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R14",
|
||||||
|
"en": "gift",
|
||||||
|
"zh": "礼物"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R15",
|
||||||
|
"en": "hat",
|
||||||
|
"zh": "帽子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R16",
|
||||||
|
"en": "umbrella",
|
||||||
|
"zh": "伞"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R17",
|
||||||
|
"en": "bottle",
|
||||||
|
"zh": "瓶子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R18",
|
||||||
|
"en": "machine",
|
||||||
|
"zh": "机器"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R19",
|
||||||
|
"en": "else",
|
||||||
|
"zh": "别的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R20",
|
||||||
|
"en": "also",
|
||||||
|
"zh": "也"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R21",
|
||||||
|
"en": "wait",
|
||||||
|
"zh": "等"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-R22",
|
||||||
|
"en": "then",
|
||||||
|
"zh": "那么;然后"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U02-S1",
|
||||||
|
"title": "问价格",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P01",
|
||||||
|
"A1-U02-P02",
|
||||||
|
"A1-U02-W01",
|
||||||
|
"A1-U02-W02"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Excuse me. How much is this hat? It's forty dollars. Forty? That's expensive. This one is cheap. It's only fifteen dollars.",
|
||||||
|
"question": "便宜的那顶帽子多少钱?",
|
||||||
|
"options": [
|
||||||
|
"15 美元",
|
||||||
|
"40 美元",
|
||||||
|
"50 美元"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "How much is it?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "It's twenty dollars.",
|
||||||
|
"tip": "dollars 结尾的 s 读 /z/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "That's expensive."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Is there a cheap one?"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Mia: Excuse me. How much is this umbrella?\nTom: It's twenty-five dollars.\nMia: Twenty-five? That's expensive.\nTom: This one is cheap. It's only nine dollars.\nMia: Great. And how much is the map?\nTom: The map is free.",
|
||||||
|
"question": "地图多少钱?",
|
||||||
|
"options": [
|
||||||
|
"free",
|
||||||
|
"nine dollars",
|
||||||
|
"twenty-five dollars"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写一句话问价,再写一句说太贵了。",
|
||||||
|
"example": "How much is it? That's expensive.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P01",
|
||||||
|
"A1-U02-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "看看身边的一样东西:用英语问它多少钱,再用 dollars 说一个价格。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P01",
|
||||||
|
"A1-U02-P02"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-S2",
|
||||||
|
"title": "买下和付款",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P03",
|
||||||
|
"A1-U02-P04",
|
||||||
|
"A1-U02-W03",
|
||||||
|
"A1-U02-P05",
|
||||||
|
"A1-U02-W04",
|
||||||
|
"A1-U02-P06"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "I'll take it. Cash or card? Can I pay by card? Sorry, cash only. Okay. Here you are. Thanks. Here's your change.",
|
||||||
|
"question": "这家店收什么?",
|
||||||
|
"options": [
|
||||||
|
"只收现金",
|
||||||
|
"只收卡",
|
||||||
|
"现金和卡都收"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "I'll take it.",
|
||||||
|
"tip": "I'll 连读成一个音节"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Can I pay by card?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Cash, please."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Here you are."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Can I have a receipt, please?"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Anna: I want to buy this bottle of water. How much is it?\nTom: Two dollars.\nAnna: I'll take it. Can I pay by card?\nTom: Sorry, cash only.\nAnna: Okay. Here you are. Five dollars.\nTom: Thank you. Here's your change. Three dollars.\nAnna: Can I have a receipt, please?\nTom: Sure.",
|
||||||
|
"question": "Anna 给了多少钱?",
|
||||||
|
"options": [
|
||||||
|
"five dollars",
|
||||||
|
"two dollars",
|
||||||
|
"three dollars"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "店员问你 Cash or card?,写下你的回答:先问能不能刷卡,不行就付现金并把钱递过去。",
|
||||||
|
"example": "Can I pay by card? Okay, cash. Here you are.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P04",
|
||||||
|
"A1-U02-W03",
|
||||||
|
"A1-U02-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "不看提示,说出买下东西、问能不能刷卡、要收据的三句话。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P03",
|
||||||
|
"A1-U02-P04",
|
||||||
|
"A1-U02-P06"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-S3",
|
||||||
|
"title": "找取款机、看价格牌",
|
||||||
|
"minutes": 10,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P07"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Excuse me. I need money. Is there an ATM near here? Yes. It's there, near the shop.",
|
||||||
|
"question": "取款机在哪里?",
|
||||||
|
"options": [
|
||||||
|
"商店旁边",
|
||||||
|
"酒店里面",
|
||||||
|
"公交车上"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Is there an ATM near here?",
|
||||||
|
"tip": "ATM 三个字母分开读"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I only have cards."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Is there a cheap shop near here?"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "SALE! Good prices!\nHats: only ten dollars.\nUmbrellas: eighteen dollars.\nMaps: free.\nCoffee: ninety cents.\nWe take cash. We also take cards.\nThe ATM is near the shop.",
|
||||||
|
"question": "伞多少钱?",
|
||||||
|
"options": [
|
||||||
|
"eighteen dollars",
|
||||||
|
"ten dollars",
|
||||||
|
"eighty dollars"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写一句话问附近有没有取款机。",
|
||||||
|
"example": "Excuse me. Is there an ATM near here?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "想象你身上只有卡、没有现金:说明情况,再问附近有没有取款机。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P07"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U02-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "在纪念品店买帽子",
|
||||||
|
"learnerRole": "游客",
|
||||||
|
"aiRole": "店员",
|
||||||
|
"setting": "你在一家纪念品店,想买一顶帽子。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello! Can I help you?",
|
||||||
|
"goal": "问这顶帽子多少钱",
|
||||||
|
"model": "Yes. How much is this hat?",
|
||||||
|
"zh": "是的。这顶帽子多少钱?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "It's forty dollars.",
|
||||||
|
"goal": "说太贵了,问有没有便宜的",
|
||||||
|
"model": "That's expensive. Is there a cheap one?",
|
||||||
|
"zh": "太贵了。有便宜的吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-W01",
|
||||||
|
"A1-U02-W02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, another hat. This one is just twelve dollars. It's a good gift.",
|
||||||
|
"goal": "说你买下",
|
||||||
|
"model": "Great. I'll take it.",
|
||||||
|
"zh": "太好了,我买了。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Cash or card?",
|
||||||
|
"goal": "问能不能刷卡",
|
||||||
|
"model": "Can I pay by card?",
|
||||||
|
"zh": "可以刷卡吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. Do you want anything else?",
|
||||||
|
"goal": "说不要别的了,再要一张收据",
|
||||||
|
"model": "No, thanks. Can I have a receipt, please?",
|
||||||
|
"zh": "不用了,谢谢。可以给我收据吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P06"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "只收现金的小摊",
|
||||||
|
"learnerRole": "顾客",
|
||||||
|
"aiRole": "小摊摊主",
|
||||||
|
"setting": "你在路边小摊买水,摊主只收现金。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi! Do you want water? It's two dollars.",
|
||||||
|
"goal": "说要一瓶,问能不能刷卡",
|
||||||
|
"model": "Yes, please. Can I pay by card?",
|
||||||
|
"zh": "要,谢谢。可以刷卡吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sorry, cash only.",
|
||||||
|
"goal": "说你只有卡,问附近有没有取款机",
|
||||||
|
"model": "I only have cards. Is there an ATM near here?",
|
||||||
|
"zh": "我只有卡。这附近有取款机吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, there. Near the ticket machine.",
|
||||||
|
"goal": "发现自己有现金,把钱递给摊主",
|
||||||
|
"model": "Oh, wait. I have cash. Here you are.",
|
||||||
|
"zh": "哦,等等,我有现金。给你。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-W03",
|
||||||
|
"A1-U02-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Thanks. Ten dollars? Here's your change. Eight dollars in coins.",
|
||||||
|
"goal": "确认找零并道谢",
|
||||||
|
"model": "Eight dollars change. Thank you!",
|
||||||
|
"zh": "找我八美元。谢谢!",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-W04"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "在售票处买车票",
|
||||||
|
"learnerRole": "乘客",
|
||||||
|
"aiRole": "售票员",
|
||||||
|
"setting": "你在公交车站的售票处,想买两张车票。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello. Can I help you?",
|
||||||
|
"goal": "问一张公交车票多少钱",
|
||||||
|
"model": "Hi. How much is a bus ticket?",
|
||||||
|
"zh": "你好。一张公交车票多少钱?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "A bus ticket is three dollars fifty.",
|
||||||
|
"goal": "说要两张,问能不能刷卡",
|
||||||
|
"model": "Two tickets, please. Can I pay by card?",
|
||||||
|
"zh": "两张,谢谢。可以刷卡吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. Two tickets, then. That's seven dollars.",
|
||||||
|
"goal": "确认金额,把卡递过去",
|
||||||
|
"model": "Seven dollars? Here you are.",
|
||||||
|
"zh": "七美元?给你。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P02",
|
||||||
|
"A1-U02-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Thank you. Do you want a map? It's free.",
|
||||||
|
"goal": "说要地图,再要一张收据",
|
||||||
|
"model": "Yes, please. Can I have a receipt, please?",
|
||||||
|
"zh": "要,谢谢。可以给我收据吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P06"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U02-T1",
|
||||||
|
"sceneId": "A1-U02-C1",
|
||||||
|
"goal": "问价、嫌贵换便宜的、买下并刷卡,最后要收据",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P01",
|
||||||
|
"A1-U02-W01",
|
||||||
|
"A1-U02-W02",
|
||||||
|
"A1-U02-P03",
|
||||||
|
"A1-U02-P04",
|
||||||
|
"A1-U02-P06"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"商品",
|
||||||
|
"价格"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-T2",
|
||||||
|
"sceneId": "A1-U02-C2",
|
||||||
|
"goal": "对方只收现金时问取款机,最后付现金并确认找零",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P04",
|
||||||
|
"A1-U02-P07",
|
||||||
|
"A1-U02-W03",
|
||||||
|
"A1-U02-P05",
|
||||||
|
"A1-U02-W04"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"付款方式",
|
||||||
|
"找零金额"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-T3",
|
||||||
|
"sceneId": "A1-U02-C3",
|
||||||
|
"goal": "买两张车票:问价、确认总价、付款并要收据",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U02-P01",
|
||||||
|
"A1-U02-P04",
|
||||||
|
"A1-U02-P02",
|
||||||
|
"A1-U02-P05",
|
||||||
|
"A1-U02-P06"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"票数",
|
||||||
|
"总价"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U02-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "商店广播:打折和付款",
|
||||||
|
"text": "Welcome to our shop! Everything is on sale today. This hat is only ten dollars — very cheap! This umbrella is just fifteen dollars, a good price. Do you want a map? It's free today! We also have bottles of water. You can pay with cash, coins or a card. The card machine is here. Buy two, and wait for a free gift. Is there an ATM? Yes, near here. Have a nice day!",
|
||||||
|
"glosses": {},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "这段广播主要说什么?",
|
||||||
|
"options": [
|
||||||
|
"店里在打折、卖东西",
|
||||||
|
"商店今天关门",
|
||||||
|
"这里没有地图"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "那顶帽子多少钱?",
|
||||||
|
"options": [
|
||||||
|
"十美元",
|
||||||
|
"十五美元",
|
||||||
|
"免费的"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:买包付款",
|
||||||
|
"text": "Mia: How much is this bag? I want to buy a gift.\nShop: The price is twenty dollars.\nMia: That's expensive. This one?\nShop: That one is cheap, only eight dollars.\nMia: OK, I'll take it. Can I pay by card?\nShop: No card today. Cash only, please.\nMia: I have only eight dollars and fifty cents.\nShop: Here is your change: a coin and a receipt.\nMia: Do you have bus tickets?\nShop: No, but the ticket machine is here. Do you want anything else?\nMia: No, that's all. Thank you!",
|
||||||
|
"glosses": {},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "Mia 最后买了哪个包?",
|
||||||
|
"options": [
|
||||||
|
"便宜的八美元的包",
|
||||||
|
"二十美元的包",
|
||||||
|
"她没有买"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "她怎么付钱?",
|
||||||
|
"options": [
|
||||||
|
"用现金",
|
||||||
|
"用银行卡",
|
||||||
|
"用手机"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "How much does it cost?",
|
||||||
|
"reason": "cost 为 A2,A1 先用 How much is it?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "Do you take credit cards?",
|
||||||
|
"reason": "credit card 为 A2,A1 先用 Can I pay by card?"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,907 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U03",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "在咖啡店点单",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "点饮料、说大小杯、礼貌确认",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "142",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "I'd like… 作为点单的礼貌固定句块使用,不展开 would 的其他用法"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "239",
|
||||||
|
"use": "receptive"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "150",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "21",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "16",
|
||||||
|
"use": "active"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U03-P01",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "I'd like a coffee, please.",
|
||||||
|
"zh": "我想要一杯咖啡。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"would like"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'd like a small orange juice, please.",
|
||||||
|
"zh": "我想要一小杯橙汁。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "店员问你想喝什么,礼貌地点一杯咖啡。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-P02",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "Can I see the menu, please?",
|
||||||
|
"zh": "可以看一下菜单吗?",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "menu 在 CEFR-J 为 A2,但点单前看菜单是咖啡店和餐厅的第一步",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"menu"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Sorry, can I see the menu, please?",
|
||||||
|
"zh": "抱歉,可以看一下菜单吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "你还没想好点什么,请店员给你看菜单。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "small",
|
||||||
|
"zh": "小的;小杯",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"small"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "A small tea, please.",
|
||||||
|
"zh": "一小杯茶,谢谢。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "店员问你要多大的,说要小杯。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "large",
|
||||||
|
"zh": "大的;大杯",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"large"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Large, please.",
|
||||||
|
"zh": "大杯,谢谢。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "店员问你要多大的,说要大杯。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-W03",
|
||||||
|
"type": "word",
|
||||||
|
"en": "cup",
|
||||||
|
"zh": "杯子;一杯",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"cup"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "A cup of tea for my friend.",
|
||||||
|
"zh": "给我朋友一杯茶。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说“一杯茶”。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-W04",
|
||||||
|
"type": "word",
|
||||||
|
"en": "hot",
|
||||||
|
"zh": "热的",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"hot"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "A hot coffee, please.",
|
||||||
|
"zh": "一杯热咖啡,谢谢。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "你想要热饮,告诉店员。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-W05",
|
||||||
|
"type": "word",
|
||||||
|
"en": "cold",
|
||||||
|
"zh": "冷的;冰的",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"cold"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Cold, please.",
|
||||||
|
"zh": "要冰的,谢谢。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "天很热,你想要冰饮,告诉店员。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "with milk",
|
||||||
|
"zh": "加奶",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"with milk"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Yes, with milk, please.",
|
||||||
|
"zh": "要,加奶,谢谢。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "你的咖啡要加奶,告诉店员。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "No sugar, please.",
|
||||||
|
"zh": "不要加糖。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"no sugar"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "With milk. No sugar, please.",
|
||||||
|
"zh": "加奶,不要糖。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "你不想加糖,告诉店员。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-W06",
|
||||||
|
"type": "word",
|
||||||
|
"en": "juice",
|
||||||
|
"zh": "果汁",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"juice"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "An apple juice for my sister.",
|
||||||
|
"zh": "给我妹妹一杯苹果汁。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "你不想喝咖啡,点一杯橙汁。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-W07",
|
||||||
|
"type": "word",
|
||||||
|
"en": "sandwich",
|
||||||
|
"zh": "三明治",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"sandwich"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "And a sandwich, please.",
|
||||||
|
"zh": "再要一个三明治。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "饮料点好了,再加一个三明治。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-P05",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "To go, please.",
|
||||||
|
"zh": "带走,谢谢。(在店里吃说 For here.)",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"to go",
|
||||||
|
"for here"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "For here or to go? To go, please.",
|
||||||
|
"zh": "在这儿吃还是带走?带走,谢谢。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "店员问你在店里喝还是带走,说带走。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "That's all, thanks.",
|
||||||
|
"zh": "就这些,谢谢。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"that is all",
|
||||||
|
"that is it"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "No, that's all, thanks.",
|
||||||
|
"zh": "不用了,就这些,谢谢。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "店员问你还要别的吗,说就这些。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R01",
|
||||||
|
"en": "drink",
|
||||||
|
"zh": "饮料;喝"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R02",
|
||||||
|
"en": "eat",
|
||||||
|
"zh": "吃"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R03",
|
||||||
|
"en": "food",
|
||||||
|
"zh": "食物"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R04",
|
||||||
|
"en": "cake",
|
||||||
|
"zh": "蛋糕"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R05",
|
||||||
|
"en": "chocolate",
|
||||||
|
"zh": "巧克力"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R06",
|
||||||
|
"en": "bread",
|
||||||
|
"zh": "面包"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R07",
|
||||||
|
"en": "breakfast",
|
||||||
|
"zh": "早餐"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R08",
|
||||||
|
"en": "cookie",
|
||||||
|
"zh": "饼干"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R09",
|
||||||
|
"en": "apple",
|
||||||
|
"zh": "苹果"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R10",
|
||||||
|
"en": "orange",
|
||||||
|
"zh": "橙子;橙色的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R11",
|
||||||
|
"en": "cheese",
|
||||||
|
"zh": "奶酪"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R12",
|
||||||
|
"en": "chicken",
|
||||||
|
"zh": "鸡肉"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R13",
|
||||||
|
"en": "table",
|
||||||
|
"zh": "桌子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R14",
|
||||||
|
"en": "ready",
|
||||||
|
"zh": "准备好的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R15",
|
||||||
|
"en": "order",
|
||||||
|
"zh": "点单"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R16",
|
||||||
|
"en": "next",
|
||||||
|
"zh": "下一个"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R17",
|
||||||
|
"en": "minute",
|
||||||
|
"zh": "分钟"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R18",
|
||||||
|
"en": "sweet",
|
||||||
|
"zh": "甜的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R19",
|
||||||
|
"en": "delicious",
|
||||||
|
"zh": "好吃的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R20",
|
||||||
|
"en": "enjoy",
|
||||||
|
"zh": "享用;喜欢"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R21",
|
||||||
|
"en": "good morning",
|
||||||
|
"zh": "早上好"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R22",
|
||||||
|
"en": "friend",
|
||||||
|
"zh": "朋友"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-R23",
|
||||||
|
"en": "cafe",
|
||||||
|
"zh": "咖啡店"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U03-S1",
|
||||||
|
"title": "点一杯饮料",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-P02",
|
||||||
|
"A1-U03-P01",
|
||||||
|
"A1-U03-W03",
|
||||||
|
"A1-U03-W01",
|
||||||
|
"A1-U03-W02"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Hi. Can I see the menu, please? Sure. Here you are. What would you like? I'd like a coffee, please. Small or large? Large, please.",
|
||||||
|
"question": "顾客要了多大杯的咖啡?",
|
||||||
|
"options": [
|
||||||
|
"大杯",
|
||||||
|
"小杯",
|
||||||
|
"没说大小"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Can I see the menu, please?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'd like a coffee, please.",
|
||||||
|
"tip": "I'd 读作 /aɪd/,很轻很短"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "A small cup of tea, please.",
|
||||||
|
"tip": "cup of 连读成 cuppa"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Large, please."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "CAFE MENU\nCoffee: small three dollars, large four dollars\nTea: two dollars fifty\nHot chocolate: four dollars\nOrange juice: three dollars\nBread: two dollars\nCake: five dollars\nCookies: one dollar\nGood morning! Breakfast is ready!",
|
||||||
|
"question": "大杯咖啡多少钱?",
|
||||||
|
"options": [
|
||||||
|
"four dollars",
|
||||||
|
"three dollars",
|
||||||
|
"five dollars"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写一句话,点一杯小杯咖啡。",
|
||||||
|
"example": "I'd like a small coffee, please.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-P01",
|
||||||
|
"A1-U03-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "看着菜单,不看提示点一杯你想喝的饮料,并说要大杯还是小杯。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-P01",
|
||||||
|
"A1-U03-W01",
|
||||||
|
"A1-U03-W02"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-S2",
|
||||||
|
"title": "冷热、加奶和糖",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-W04",
|
||||||
|
"A1-U03-W05",
|
||||||
|
"A1-U03-P03",
|
||||||
|
"A1-U03-P04",
|
||||||
|
"A1-U03-W06"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "I'd like a tea, please. Hot or cold? Hot, please. With milk? Yes, with milk. No sugar, please.",
|
||||||
|
"question": "顾客的茶是怎么要的?",
|
||||||
|
"options": [
|
||||||
|
"热的,加奶,不加糖",
|
||||||
|
"冰的,加奶,加糖",
|
||||||
|
"热的,不加奶,加糖"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Hot, please."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "With milk, please."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "No sugar, please."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "A cold orange juice, please."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Anna: Hi. I'd like a coffee, please.\nTom: Hot or cold?\nAnna: Cold, please. With milk.\nTom: Sugar?\nAnna: No sugar, please. And an apple juice for my sister.\nTom: Okay. One cold coffee with milk and one apple juice.",
|
||||||
|
"question": "Anna 给妹妹点了什么?",
|
||||||
|
"options": [
|
||||||
|
"apple juice",
|
||||||
|
"cold coffee",
|
||||||
|
"milk"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写下你想要的饮料:热的、加奶、不加糖。",
|
||||||
|
"example": "A hot coffee with milk, please. No sugar.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-W04",
|
||||||
|
"A1-U03-P03",
|
||||||
|
"A1-U03-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "说说你平时怎么喝咖啡或茶:要热的还是冰的,加不加奶和糖。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-W04",
|
||||||
|
"A1-U03-W05",
|
||||||
|
"A1-U03-P03",
|
||||||
|
"A1-U03-P04"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-S3",
|
||||||
|
"title": "加点吃的、带走和结束点单",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-W07",
|
||||||
|
"A1-U03-P05",
|
||||||
|
"A1-U03-P06"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Anything else? A sandwich, please. For here or to go? To go, please. Is that all? Yes, that's all, thanks.",
|
||||||
|
"question": "顾客是在店里吃还是带走?",
|
||||||
|
"options": [
|
||||||
|
"带走",
|
||||||
|
"在店里吃",
|
||||||
|
"还没决定"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "A chicken sandwich, please."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "To go, please."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "For here, please."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "That's all, thanks."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Tom: Next, please! What would you like?\nMia: A cheese sandwich and a small tea, please.\nTom: For here or to go?\nMia: For here. Is there a free table?\nTom: Yes, there. Anything else? The cake is delicious.\nMia: No, that's all, thanks.\nTom: That's nine dollars. Your food is ready in five minutes.",
|
||||||
|
"question": "Mia 点了什么?",
|
||||||
|
"options": [
|
||||||
|
"奶酪三明治和小杯茶",
|
||||||
|
"蛋糕和小杯茶",
|
||||||
|
"奶酪三明治和蛋糕"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:说要带走,再说不要别的了。",
|
||||||
|
"example": "To go, please. That's all, thanks.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-P05",
|
||||||
|
"A1-U03-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "你点了一杯饮料和一个三明治:说带走还是在店里吃,最后结束点单。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-W07",
|
||||||
|
"A1-U03-P05",
|
||||||
|
"A1-U03-P06"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U03-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "早上买咖啡",
|
||||||
|
"learnerRole": "顾客",
|
||||||
|
"aiRole": "咖啡店店员",
|
||||||
|
"setting": "早上你在咖啡店,想买一杯热咖啡和一个三明治带走。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Good morning! What would you like?",
|
||||||
|
"goal": "点一杯咖啡",
|
||||||
|
"model": "I'd like a coffee, please.",
|
||||||
|
"zh": "我想要一杯咖啡。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. Small or large?",
|
||||||
|
"goal": "要大杯、热的",
|
||||||
|
"model": "Large, please. Hot.",
|
||||||
|
"zh": "大杯,热的。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-W02",
|
||||||
|
"A1-U03-W04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Milk and sugar?",
|
||||||
|
"goal": "加奶,不加糖",
|
||||||
|
"model": "With milk, please. No sugar.",
|
||||||
|
"zh": "加奶,不要糖。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-P03",
|
||||||
|
"A1-U03-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Okay. Anything else? The chocolate cake is very sweet.",
|
||||||
|
"goal": "不要蛋糕,加一个三明治",
|
||||||
|
"model": "No, thanks. A sandwich, please.",
|
||||||
|
"zh": "不用了,谢谢。要一个三明治。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-W07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "For here or to go?",
|
||||||
|
"goal": "说带走,并结束点单",
|
||||||
|
"model": "To go, please. That's all, thanks.",
|
||||||
|
"zh": "带走。就这些,谢谢。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-P05",
|
||||||
|
"A1-U03-P06"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "先看菜单,替朋友点单",
|
||||||
|
"learnerRole": "顾客",
|
||||||
|
"aiRole": "咖啡店店员",
|
||||||
|
"setting": "你和朋友在咖啡店,你还没看菜单,店员已经来问了。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi! Are you ready to order?",
|
||||||
|
"goal": "说抱歉,请店员给你看菜单",
|
||||||
|
"model": "Sorry, can I see the menu, please?",
|
||||||
|
"zh": "抱歉,可以看一下菜单吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Here you are. Drinks: tea, coffee and juice.",
|
||||||
|
"goal": "给自己点一小杯橙汁",
|
||||||
|
"model": "I'd like a small orange juice, please.",
|
||||||
|
"zh": "我要一小杯橙汁。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-P01",
|
||||||
|
"A1-U03-W01",
|
||||||
|
"A1-U03-W06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "A cold orange juice. It's two dollars.",
|
||||||
|
"goal": "再给朋友点一杯茶",
|
||||||
|
"model": "Okay. And a cup of tea for my friend.",
|
||||||
|
"zh": "好的。再给我朋友一杯茶。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-W03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Hot tea. With milk?",
|
||||||
|
"goal": "说不加奶,也不加糖",
|
||||||
|
"model": "No milk. No sugar, please.",
|
||||||
|
"zh": "不加奶,也不要糖。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Okay. Anything else?",
|
||||||
|
"goal": "说就这些",
|
||||||
|
"model": "That's all, thanks.",
|
||||||
|
"zh": "就这些,谢谢。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-P06"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "没有冰咖啡了",
|
||||||
|
"learnerRole": "顾客",
|
||||||
|
"aiRole": "早餐店店员",
|
||||||
|
"setting": "你想要冰咖啡,但店里今天没有。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello! What would you like?",
|
||||||
|
"goal": "点一个三明治和一杯冰咖啡",
|
||||||
|
"model": "I'd like a sandwich and a cold coffee, please.",
|
||||||
|
"zh": "我要一个三明治和一杯冰咖啡。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-P01",
|
||||||
|
"A1-U03-W07",
|
||||||
|
"A1-U03-W05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sorry, no cold coffee today. Hot coffee?",
|
||||||
|
"goal": "说热的也行,要小杯",
|
||||||
|
"model": "Okay, a small hot coffee, please.",
|
||||||
|
"zh": "好吧,一小杯热咖啡。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-W01",
|
||||||
|
"A1-U03-W04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "With milk?",
|
||||||
|
"goal": "说要加奶",
|
||||||
|
"model": "Yes, with milk, please.",
|
||||||
|
"zh": "要,加奶。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "For here or to go? You can eat at this table.",
|
||||||
|
"goal": "说在店里吃",
|
||||||
|
"model": "For here, please.",
|
||||||
|
"zh": "在这里吃。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "That's six dollars. Enjoy your breakfast!",
|
||||||
|
"goal": "付钱并道谢",
|
||||||
|
"model": "Here you are. Thank you!",
|
||||||
|
"zh": "给你。谢谢!",
|
||||||
|
"itemIds": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U03-T1",
|
||||||
|
"sceneId": "A1-U03-C1",
|
||||||
|
"goal": "点一杯大杯热咖啡,说清加奶不加糖,再加一个三明治带走",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-P01",
|
||||||
|
"A1-U03-W02",
|
||||||
|
"A1-U03-W04",
|
||||||
|
"A1-U03-P03",
|
||||||
|
"A1-U03-P04",
|
||||||
|
"A1-U03-W07",
|
||||||
|
"A1-U03-P05",
|
||||||
|
"A1-U03-P06"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"饮料",
|
||||||
|
"大小",
|
||||||
|
"冷热",
|
||||||
|
"奶和糖",
|
||||||
|
"带走或堂食"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-T2",
|
||||||
|
"sceneId": "A1-U03-C2",
|
||||||
|
"goal": "先要菜单,再给自己和朋友各点一杯饮料",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-P02",
|
||||||
|
"A1-U03-P01",
|
||||||
|
"A1-U03-W01",
|
||||||
|
"A1-U03-W06",
|
||||||
|
"A1-U03-W03",
|
||||||
|
"A1-U03-P04",
|
||||||
|
"A1-U03-P06"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"自己的饮料",
|
||||||
|
"朋友的饮料"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-T3",
|
||||||
|
"sceneId": "A1-U03-C3",
|
||||||
|
"goal": "想要的饮料没有时换一个,并说在店里吃",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U03-P01",
|
||||||
|
"A1-U03-W07",
|
||||||
|
"A1-U03-W05",
|
||||||
|
"A1-U03-W01",
|
||||||
|
"A1-U03-W04",
|
||||||
|
"A1-U03-P03",
|
||||||
|
"A1-U03-P05"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"替代的饮料",
|
||||||
|
"堂食或带走"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U03-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "咖啡店广播:介绍吃的喝的",
|
||||||
|
"text": "Good morning, and welcome to our cafe! Would you like a hot drink or a cold drink? Our coffee is very good. A small cup is three dollars, a large cup is four dollars. Do you want it with milk? We also have food: fresh bread, cake, chocolate cookies, cheese sandwiches and chicken. There is orange juice and sweet apple cake too. It's all delicious! Is it for here or to go? Sit at a table, please. Your order is ready in one minute. Enjoy your breakfast!",
|
||||||
|
"glosses": {
|
||||||
|
"fresh": "新鲜的",
|
||||||
|
"too": "也",
|
||||||
|
"sit": "坐"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "这段话主要介绍什么?",
|
||||||
|
"options": [
|
||||||
|
"咖啡店的饮料和吃的",
|
||||||
|
"怎么坐公交车",
|
||||||
|
"酒店的房间"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "大杯咖啡多少钱?",
|
||||||
|
"options": [
|
||||||
|
"四美元",
|
||||||
|
"三美元",
|
||||||
|
"五美元"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:点咖啡和点心",
|
||||||
|
"text": "Ben: Good morning! Can I see the menu, please? I want some breakfast.\nStaff: Sure. Here you are.\nBen: I'd like a large coffee, hot, with milk. No sugar, please. And some bread.\nStaff: We have fresh bread, apple cake and chocolate cookies. They are all sweet.\nBen: One chocolate cake, please. Is the chicken sandwich good?\nStaff: Yes, it's delicious. The cheese one is nice too.\nBen: OK, a chicken sandwich. That's all, thanks. To go, please.\nStaff: Sit at that table for one minute. Your order is ready. Enjoy!\nBen: Thank you, my friend!",
|
||||||
|
"glosses": {
|
||||||
|
"staff": "员工,服务员",
|
||||||
|
"fresh": "新鲜的",
|
||||||
|
"too": "也",
|
||||||
|
"sit": "坐"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "Ben 的咖啡怎么做?",
|
||||||
|
"options": [
|
||||||
|
"大杯、热的、加奶、不加糖",
|
||||||
|
"小杯、冷的、加糖",
|
||||||
|
"中杯、加奶和糖"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "他点了哪种三明治?",
|
||||||
|
"options": [
|
||||||
|
"鸡肉的",
|
||||||
|
"奶酪的",
|
||||||
|
"没有点三明治"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "medium",
|
||||||
|
"reason": "B1;A1 只学 small 和 large"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "latte / cappuccino",
|
||||||
|
"reason": "CEFR-J 未收录,作为菜单专名由应用临时提示"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,954 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U04",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "问路",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "问地点、听懂左右和距离",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "245",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "246",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "117",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "21",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "146",
|
||||||
|
"use": "receptive"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U04-P01",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "Where is the station?",
|
||||||
|
"zh": "车站在哪里?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"where is",
|
||||||
|
"where are"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Excuse me. Where is the toilet?",
|
||||||
|
"zh": "打扰一下,洗手间在哪里?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "你想找一个地方,问它在哪里。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-P02",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "How do I get to the station?",
|
||||||
|
"zh": "去车站怎么走?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"how do i get to",
|
||||||
|
"how can i get to"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Yes, I'm lost. How do I get to the museum?",
|
||||||
|
"zh": "是的,我迷路了。去博物馆怎么走?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "你想去博物馆,问路人怎么走。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "station",
|
||||||
|
"zh": "车站",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"station"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Is there a subway station near here?",
|
||||||
|
"zh": "这附近有地铁站吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问火车站在哪里。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "toilet",
|
||||||
|
"zh": "洗手间;厕所",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"toilet",
|
||||||
|
"toilets"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Excuse me. Where is the toilet?",
|
||||||
|
"zh": "打扰一下,洗手间在哪里?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "在商场里,问洗手间在哪里。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I'm lost.",
|
||||||
|
"zh": "我迷路了。",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "lost 在 CEFR-J 为 A2,但说明自己迷路是问路时最先要说的话",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"lost"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Sorry, I'm lost. Where is the station?",
|
||||||
|
"zh": "抱歉,我迷路了。车站在哪里?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉路人你迷路了。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-W03",
|
||||||
|
"type": "word",
|
||||||
|
"en": "left",
|
||||||
|
"zh": "左边",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"left"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The bank is on the left.",
|
||||||
|
"zh": "银行在左边。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说“左边”。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-P04",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "Turn left.",
|
||||||
|
"zh": "左转。(右转是 Turn right.)",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"turn left",
|
||||||
|
"turn right"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Turn right at the corner.",
|
||||||
|
"zh": "在拐角处右转。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉别人在路口右转。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Go straight.",
|
||||||
|
"zh": "直走。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"go straight",
|
||||||
|
"straight on"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Go straight and turn left.",
|
||||||
|
"zh": "直走,然后左转。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉别人一直往前走。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-P06",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "It's on the left.",
|
||||||
|
"zh": "在左边。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"on the left",
|
||||||
|
"on the right",
|
||||||
|
"on your left",
|
||||||
|
"on your right"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The station is on the right.",
|
||||||
|
"zh": "车站在右边。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉别人银行在右边。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-P07",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "It's next to the bank.",
|
||||||
|
"zh": "在银行旁边。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"next to"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The station is next to the church.",
|
||||||
|
"zh": "车站在教堂旁边。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉别人车站在教堂旁边。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-P08",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "Is it far?",
|
||||||
|
"zh": "远吗?",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "far 在 CEFR-J 为 A2,但问远不远决定走路还是坐车",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"far"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Is the museum far?",
|
||||||
|
"zh": "博物馆远吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问路人那个地方远不远。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-P09",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "It's ten minutes from here.",
|
||||||
|
"zh": "离这里十分钟。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"minute",
|
||||||
|
"minutes"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "No, it's not far. It's five minutes from here.",
|
||||||
|
"zh": "不远,离这里五分钟。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉别人走过去要五分钟。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-P10",
|
||||||
|
"type": "pattern",
|
||||||
|
"en": "Can you show me on the map?",
|
||||||
|
"zh": "你能在地图上指给我看吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"show me"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Five minutes. Can you show me on the map?",
|
||||||
|
"zh": "五分钟。你能在地图上指给我看吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "你听不懂路线,请对方在地图上指给你看。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R01",
|
||||||
|
"en": "street",
|
||||||
|
"zh": "街道"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R02",
|
||||||
|
"en": "corner",
|
||||||
|
"zh": "拐角"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R03",
|
||||||
|
"en": "walk",
|
||||||
|
"zh": "走路"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R04",
|
||||||
|
"en": "bank",
|
||||||
|
"zh": "银行"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R05",
|
||||||
|
"en": "park",
|
||||||
|
"zh": "公园"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R06",
|
||||||
|
"en": "museum",
|
||||||
|
"zh": "博物馆"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R07",
|
||||||
|
"en": "hospital",
|
||||||
|
"zh": "医院"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R08",
|
||||||
|
"en": "church",
|
||||||
|
"zh": "教堂"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R09",
|
||||||
|
"en": "supermarket",
|
||||||
|
"zh": "超市"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R10",
|
||||||
|
"en": "post office",
|
||||||
|
"zh": "邮局"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R11",
|
||||||
|
"en": "building",
|
||||||
|
"zh": "大楼"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R12",
|
||||||
|
"en": "bridge",
|
||||||
|
"zh": "桥"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R13",
|
||||||
|
"en": "city",
|
||||||
|
"zh": "城市"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R14",
|
||||||
|
"en": "town",
|
||||||
|
"zh": "小镇;城镇"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R15",
|
||||||
|
"en": "block",
|
||||||
|
"zh": "街区"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R16",
|
||||||
|
"en": "find",
|
||||||
|
"zh": "找到"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R17",
|
||||||
|
"en": "end",
|
||||||
|
"zh": "尽头"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R18",
|
||||||
|
"en": "second",
|
||||||
|
"zh": "第二"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R19",
|
||||||
|
"en": "traffic light",
|
||||||
|
"zh": "红绿灯"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R20",
|
||||||
|
"en": "sign",
|
||||||
|
"zh": "标志;指示牌"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R21",
|
||||||
|
"en": "restaurant",
|
||||||
|
"zh": "餐厅"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R22",
|
||||||
|
"en": "subway",
|
||||||
|
"zh": "地铁"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R23",
|
||||||
|
"en": "train",
|
||||||
|
"zh": "火车"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R24",
|
||||||
|
"en": "library",
|
||||||
|
"zh": "图书馆"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R25",
|
||||||
|
"en": "river",
|
||||||
|
"zh": "河"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R26",
|
||||||
|
"en": "garden",
|
||||||
|
"zh": "花园"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R27",
|
||||||
|
"en": "way",
|
||||||
|
"zh": "路;方向"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R28",
|
||||||
|
"en": "stop",
|
||||||
|
"zh": "车站;停"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R29",
|
||||||
|
"en": "come",
|
||||||
|
"zh": "来"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-R30",
|
||||||
|
"en": "cinema",
|
||||||
|
"zh": "电影院"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U04-S1",
|
||||||
|
"title": "问地方在哪里",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P03",
|
||||||
|
"A1-U04-P01",
|
||||||
|
"A1-U04-W01",
|
||||||
|
"A1-U04-W02",
|
||||||
|
"A1-U04-P02"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Excuse me. I'm lost. Where is the station? The train station? It's on this street. Look, there is the sign.",
|
||||||
|
"question": "说话的人要找什么地方?",
|
||||||
|
"options": [
|
||||||
|
"火车站",
|
||||||
|
"洗手间",
|
||||||
|
"银行"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Sorry, I'm lost."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Excuse me. Where is the station?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Where is the toilet?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "How do I get to the museum?",
|
||||||
|
"tip": "get to 连读,to 读得很轻"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Is this the way to the station?"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "TOWN MAP\nThe train station is next to the bank.\nThe museum is behind the church.\nThe cinema is behind the museum.\nThe toilets are in the park, next to the garden.\nThe library is between the post office and the supermarket.",
|
||||||
|
"question": "博物馆在哪里?",
|
||||||
|
"options": [
|
||||||
|
"behind the church",
|
||||||
|
"next to the bank",
|
||||||
|
"in the park"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "你迷路了,写两句话:说自己迷路了,再问车站在哪里。",
|
||||||
|
"example": "Sorry, I'm lost. Where is the station?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P03",
|
||||||
|
"A1-U04-P01",
|
||||||
|
"A1-U04-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "想一个你今天要去的地方,用英语问它在哪里、怎么去。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P01",
|
||||||
|
"A1-U04-P02"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-S2",
|
||||||
|
"title": "左转、右转、直走",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-W03",
|
||||||
|
"A1-U04-P04",
|
||||||
|
"A1-U04-P05",
|
||||||
|
"A1-U04-P06",
|
||||||
|
"A1-U04-P07"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "How do I get to the bank? Go straight. Turn left at the traffic lights. The bank is on the right, next to the hospital.",
|
||||||
|
"question": "银行在哪里?",
|
||||||
|
"options": [
|
||||||
|
"右边,医院旁边",
|
||||||
|
"左边,医院旁边",
|
||||||
|
"右边,公园旁边"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Go straight."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Turn left.",
|
||||||
|
"tip": "left 结尾的 t 要轻轻带出来"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Turn right at the corner."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "It's on the left."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "It's next to the bank."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Mia: Excuse me. How do I get to the supermarket?\nTom: Go straight. Turn right at the second street. You can see a sign.\nMia: Turn right at the second street?\nTom: Yes. The supermarket is on the left, next to the restaurant.",
|
||||||
|
"question": "超市在哪一边?",
|
||||||
|
"options": [
|
||||||
|
"on the left",
|
||||||
|
"on the right",
|
||||||
|
"at the second street"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写出两步指路:先直走,再在拐角左转。",
|
||||||
|
"example": "Go straight. Turn left at the corner.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P05",
|
||||||
|
"A1-U04-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "从你家门口到最近的一家商店,用英语说两三步怎么走,最后说它在左边还是右边。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P05",
|
||||||
|
"A1-U04-P04",
|
||||||
|
"A1-U04-P06"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-S3",
|
||||||
|
"title": "远不远、在地图上指给我看",
|
||||||
|
"minutes": 11,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P08",
|
||||||
|
"A1-U04-P09",
|
||||||
|
"A1-U04-P10"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Is it far? No, it's not far. It's ten minutes from here. You can walk.",
|
||||||
|
"question": "走过去要多久?",
|
||||||
|
"options": [
|
||||||
|
"十分钟",
|
||||||
|
"五分钟",
|
||||||
|
"半小时"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Is it far?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "It's five minutes from here."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Can you show me on the map?"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Anna: Excuse me. Is the museum far?\nTom: Yes, it's far. It's thirty minutes from here. Don't walk. Take the subway.\nAnna: Can you show me on the map?\nTom: Sure. Come and look. We are here. The subway stop is there, at the end of this street.",
|
||||||
|
"question": "Tom 建议怎么去博物馆?",
|
||||||
|
"options": [
|
||||||
|
"take the subway",
|
||||||
|
"walk",
|
||||||
|
"take a bus"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写一句话问远不远,再请对方在地图上指给你看。",
|
||||||
|
"example": "Is it far? Can you show me on the map?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P08",
|
||||||
|
"A1-U04-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "你在地图上找不到酒店:问怎么去、远不远,再请对方指给你看。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P02",
|
||||||
|
"A1-U04-P08",
|
||||||
|
"A1-U04-P10"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U04-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "问去火车站的路",
|
||||||
|
"learnerRole": "游客",
|
||||||
|
"aiRole": "路人",
|
||||||
|
"setting": "你拖着行李找不到火车站,向一位路人问路。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi. Can I help you?",
|
||||||
|
"goal": "说迷路了,问火车站在哪里",
|
||||||
|
"model": "Yes, please. I'm lost. Where is the train station?",
|
||||||
|
"zh": "是的,谢谢。我迷路了。火车站在哪里?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P03",
|
||||||
|
"A1-U04-P01",
|
||||||
|
"A1-U04-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "The station? Go straight and turn left at the bridge.",
|
||||||
|
"goal": "复述确认:直走,然后左转",
|
||||||
|
"model": "Go straight and turn left?",
|
||||||
|
"zh": "直走,然后左转?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P05",
|
||||||
|
"A1-U04-P04",
|
||||||
|
"A1-U04-W03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes. Then walk two blocks. The station is on the right, next to the church.",
|
||||||
|
"goal": "确认位置,再问远不远",
|
||||||
|
"model": "On the right, next to the church. Is it far?",
|
||||||
|
"zh": "在右边,教堂旁边。远吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P06",
|
||||||
|
"A1-U04-P07",
|
||||||
|
"A1-U04-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "No, it's not far. It's five minutes from here.",
|
||||||
|
"goal": "确认时间,请对方在地图上指给你看",
|
||||||
|
"model": "Five minutes. Can you show me on the map?",
|
||||||
|
"zh": "五分钟。你能在地图上指给我看吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P09",
|
||||||
|
"A1-U04-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. We are here. The station is here.",
|
||||||
|
"goal": "道谢",
|
||||||
|
"model": "Great. Thank you very much!",
|
||||||
|
"zh": "太好了,非常感谢!",
|
||||||
|
"itemIds": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "找洗手间",
|
||||||
|
"learnerRole": "游客",
|
||||||
|
"aiRole": "咖啡店店员",
|
||||||
|
"setting": "你在一家咖啡店附近,急着找洗手间。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello. Are you okay?",
|
||||||
|
"goal": "问洗手间在哪里",
|
||||||
|
"model": "Excuse me. Where is the toilet?",
|
||||||
|
"zh": "打扰一下,洗手间在哪里?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P01",
|
||||||
|
"A1-U04-W02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "The toilets are in the building behind the cafe.",
|
||||||
|
"goal": "问去那栋楼怎么走",
|
||||||
|
"model": "How do I get to the building?",
|
||||||
|
"zh": "那栋楼怎么走?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Go straight. Then turn right at the corner. It's on the left.",
|
||||||
|
"goal": "复述确认方向",
|
||||||
|
"model": "Turn right, then on the left?",
|
||||||
|
"zh": "右转,然后在左边?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P04",
|
||||||
|
"A1-U04-P06",
|
||||||
|
"A1-U04-W03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes. It's the second building.",
|
||||||
|
"goal": "问远不远",
|
||||||
|
"model": "Is it far?",
|
||||||
|
"zh": "远吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "No. Two minutes.",
|
||||||
|
"goal": "确认时间并道谢",
|
||||||
|
"model": "Two minutes. Thanks!",
|
||||||
|
"zh": "两分钟。谢谢!",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P09"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "去远处的博物馆",
|
||||||
|
"learnerRole": "游客",
|
||||||
|
"aiRole": "当地人",
|
||||||
|
"setting": "你想去城市博物馆,但它离这里很远。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi there! You look lost. Can I help you find something?",
|
||||||
|
"goal": "说是的,问去博物馆怎么走",
|
||||||
|
"model": "Yes, I'm lost. How do I get to the museum?",
|
||||||
|
"zh": "是的,我迷路了。去博物馆怎么走?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P03",
|
||||||
|
"A1-U04-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "The city museum? It's far. It's forty minutes from here.",
|
||||||
|
"goal": "问附近有没有地铁站",
|
||||||
|
"model": "Is there a subway station near here?",
|
||||||
|
"zh": "这附近有地铁站吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes. Go straight. The subway station is next to the park.",
|
||||||
|
"goal": "确认在公园旁边",
|
||||||
|
"model": "Next to the park?",
|
||||||
|
"zh": "在公园旁边?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, on the left. Then take the subway. The museum stop is number six.",
|
||||||
|
"goal": "请对方在地图上指出博物馆站",
|
||||||
|
"model": "Can you show me on the map, please?",
|
||||||
|
"zh": "你能在地图上指给我看吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. Look, it's here, near the river.",
|
||||||
|
"goal": "道谢",
|
||||||
|
"model": "Thank you very much!",
|
||||||
|
"zh": "非常感谢!",
|
||||||
|
"itemIds": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U04-T1",
|
||||||
|
"sceneId": "A1-U04-C1",
|
||||||
|
"goal": "说自己迷路,问到火车站的路线,确认左右、位置和距离",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P03",
|
||||||
|
"A1-U04-P01",
|
||||||
|
"A1-U04-W01",
|
||||||
|
"A1-U04-P05",
|
||||||
|
"A1-U04-P04",
|
||||||
|
"A1-U04-W03",
|
||||||
|
"A1-U04-P06",
|
||||||
|
"A1-U04-P07",
|
||||||
|
"A1-U04-P08",
|
||||||
|
"A1-U04-P09",
|
||||||
|
"A1-U04-P10"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"目的地",
|
||||||
|
"路线",
|
||||||
|
"距离"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-T2",
|
||||||
|
"sceneId": "A1-U04-C2",
|
||||||
|
"goal": "问洗手间在哪里并复述路线",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P01",
|
||||||
|
"A1-U04-W02",
|
||||||
|
"A1-U04-P02",
|
||||||
|
"A1-U04-P04",
|
||||||
|
"A1-U04-P06",
|
||||||
|
"A1-U04-W03",
|
||||||
|
"A1-U04-P08",
|
||||||
|
"A1-U04-P09"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"地点",
|
||||||
|
"左右"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-T3",
|
||||||
|
"sceneId": "A1-U04-C3",
|
||||||
|
"goal": "目的地很远时改问地铁站,并请对方在地图上指出",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U04-P03",
|
||||||
|
"A1-U04-P02",
|
||||||
|
"A1-U04-W01",
|
||||||
|
"A1-U04-P07",
|
||||||
|
"A1-U04-P10"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"目的地",
|
||||||
|
"交通方式"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U04-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "路人给你指路",
|
||||||
|
"text": "Excuse me. Do you need help? You look lost. The train station? OK, listen. Go straight down this street. Walk two blocks to the traffic light, then turn left at the bank. The station is at the end of the road, on the right, next to the church. It's not far — about ten minutes on foot. A big supermarket and a post office are near it too. You can see the sign for the subway there. Have a good trip!",
|
||||||
|
"glosses": {
|
||||||
|
"luck": "good luck 祝好运",
|
||||||
|
"trip": "旅行",
|
||||||
|
"foot": "on foot 步行",
|
||||||
|
"road": "路",
|
||||||
|
"big": "大的",
|
||||||
|
"too": "也"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "这段话在做什么?",
|
||||||
|
"options": [
|
||||||
|
"给人指去火车站的路",
|
||||||
|
"介绍一家餐厅",
|
||||||
|
"问多少钱"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "火车站在什么旁边?",
|
||||||
|
"options": [
|
||||||
|
"教堂旁边",
|
||||||
|
"银行旁边",
|
||||||
|
"公园旁边"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:问去博物馆的路",
|
||||||
|
"text": "Anna: Excuse me, how do I get to the museum? I'm lost.\nMan: The museum? Go straight, cross the bridge, and turn right at the corner.\nAnna: Turn right at the corner. Is it far?\nMan: No, it's near — about five minutes. It's the second building on your left, next to the park.\nAnna: Is there a library near the museum too?\nMan: Yes, at the end of the street, near the river and the garden.\nAnna: Can you show me on the map?\nMan: Sure. We are here, in the town center. This is the way to the museum.\nAnna: Great. Is there a restaurant near there?\nMan: Yes, next to the cinema. Thank you, and have a nice day!",
|
||||||
|
"glosses": {
|
||||||
|
"cross": "穿过",
|
||||||
|
"center": "中心",
|
||||||
|
"man": "男人",
|
||||||
|
"too": "也"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "去博物馆要在拐角怎么走?",
|
||||||
|
"options": [
|
||||||
|
"右转",
|
||||||
|
"左转",
|
||||||
|
"一直走"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "博物馆离这里远吗?",
|
||||||
|
"options": [
|
||||||
|
"不远,大约五分钟",
|
||||||
|
"很远,要坐车",
|
||||||
|
"不知道"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "opposite / across from",
|
||||||
|
"reason": "A2 方位词,放到 A2 的描述地点单元"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "north / south / east / west",
|
||||||
|
"reason": "A2;日常问路很少用方位"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,910 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U05",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "在餐厅点餐",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "点餐、问推荐、要账单",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "141",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "只把 I'll have… 当作点菜的固定句块,不展开 will 的将来用法"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "123",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "239",
|
||||||
|
"use": "receptive"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "142",
|
||||||
|
"use": "receptive"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "15",
|
||||||
|
"use": "active"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U05-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "A table for two, please.",
|
||||||
|
"zh": "请给我们一张两人桌。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"table for"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "A table for four, please.",
|
||||||
|
"zh": "请给我们一张四人桌。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "你们两个人走进餐厅,告诉服务员要几人桌。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "What do you recommend?",
|
||||||
|
"zh": "你推荐什么?",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "recommend 在 CEFR-J 为 B1,但在餐厅请人推荐是外出吃饭最常用的一句",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"recommend"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "What do you recommend today?",
|
||||||
|
"zh": "你今天推荐什么?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "你不知道点什么,请服务员推荐。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I'll have the fish.",
|
||||||
|
"zh": "我要鱼。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"i will have"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'll have the soup, please.",
|
||||||
|
"zh": "我要汤,谢谢。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉服务员你要牛肉。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "soup",
|
||||||
|
"zh": "汤",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"soup"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The soup is very hot.",
|
||||||
|
"zh": "汤很烫。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说“汤”。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "rice",
|
||||||
|
"zh": "米饭",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"rice"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Can I have some rice, please?",
|
||||||
|
"zh": "可以给我一些米饭吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "向服务员要一些米饭。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-W03",
|
||||||
|
"type": "word",
|
||||||
|
"en": "fish",
|
||||||
|
"zh": "鱼",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"fish"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The fish is very good here.",
|
||||||
|
"zh": "这里的鱼很好吃。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说“鱼”。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-W04",
|
||||||
|
"type": "word",
|
||||||
|
"en": "vegetables",
|
||||||
|
"zh": "蔬菜",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"vegetable",
|
||||||
|
"vegetables"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'd like some vegetables, please.",
|
||||||
|
"zh": "我想要一些蔬菜。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你想要蔬菜。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Is it spicy?",
|
||||||
|
"zh": "辣吗?",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "spicy 在 CEFR-J 为 B1,但对习惯问辣度的中国游客点菜很关键",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"spicy"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Is the chicken spicy?",
|
||||||
|
"zh": "鸡肉辣吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "点菜前问这道菜辣不辣。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Some water, please.",
|
||||||
|
"zh": "请给我一些水。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"water"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Can I have some water, please?",
|
||||||
|
"zh": "可以给我一些水吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "向服务员要水。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-W05",
|
||||||
|
"type": "word",
|
||||||
|
"en": "hungry",
|
||||||
|
"zh": "饿的",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"hungry"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'm very hungry.",
|
||||||
|
"zh": "我很饿。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你很饿。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I'm full.",
|
||||||
|
"zh": "我饱了。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"i am full",
|
||||||
|
"we are full"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "No dessert, thanks. I'm full.",
|
||||||
|
"zh": "不要甜点了,谢谢。我饱了。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "服务员问你要不要甜点,说你已经饱了。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-P07",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Can I have the bill, please?",
|
||||||
|
"zh": "请给我账单。",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "bill 在 CEFR-J 为 A2,但吃完结账必须会说",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"the bill",
|
||||||
|
"the check"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Excuse me. Can we have the bill, please?",
|
||||||
|
"zh": "打扰一下,可以给我们账单吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "吃完了,向服务员要账单。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R01",
|
||||||
|
"en": "meal",
|
||||||
|
"zh": "一顿饭"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R02",
|
||||||
|
"en": "dinner",
|
||||||
|
"zh": "晚饭"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R03",
|
||||||
|
"en": "lunch",
|
||||||
|
"zh": "午饭"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R04",
|
||||||
|
"en": "waiter",
|
||||||
|
"zh": "服务员"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R05",
|
||||||
|
"en": "egg",
|
||||||
|
"zh": "鸡蛋"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R06",
|
||||||
|
"en": "meat",
|
||||||
|
"zh": "肉"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R07",
|
||||||
|
"en": "beef",
|
||||||
|
"zh": "牛肉"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R08",
|
||||||
|
"en": "potato",
|
||||||
|
"zh": "土豆"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R09",
|
||||||
|
"en": "tomato",
|
||||||
|
"zh": "西红柿"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R10",
|
||||||
|
"en": "pizza",
|
||||||
|
"zh": "比萨饼"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R11",
|
||||||
|
"en": "salad",
|
||||||
|
"zh": "沙拉"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R12",
|
||||||
|
"en": "fruit",
|
||||||
|
"zh": "水果"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R13",
|
||||||
|
"en": "banana",
|
||||||
|
"zh": "香蕉"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R14",
|
||||||
|
"en": "ice cream",
|
||||||
|
"zh": "冰淇淋"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R15",
|
||||||
|
"en": "glass",
|
||||||
|
"zh": "玻璃杯"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R16",
|
||||||
|
"en": "knife",
|
||||||
|
"zh": "刀"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R17",
|
||||||
|
"en": "fork",
|
||||||
|
"zh": "叉子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R18",
|
||||||
|
"en": "spoon",
|
||||||
|
"zh": "勺子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R19",
|
||||||
|
"en": "dessert",
|
||||||
|
"zh": "甜点"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R20",
|
||||||
|
"en": "special",
|
||||||
|
"zh": "特别的;特色菜"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R21",
|
||||||
|
"en": "try",
|
||||||
|
"zh": "尝试"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R22",
|
||||||
|
"en": "people",
|
||||||
|
"zh": "人们"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R23",
|
||||||
|
"en": "seat",
|
||||||
|
"zh": "座位"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R24",
|
||||||
|
"en": "dish",
|
||||||
|
"zh": "一道菜"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R25",
|
||||||
|
"en": "too",
|
||||||
|
"zh": "太"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R26",
|
||||||
|
"en": "smell",
|
||||||
|
"zh": "闻起来"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R27",
|
||||||
|
"en": "tip",
|
||||||
|
"zh": "小费"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R28",
|
||||||
|
"en": "hamburger",
|
||||||
|
"zh": "汉堡包"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R29",
|
||||||
|
"en": "butter",
|
||||||
|
"zh": "黄油"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R30",
|
||||||
|
"en": "ask",
|
||||||
|
"zh": "问;请求"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-R31",
|
||||||
|
"en": "sit",
|
||||||
|
"zh": "坐"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U05-S1",
|
||||||
|
"title": "入座与请人推荐",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-P01",
|
||||||
|
"A1-U05-W05",
|
||||||
|
"A1-U05-P02",
|
||||||
|
"A1-U05-P03"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Hello. How many people? A table for two, please. Sure. Sit here, please. Here is the menu, and some bread and butter.",
|
||||||
|
"question": "他们要几人桌?",
|
||||||
|
"options": [
|
||||||
|
"两人桌",
|
||||||
|
"三人桌",
|
||||||
|
"四人桌"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "A table for two, please."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'm very hungry."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "What do you recommend?",
|
||||||
|
"tip": "recommend 重音在最后的 mend"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'll have the fish, please.",
|
||||||
|
"tip": "I'll 读作 /aɪl/,很短"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "TODAY'S SPECIAL\nFish with rice $15\nBeef with potatoes $18\nTomato soup $6\nEgg salad $7\nPizza $12\nDessert: banana ice cream $5",
|
||||||
|
"question": "哪一道菜最便宜?",
|
||||||
|
"options": [
|
||||||
|
"tomato soup",
|
||||||
|
"egg salad",
|
||||||
|
"pizza"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:要一张两人桌,再说你要鱼。",
|
||||||
|
"example": "A table for two, please. I'll have the fish.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-P01",
|
||||||
|
"A1-U05-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "想想你常去的一家餐厅,用英语请服务员推荐,然后点一道菜。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-P02",
|
||||||
|
"A1-U05-P03"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-S2",
|
||||||
|
"title": "点菜:汤、米饭、辣不辣",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-W01",
|
||||||
|
"A1-U05-W02",
|
||||||
|
"A1-U05-W03",
|
||||||
|
"A1-U05-W04",
|
||||||
|
"A1-U05-P04",
|
||||||
|
"A1-U05-P05"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "What would you like? I'll have the chicken soup and rice. Is the soup spicy? No, it isn't. It has meat and vegetables. And some water, please.",
|
||||||
|
"question": "顾客点了什么?",
|
||||||
|
"options": [
|
||||||
|
"鸡汤和米饭",
|
||||||
|
"鱼和米饭",
|
||||||
|
"鸡汤和蔬菜"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "soup, rice, fish"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'd like some vegetables, please.",
|
||||||
|
"tip": "vegetables 读作三个音节 /ˈvedʒtəblz/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Is it spicy?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Some water, please."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Waiter: Would you like to try the beef? It's very good.\nMia: Is it spicy?\nWaiter: Yes, very spicy.\nMia: Oh, no. I'll have the fish and some vegetables.\nWaiter: And to drink?\nMia: A glass of water, please.",
|
||||||
|
"question": "Mia 点了什么主菜?",
|
||||||
|
"options": [
|
||||||
|
"the fish",
|
||||||
|
"the beef",
|
||||||
|
"a glass of water"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:问鱼辣不辣,再要一些水。",
|
||||||
|
"example": "Is the fish spicy? Some water, please.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-P04",
|
||||||
|
"A1-U05-P05",
|
||||||
|
"A1-U05-W03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语点一份汤、米饭和蔬菜。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-W01",
|
||||||
|
"A1-U05-W02",
|
||||||
|
"A1-U05-W04"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-S3",
|
||||||
|
"title": "吃饱了,结账",
|
||||||
|
"minutes": 10,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-P06",
|
||||||
|
"A1-U05-P07"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Would you like some dessert? We have ice cream and fruit. No, thanks. I'm full. Can I have the bill, please?",
|
||||||
|
"question": "顾客为什么不要甜点?",
|
||||||
|
"options": [
|
||||||
|
"已经吃饱了",
|
||||||
|
"不喜欢冰淇淋",
|
||||||
|
"甜点太贵"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "I'm full."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "No dessert, thanks."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Can I have the bill, please?",
|
||||||
|
"tip": "bill 的 i 是短音,不要读成 beer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Please wait here. The waiter will take you to a seat.\nLunch: 11 to 2. Dinner: 5 to 10.\nYou can pay by cash or card at your table. Please ask the waiter for the bill.\nNo tips, please.",
|
||||||
|
"question": "怎么结账?",
|
||||||
|
"options": [
|
||||||
|
"在餐桌上向服务员要账单",
|
||||||
|
"去门口付钱",
|
||||||
|
"只能付现金"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:说你吃饱了,再要账单。",
|
||||||
|
"example": "I'm full. Can I have the bill, please?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-P06",
|
||||||
|
"A1-U05-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "回想上次在外面吃饭,用英语说你吃饱了并要账单。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-P06",
|
||||||
|
"A1-U05-P07"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U05-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "晚饭点菜",
|
||||||
|
"learnerRole": "顾客",
|
||||||
|
"aiRole": "服务员",
|
||||||
|
"setting": "你和朋友晚上走进一家餐厅吃饭。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello! How many people?",
|
||||||
|
"goal": "说要两人桌",
|
||||||
|
"model": "A table for two, please.",
|
||||||
|
"zh": "两人桌,谢谢。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. Sit here, please. Here is the menu. Our special dish today is beef with potatoes.",
|
||||||
|
"goal": "说你们很饿,请服务员推荐",
|
||||||
|
"model": "Thank you. We're very hungry. What do you recommend?",
|
||||||
|
"zh": "谢谢。我们很饿。你推荐什么?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-W05",
|
||||||
|
"A1-U05-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "The fish is very good. It comes with rice and vegetables.",
|
||||||
|
"goal": "问辣不辣",
|
||||||
|
"model": "Is it spicy?",
|
||||||
|
"zh": "辣吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "No, it isn't.",
|
||||||
|
"goal": "点鱼和一份汤",
|
||||||
|
"model": "Great. I'll have the fish and a soup, please.",
|
||||||
|
"zh": "好的,我要鱼和一份汤。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-P03",
|
||||||
|
"A1-U05-W03",
|
||||||
|
"A1-U05-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "And to drink? Here is a spoon for the soup.",
|
||||||
|
"goal": "要水",
|
||||||
|
"model": "Some water, please.",
|
||||||
|
"zh": "请给我一些水。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-P05"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "吃完结账",
|
||||||
|
"learnerRole": "顾客",
|
||||||
|
"aiRole": "服务员",
|
||||||
|
"setting": "你吃完午饭,想结账离开。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "How is your meal?",
|
||||||
|
"goal": "说很好,你已经饱了",
|
||||||
|
"model": "Very good, thank you. I'm full.",
|
||||||
|
"zh": "很好,谢谢。我饱了。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Would you like some dessert? We have ice cream, fruit and cake.",
|
||||||
|
"goal": "拒绝并要账单",
|
||||||
|
"model": "No, thanks. Can I have the bill, please?",
|
||||||
|
"zh": "不用了,谢谢。可以给我账单吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. Here you are. Lunch for one, twelve dollars.",
|
||||||
|
"goal": "问能不能刷卡",
|
||||||
|
"model": "Can I pay by card?",
|
||||||
|
"zh": "可以刷卡吗?",
|
||||||
|
"itemIds": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, sure.",
|
||||||
|
"goal": "道谢,说这里的汤和米饭很好",
|
||||||
|
"model": "Thank you. The soup and rice are very good here.",
|
||||||
|
"zh": "谢谢。这里的汤和米饭很好。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-W01",
|
||||||
|
"A1-U05-W02"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "快餐店点汉堡",
|
||||||
|
"learnerRole": "顾客",
|
||||||
|
"aiRole": "店员",
|
||||||
|
"setting": "你在一家快餐店,很饿,但不太能吃辣。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi! What would you like?",
|
||||||
|
"goal": "说你很饿,要一个汉堡",
|
||||||
|
"model": "I'm hungry. I'll have a hamburger, please.",
|
||||||
|
"zh": "我饿了。我要一个汉堡。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-W05",
|
||||||
|
"A1-U05-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Beef or chicken? The chicken is spicy.",
|
||||||
|
"goal": "说要牛肉的,鸡肉太辣",
|
||||||
|
"model": "Beef, please. The chicken is too spicy for me.",
|
||||||
|
"zh": "牛肉的。鸡肉对我来说太辣了。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Would you like vegetables or potatoes with it?",
|
||||||
|
"goal": "选蔬菜",
|
||||||
|
"model": "Vegetables, please.",
|
||||||
|
"zh": "蔬菜,谢谢。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-W04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "And to drink?",
|
||||||
|
"goal": "要水",
|
||||||
|
"model": "Just some water, please.",
|
||||||
|
"zh": "只要一些水,谢谢。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK. Here is your food, and a knife and fork.",
|
||||||
|
"goal": "道谢",
|
||||||
|
"model": "Thank you! It smells good.",
|
||||||
|
"zh": "谢谢!闻起来很香。",
|
||||||
|
"itemIds": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U05-T1",
|
||||||
|
"sceneId": "A1-U05-C1",
|
||||||
|
"goal": "要座位、请人推荐、问辣度并点主菜、汤和饮料",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-P01",
|
||||||
|
"A1-U05-W05",
|
||||||
|
"A1-U05-P02",
|
||||||
|
"A1-U05-P04",
|
||||||
|
"A1-U05-P03",
|
||||||
|
"A1-U05-W03",
|
||||||
|
"A1-U05-W01",
|
||||||
|
"A1-U05-P05"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"人数",
|
||||||
|
"主菜",
|
||||||
|
"饮料"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-T2",
|
||||||
|
"sceneId": "A1-U05-C2",
|
||||||
|
"goal": "吃完说饱了,拒绝甜点并结账",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-P06",
|
||||||
|
"A1-U05-P07",
|
||||||
|
"A1-U05-W01",
|
||||||
|
"A1-U05-W02"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"甜点",
|
||||||
|
"账单"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-T3",
|
||||||
|
"sceneId": "A1-U05-C3",
|
||||||
|
"goal": "在快餐店按口味点餐",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U05-W05",
|
||||||
|
"A1-U05-P03",
|
||||||
|
"A1-U05-P04",
|
||||||
|
"A1-U05-W04",
|
||||||
|
"A1-U05-P05"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"主食",
|
||||||
|
"辣度",
|
||||||
|
"配菜"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U05-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "餐厅介绍今晚的菜",
|
||||||
|
"text": "Good evening, and welcome to our restaurant. Please sit down; here is a seat for you. Tonight we have a special meal. First, a hot soup or a fresh salad with tomato. Then you can try beef with potato, chicken with rice, or a pizza. The fish is our best dish — it smells wonderful and is not spicy. For dessert, we have ice cream, fruit and banana cake. Here are your knife, fork and spoon, and a glass of water. Tell the waiter when you are ready. Enjoy your dinner!",
|
||||||
|
"glosses": {
|
||||||
|
"evening": "傍晚,晚上",
|
||||||
|
"tell": "告诉",
|
||||||
|
"tonight": "今晚",
|
||||||
|
"best": "最好的",
|
||||||
|
"wonderful": "很棒的",
|
||||||
|
"fresh": "新鲜的"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "这段话主要说什么?",
|
||||||
|
"options": [
|
||||||
|
"餐厅今晚有什么菜",
|
||||||
|
"怎么去餐厅",
|
||||||
|
"餐厅几点关门"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "关于鱼,下面哪个对?",
|
||||||
|
"options": [
|
||||||
|
"很好吃,不辣",
|
||||||
|
"很辣",
|
||||||
|
"已经卖完了"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:在餐厅点餐",
|
||||||
|
"text": "Waiter: Good evening. A table for two? Here are your seats.\nBen: Thank you. We're very hungry. What do you recommend?\nWaiter: The beef is our special dish today. The fish and the salad are good too.\nBen: I'll have the fish with rice and some vegetables. Is it spicy?\nWaiter: No, it isn't. And to drink?\nBen: A glass of water, please. Can I have a fork and a spoon?\nWaiter: Of course. Would you like a dessert? The ice cream is sweet and the fruit is fresh.\nBen: Ice cream, please. That was delicious. I'm full now. Can I have the bill?\nWaiter: Sure. Many people ask for the ice cream — it's the best!\nBen: Great. Here is a tip. Thank you!",
|
||||||
|
"glosses": {
|
||||||
|
"evening": "傍晚,晚上",
|
||||||
|
"best": "最好的",
|
||||||
|
"course": "of course 当然",
|
||||||
|
"fresh": "新鲜的"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "服务员今天推荐什么菜?",
|
||||||
|
"options": [
|
||||||
|
"牛肉",
|
||||||
|
"汤",
|
||||||
|
"香蕉"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "inference",
|
||||||
|
"question": "Ben 为什么最后要账单?",
|
||||||
|
"options": [
|
||||||
|
"他吃完了,吃饱了",
|
||||||
|
"菜太辣了",
|
||||||
|
"他要换一张桌子"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "reservation / book a table",
|
||||||
|
"reason": "B1;预订放到 A2 的预订单元"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "noodle",
|
||||||
|
"reason": "CEFR-J 未收录,作为菜单专名由应用临时提示"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,989 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U06",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "家人与住处",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "介绍家人,说住在哪里和家里有什么",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "8",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "59",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "59-2",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "60",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "15",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "146",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "101",
|
||||||
|
"use": "receptive"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U06-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "This is my family.",
|
||||||
|
"zh": "这是我的家人。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"my family"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "This is my family. These are my parents.",
|
||||||
|
"zh": "这是我的家人。这两位是我的父母。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "给朋友看全家福,开头说一句介绍。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "parents",
|
||||||
|
"zh": "父母",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"parent",
|
||||||
|
"parents"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "My parents live in Beijing.",
|
||||||
|
"zh": "我父母住在北京。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说“我父母”。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Do you have any brothers or sisters?",
|
||||||
|
"zh": "你有兄弟姐妹吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"brothers or sisters",
|
||||||
|
"brother or sister"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Do you have any brothers or sisters?",
|
||||||
|
"zh": "你有兄弟姐妹吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问新朋友有没有兄弟姐妹。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "husband",
|
||||||
|
"zh": "丈夫",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"husband"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "This is my husband, David.",
|
||||||
|
"zh": "这是我丈夫大卫。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "介绍你的丈夫。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-W03",
|
||||||
|
"type": "word",
|
||||||
|
"en": "wife",
|
||||||
|
"zh": "妻子",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"wife"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "My wife is a doctor.",
|
||||||
|
"zh": "我妻子是医生。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "介绍你的妻子。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-W04",
|
||||||
|
"type": "word",
|
||||||
|
"en": "children",
|
||||||
|
"zh": "孩子们",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"child",
|
||||||
|
"children"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "We have two children.",
|
||||||
|
"zh": "我们有两个孩子。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你有两个孩子。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "What does he do?",
|
||||||
|
"zh": "他是做什么工作的?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"what does he do",
|
||||||
|
"what does she do",
|
||||||
|
"what do you do",
|
||||||
|
"what does your"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "What does your sister do?",
|
||||||
|
"zh": "你姐姐是做什么工作的?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问朋友的妻子是做什么工作的。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I live in Shanghai.",
|
||||||
|
"zh": "我住在上海。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"live in",
|
||||||
|
"lives in"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "My parents live in Beijing.",
|
||||||
|
"zh": "我父母住在北京。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你住在哪个城市。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I live with my parents.",
|
||||||
|
"zh": "我和父母一起住。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"live with",
|
||||||
|
"lives with"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I live with my wife and children.",
|
||||||
|
"zh": "我和妻子、孩子一起住。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你和谁一起住。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-W05",
|
||||||
|
"type": "word",
|
||||||
|
"en": "flat",
|
||||||
|
"zh": "公寓",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"flat",
|
||||||
|
"apartment"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I live in a small flat.",
|
||||||
|
"zh": "我住在一个小公寓里。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你住在一个公寓里。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "There are two bedrooms.",
|
||||||
|
"zh": "有两间卧室。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"there are",
|
||||||
|
"there is"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "There is a big kitchen.",
|
||||||
|
"zh": "有一个大厨房。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你家有三间卧室。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-W06",
|
||||||
|
"type": "word",
|
||||||
|
"en": "kitchen",
|
||||||
|
"zh": "厨房",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"kitchen"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The kitchen is small.",
|
||||||
|
"zh": "厨房很小。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说“厨房”。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-W07",
|
||||||
|
"type": "word",
|
||||||
|
"en": "big",
|
||||||
|
"zh": "大的",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"big"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Our house is very big.",
|
||||||
|
"zh": "我们的房子很大。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你家的客厅很大。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R01",
|
||||||
|
"en": "grandmother",
|
||||||
|
"zh": "祖母;外祖母"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R02",
|
||||||
|
"en": "grandfather",
|
||||||
|
"zh": "祖父;外祖父"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R03",
|
||||||
|
"en": "aunt",
|
||||||
|
"zh": "阿姨;姑姑"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R04",
|
||||||
|
"en": "uncle",
|
||||||
|
"zh": "叔叔;舅舅"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R05",
|
||||||
|
"en": "cousin",
|
||||||
|
"zh": "堂/表兄弟姐妹"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R06",
|
||||||
|
"en": "baby",
|
||||||
|
"zh": "婴儿"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R07",
|
||||||
|
"en": "son",
|
||||||
|
"zh": "儿子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R08",
|
||||||
|
"en": "daughter",
|
||||||
|
"zh": "女儿"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R09",
|
||||||
|
"en": "house",
|
||||||
|
"zh": "房子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R10",
|
||||||
|
"en": "bedroom",
|
||||||
|
"zh": "卧室"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R11",
|
||||||
|
"en": "bathroom",
|
||||||
|
"zh": "浴室;卫生间"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R12",
|
||||||
|
"en": "living room",
|
||||||
|
"zh": "客厅"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R13",
|
||||||
|
"en": "window",
|
||||||
|
"zh": "窗户"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R14",
|
||||||
|
"en": "door",
|
||||||
|
"zh": "门"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R15",
|
||||||
|
"en": "sofa",
|
||||||
|
"zh": "沙发"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R16",
|
||||||
|
"en": "new",
|
||||||
|
"zh": "新的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R17",
|
||||||
|
"en": "bed",
|
||||||
|
"zh": "床"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R18",
|
||||||
|
"en": "floor",
|
||||||
|
"zh": "楼层;地板"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R19",
|
||||||
|
"en": "neighbor",
|
||||||
|
"zh": "邻居"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R20",
|
||||||
|
"en": "pet",
|
||||||
|
"zh": "宠物"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R21",
|
||||||
|
"en": "dog",
|
||||||
|
"zh": "狗"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R22",
|
||||||
|
"en": "cat",
|
||||||
|
"zh": "猫"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R23",
|
||||||
|
"en": "old",
|
||||||
|
"zh": "老的;旧的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R24",
|
||||||
|
"en": "young",
|
||||||
|
"zh": "年轻的;年幼的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R25",
|
||||||
|
"en": "little",
|
||||||
|
"zh": "小的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R26",
|
||||||
|
"en": "job",
|
||||||
|
"zh": "工作"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R27",
|
||||||
|
"en": "work",
|
||||||
|
"zh": "工作;上班"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R28",
|
||||||
|
"en": "doctor",
|
||||||
|
"zh": "医生"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R29",
|
||||||
|
"en": "teacher",
|
||||||
|
"zh": "老师"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R30",
|
||||||
|
"en": "student",
|
||||||
|
"zh": "学生"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R31",
|
||||||
|
"en": "hometown",
|
||||||
|
"zh": "家乡"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R32",
|
||||||
|
"en": "quiet",
|
||||||
|
"zh": "安静的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R33",
|
||||||
|
"en": "TV",
|
||||||
|
"zh": "电视"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R34",
|
||||||
|
"en": "home",
|
||||||
|
"zh": "家"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-R35",
|
||||||
|
"en": "married",
|
||||||
|
"zh": "已婚的"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U06-S1",
|
||||||
|
"title": "介绍家人",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-P01",
|
||||||
|
"A1-U06-W01",
|
||||||
|
"A1-U06-P02",
|
||||||
|
"A1-U06-W02",
|
||||||
|
"A1-U06-W03",
|
||||||
|
"A1-U06-W04"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "This is my family. These are my parents. This is my wife, Anna, and these are our children, Ben and Lily. Ben is eight. Lily is a baby.",
|
||||||
|
"question": "Ben 几岁?",
|
||||||
|
"options": [
|
||||||
|
"八岁",
|
||||||
|
"六岁",
|
||||||
|
"三岁"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "This is my family."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "These are my parents."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "This is my husband, David."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "This is my son, and this is my daughter."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "My wife and I have two children.",
|
||||||
|
"tip": "children 的 ch 读 /tʃ/,结尾是 /ən/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Do you have any brothers or sisters?",
|
||||||
|
"tip": "brothers or sisters 连读,or 很轻"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Hi, I'm Tom. This is my family.\nMy grandfather and grandmother are on the left. My grandfather is 80. He's very old.\nMy parents are next to them.\nMy aunt and uncle are on the right. Their son, my cousin Leo, is only two.\nI don't have any brothers or sisters.",
|
||||||
|
"question": "Tom 有兄弟姐妹吗?",
|
||||||
|
"options": [
|
||||||
|
"没有",
|
||||||
|
"有一个哥哥",
|
||||||
|
"有一个妹妹"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:介绍你的父母,再问对方有没有兄弟姐妹。",
|
||||||
|
"example": "These are my parents. Do you have any brothers or sisters?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-W01",
|
||||||
|
"A1-U06-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "拿出手机里一张家人的照片,用英语一个一个介绍。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-P01",
|
||||||
|
"A1-U06-W01",
|
||||||
|
"A1-U06-W04"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-S2",
|
||||||
|
"title": "做什么工作、住在哪里",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-P03",
|
||||||
|
"A1-U06-P04",
|
||||||
|
"A1-U06-P05"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Are you married? Yes. What does your wife do? She's a doctor. And you? I'm a teacher. We live in Shanghai with our two children.",
|
||||||
|
"question": "说话人做什么工作?",
|
||||||
|
"options": [
|
||||||
|
"老师",
|
||||||
|
"医生",
|
||||||
|
"学生"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "What does he do?",
|
||||||
|
"tip": "does he 连读,he 的 h 可以很弱"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "She's a teacher."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I live in Beijing."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I live with my parents."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Nina: Where do you live, Sam?\nSam: I live in London, but my hometown is Sydney.\nNina: Do you live with your family?\nSam: No. My parents live in Sydney. I live with a friend. He's a student.\nNina: What's your job?\nSam: I work in a hospital. I'm a doctor.",
|
||||||
|
"question": "Sam 和谁住在一起?",
|
||||||
|
"options": [
|
||||||
|
"with a friend",
|
||||||
|
"with his parents",
|
||||||
|
"in Sydney"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:说你住在哪个城市、和谁住。",
|
||||||
|
"example": "I live in Shanghai. I live with my wife and children.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-P04",
|
||||||
|
"A1-U06-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语说说你家里的一个人:他或她做什么工作、住在哪里。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-P03",
|
||||||
|
"A1-U06-P04"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-S3",
|
||||||
|
"title": "我住的地方",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-W05",
|
||||||
|
"A1-U06-P06",
|
||||||
|
"A1-U06-W06",
|
||||||
|
"A1-U06-W07"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Is your flat big? No, it's small. It's on the second floor. There are two bedrooms, a kitchen, a bathroom and a small living room. It's quiet, and my neighbors are very nice.",
|
||||||
|
"question": "这套公寓有几间卧室?",
|
||||||
|
"options": [
|
||||||
|
"两间",
|
||||||
|
"三间",
|
||||||
|
"一间"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "I live in a small flat."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "There are two bedrooms.",
|
||||||
|
"tip": "There are 连读成 /ðeərə/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "The kitchen is very big."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Is your house big?"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Big family house\nThere are three bedrooms with big beds, and two bathrooms.\nThe kitchen is big. There is a sofa and a TV in the living room.\nThere is a small garden. Pets are OK: dogs and cats.\nIt's near a park and the subway.",
|
||||||
|
"question": "关于宠物,这里怎么说?",
|
||||||
|
"options": [
|
||||||
|
"允许养宠物",
|
||||||
|
"禁止养宠物",
|
||||||
|
"没有提到宠物"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:说你住在一个小公寓里,里面有两间卧室。",
|
||||||
|
"example": "I live in a small flat. There are two bedrooms.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-W05",
|
||||||
|
"A1-U06-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语介绍你现在住的地方:大不大、有几间卧室、厨房怎么样。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-W05",
|
||||||
|
"A1-U06-P06",
|
||||||
|
"A1-U06-W06",
|
||||||
|
"A1-U06-W07"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U06-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "和旅途中认识的朋友聊家人",
|
||||||
|
"learnerRole": "你",
|
||||||
|
"aiRole": "刚认识的朋友",
|
||||||
|
"setting": "你在火车上和刚认识的朋友聊天,对方拿出手机给你看家人的照片。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Look, this is my family. These are my parents, and this is my little sister. And this is our dog.",
|
||||||
|
"goal": "也介绍你的家人",
|
||||||
|
"model": "This is my family. This is my wife, and these are our children.",
|
||||||
|
"zh": "这是我的家人。这是我妻子,这是我们的孩子。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-P01",
|
||||||
|
"A1-U06-W03",
|
||||||
|
"A1-U06-W04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Your children are so young! What does your wife do?",
|
||||||
|
"goal": "说妻子的工作,再问对方的妹妹做什么",
|
||||||
|
"model": "She's a doctor. What does your sister do?",
|
||||||
|
"zh": "她是医生。你妹妹是做什么的?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "She's a student. Do you have any brothers or sisters?",
|
||||||
|
"goal": "说你有一个哥哥,他和父母住在一起",
|
||||||
|
"model": "Yes, a brother. He lives with my parents.",
|
||||||
|
"zh": "有,一个哥哥。他和我父母住在一起。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Where do you live?",
|
||||||
|
"goal": "说你住在上海,家里是个大公寓",
|
||||||
|
"model": "I live in Shanghai. We have a big flat.",
|
||||||
|
"zh": "我住在上海。我们有一个大公寓。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-P04",
|
||||||
|
"A1-U06-W05",
|
||||||
|
"A1-U06-W07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Nice. Is it quiet?",
|
||||||
|
"goal": "说很安静,有三间卧室,厨房很大",
|
||||||
|
"model": "Yes, it's quiet. There are three bedrooms, and the kitchen is big.",
|
||||||
|
"zh": "是的,很安静。有三间卧室,厨房很大。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-P06",
|
||||||
|
"A1-U06-W06",
|
||||||
|
"A1-U06-W07"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "和民宿主人聊天",
|
||||||
|
"learnerRole": "住客",
|
||||||
|
"aiRole": "民宿主人",
|
||||||
|
"setting": "你带家人住进一家小民宿,主人很爱聊天。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Welcome! Are you here with your family?",
|
||||||
|
"goal": "说和丈夫、孩子一起来的",
|
||||||
|
"model": "Yes, I'm here with my husband and children.",
|
||||||
|
"zh": "是的,我和丈夫、孩子一起来的。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-W02",
|
||||||
|
"A1-U06-W04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "How nice. I live here with my parents and my grandmother.",
|
||||||
|
"goal": "问主人有没有兄弟姐妹",
|
||||||
|
"model": "Do you have any brothers or sisters?",
|
||||||
|
"zh": "你有兄弟姐妹吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, a brother. He lives in Tokyo. He's a doctor. And your husband?",
|
||||||
|
"goal": "说丈夫是老师",
|
||||||
|
"model": "He's a teacher.",
|
||||||
|
"zh": "他是老师。",
|
||||||
|
"itemIds": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Where do you live?",
|
||||||
|
"goal": "说你们住在北京,和父母住在一起",
|
||||||
|
"model": "We live in Beijing, with my parents.",
|
||||||
|
"zh": "我们住在北京,和我父母一起。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-P04",
|
||||||
|
"A1-U06-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Is your home big?",
|
||||||
|
"goal": "说是个小公寓,有两间卧室",
|
||||||
|
"model": "No, it's a small flat. There are two bedrooms.",
|
||||||
|
"zh": "不大,是个小公寓,有两间卧室。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-W05",
|
||||||
|
"A1-U06-P06"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "视频通话看新家",
|
||||||
|
"learnerRole": "你",
|
||||||
|
"aiRole": "老朋友",
|
||||||
|
"setting": "你刚搬进新家,和老朋友视频通话,带对方看房子。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi! Is this your new home?",
|
||||||
|
"goal": "说是新公寓,不大但很安静",
|
||||||
|
"model": "Yes, this is my new flat. It's not big, but it's quiet.",
|
||||||
|
"zh": "是的,这是我的新公寓。不大,但很安静。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-W05",
|
||||||
|
"A1-U06-W07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Show me the kitchen!",
|
||||||
|
"goal": "说厨房很小,但有一扇大窗户和一扇新门",
|
||||||
|
"model": "Here is the kitchen. It's small, but it has a big window and a new door.",
|
||||||
|
"zh": "这是厨房。很小,但有一扇大窗户和一扇新门。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-W06",
|
||||||
|
"A1-U06-W07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Nice! Do you live with your family?",
|
||||||
|
"goal": "说和妻子住,父母住在家乡",
|
||||||
|
"model": "No, I live with my wife. My parents live in my hometown.",
|
||||||
|
"zh": "不,我和妻子住。我父母住在我的家乡。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-P05",
|
||||||
|
"A1-U06-W03",
|
||||||
|
"A1-U06-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "How are your parents?",
|
||||||
|
"goal": "说他们很好,再问对方的哥哥现在做什么",
|
||||||
|
"model": "They're fine. What does your brother do now?",
|
||||||
|
"zh": "他们很好。你哥哥现在做什么工作?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "He's a student. He lives with our aunt and uncle in London.",
|
||||||
|
"goal": "回应一句",
|
||||||
|
"model": "That's great.",
|
||||||
|
"zh": "那太好了。",
|
||||||
|
"itemIds": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U06-T1",
|
||||||
|
"sceneId": "A1-U06-C1",
|
||||||
|
"goal": "看照片介绍家人,互相问工作、兄弟姐妹、住在哪里和房子",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-P01",
|
||||||
|
"A1-U06-W03",
|
||||||
|
"A1-U06-W04",
|
||||||
|
"A1-U06-P03",
|
||||||
|
"A1-U06-P05",
|
||||||
|
"A1-U06-P04",
|
||||||
|
"A1-U06-W05",
|
||||||
|
"A1-U06-W07",
|
||||||
|
"A1-U06-P06",
|
||||||
|
"A1-U06-W06"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"家人",
|
||||||
|
"工作",
|
||||||
|
"住处"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-T2",
|
||||||
|
"sceneId": "A1-U06-C2",
|
||||||
|
"goal": "回答民宿主人关于家人和住处的问题,并反问一句",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-W02",
|
||||||
|
"A1-U06-W04",
|
||||||
|
"A1-U06-P02",
|
||||||
|
"A1-U06-P04",
|
||||||
|
"A1-U06-W01",
|
||||||
|
"A1-U06-W05",
|
||||||
|
"A1-U06-P06"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"同行的人",
|
||||||
|
"兄弟姐妹",
|
||||||
|
"住处"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-T3",
|
||||||
|
"sceneId": "A1-U06-C3",
|
||||||
|
"goal": "带朋友看新家,说房子情况和与谁同住",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U06-W05",
|
||||||
|
"A1-U06-W07",
|
||||||
|
"A1-U06-W06",
|
||||||
|
"A1-U06-P05",
|
||||||
|
"A1-U06-W03",
|
||||||
|
"A1-U06-W01",
|
||||||
|
"A1-U06-P03"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"房间",
|
||||||
|
"同住的人"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U06-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "朋友介绍全家照",
|
||||||
|
"text": "Look, this is a photo of my family at our new house. These are my parents. My father is a doctor, and my mother is a teacher. This is my little sister; she is a student. Here are my grandmother and grandfather. My uncle, my aunt and my cousin live near us too. I have one brother. He is married and lives with his wife and their baby son and daughter. Our house has three bedrooms, a big living room with a sofa and a TV, a kitchen and two bathrooms. It's quiet, and our neighbor is very kind. I love my home!",
|
||||||
|
"glosses": {
|
||||||
|
"love": "很喜欢,爱",
|
||||||
|
"photo": "照片",
|
||||||
|
"kind": "善良的"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "这段话主要在做什么?",
|
||||||
|
"options": [
|
||||||
|
"介绍自己的家人和家",
|
||||||
|
"说怎么去上海",
|
||||||
|
"问房子多少钱"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "说话人的爸爸做什么工作?",
|
||||||
|
"options": [
|
||||||
|
"医生",
|
||||||
|
"老师",
|
||||||
|
"学生"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:聊各自的家",
|
||||||
|
"text": "New friend: Do you have any brothers or sisters?\nYou: Yes, one brother. He lives with our grandmother and our parents.\nNew friend: Where do you live?\nYou: In a small flat in the city. There are two bedrooms, a living room and a little kitchen.\nNew friend: Is it new?\nYou: No, it's old, but I love it. There is a big window in my bedroom. Do you have a pet?\nYou: Yes, a dog and a cat. What about you?\nNew friend: I live with my husband and our young daughter. Our house is near the park.\nNew friend: What does your uncle do?\nYou: He has a new job. He works in a hospital. My aunt is a teacher.\nNew friend: That's nice.",
|
||||||
|
"glosses": {
|
||||||
|
"love": "很喜欢,爱",
|
||||||
|
"week": "周,星期"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "“你”养了什么宠物?",
|
||||||
|
"options": [
|
||||||
|
"一只狗和一只猫",
|
||||||
|
"一只鸟",
|
||||||
|
"没有宠物"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "新朋友和谁住在一起?",
|
||||||
|
"options": [
|
||||||
|
"丈夫和小女儿",
|
||||||
|
"父母",
|
||||||
|
"一个人住"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "apartment",
|
||||||
|
"reason": "A2;美式说法先在 match 里接受,A2 再正式教"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "rent / landlord",
|
||||||
|
"reason": "A2–B1;租房放到 B1 的租住单元"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,929 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U07",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "公交与地铁",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "买票、问站点、确认下车",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "245",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "246",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "59-2",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "60",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "101",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "117",
|
||||||
|
"use": "receptive"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U07-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "A ticket to the airport, please.",
|
||||||
|
"zh": "一张去机场的票。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"ticket to"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "A ticket to the museum, please.",
|
||||||
|
"zh": "一张去博物馆的票。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "在售票处买一张去机场的票。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Which bus goes to the museum?",
|
||||||
|
"zh": "哪路车去博物馆?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"which bus",
|
||||||
|
"which line",
|
||||||
|
"which train"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Which train goes to the airport?",
|
||||||
|
"zh": "哪趟车去机场?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问哪路公交车去火车站。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Does this bus go to the station?",
|
||||||
|
"zh": "这辆车去车站吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"does this bus go to",
|
||||||
|
"does this train go to"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Does this train go to the airport?",
|
||||||
|
"zh": "这趟车去机场吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "上车前问司机这辆车去不去博物馆。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "line",
|
||||||
|
"zh": "(地铁)线路",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"line"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Take Line 2.",
|
||||||
|
"zh": "坐 2 号线。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说“坐 3 号线”。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Where do I change?",
|
||||||
|
"zh": "我在哪里换乘?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"where do i change",
|
||||||
|
"change at",
|
||||||
|
"change to"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Change to Line 5 at City Park.",
|
||||||
|
"zh": "在城市公园站换乘 5 号线。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问在哪一站换乘。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "How many stops?",
|
||||||
|
"zh": "坐几站?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"how many stops"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "How many stops to the zoo?",
|
||||||
|
"zh": "到动物园坐几站?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问到博物馆要坐几站。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Where do I get off?",
|
||||||
|
"zh": "我在哪里下车?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"get off"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Get off at the next stop.",
|
||||||
|
"zh": "在下一站下车。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问去医院应该在哪里下车。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-P07",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Is this my stop?",
|
||||||
|
"zh": "这是我要下的站吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"my stop"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Excuse me, is this my stop?",
|
||||||
|
"zh": "打扰一下,这是我要下的站吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "车停了,问旁边的人是不是你要下的站。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-P08",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "When is the last train?",
|
||||||
|
"zh": "末班车是几点?",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "last 作限定词在 CEFR-J 为 A2,但晚上出行必须会问末班车",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"last train",
|
||||||
|
"last bus",
|
||||||
|
"next train",
|
||||||
|
"next bus"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "When is the next bus?",
|
||||||
|
"zh": "下一班公交车是几点?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "晚上问末班地铁几点。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-P09",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "It comes every ten minutes.",
|
||||||
|
"zh": "每十分钟一班。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"every"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The train comes every five minutes.",
|
||||||
|
"zh": "火车每五分钟一班。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说公交车每十五分钟一班。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-P10",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Is this seat free?",
|
||||||
|
"zh": "这个座位有人吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"seat free"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Excuse me, is this seat free?",
|
||||||
|
"zh": "打扰一下,这个座位有人吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "在车上问旁边的座位有没有人。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "platform",
|
||||||
|
"zh": "站台",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "platform 在 CEFR-J 为 B1,但坐火车找站台离不开这个词",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"platform"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The train is on Platform 4.",
|
||||||
|
"zh": "火车在 4 号站台。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问火车在几号站台。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R01",
|
||||||
|
"en": "bike",
|
||||||
|
"zh": "自行车"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R02",
|
||||||
|
"en": "bicycle",
|
||||||
|
"zh": "自行车"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R03",
|
||||||
|
"en": "boat",
|
||||||
|
"zh": "小船"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R04",
|
||||||
|
"en": "ship",
|
||||||
|
"zh": "船"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R05",
|
||||||
|
"en": "trip",
|
||||||
|
"zh": "旅程"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R06",
|
||||||
|
"en": "travel",
|
||||||
|
"zh": "出行;旅行"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R07",
|
||||||
|
"en": "arrive",
|
||||||
|
"zh": "到达"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R08",
|
||||||
|
"en": "early",
|
||||||
|
"zh": "早"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R09",
|
||||||
|
"en": "late",
|
||||||
|
"zh": "晚;迟到"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R10",
|
||||||
|
"en": "hour",
|
||||||
|
"zh": "小时"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R11",
|
||||||
|
"en": "half",
|
||||||
|
"zh": "一半"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R12",
|
||||||
|
"en": "quarter",
|
||||||
|
"zh": "一刻钟;四分之一"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R13",
|
||||||
|
"en": "often",
|
||||||
|
"zh": "经常"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R14",
|
||||||
|
"en": "ride",
|
||||||
|
"zh": "乘坐;骑"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R15",
|
||||||
|
"en": "fast",
|
||||||
|
"zh": "快的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R16",
|
||||||
|
"en": "slow",
|
||||||
|
"zh": "慢的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R17",
|
||||||
|
"en": "driver",
|
||||||
|
"zh": "司机"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R18",
|
||||||
|
"en": "passenger",
|
||||||
|
"zh": "乘客"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R19",
|
||||||
|
"en": "tram",
|
||||||
|
"zh": "有轨电车"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R20",
|
||||||
|
"en": "fare",
|
||||||
|
"zh": "车费"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R21",
|
||||||
|
"en": "side",
|
||||||
|
"zh": "边"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R22",
|
||||||
|
"en": "miss",
|
||||||
|
"zh": "错过"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R23",
|
||||||
|
"en": "catch",
|
||||||
|
"zh": "赶上"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R24",
|
||||||
|
"en": "road",
|
||||||
|
"zh": "路"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R25",
|
||||||
|
"en": "direction",
|
||||||
|
"zh": "方向"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R26",
|
||||||
|
"en": "single",
|
||||||
|
"zh": "单程的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R27",
|
||||||
|
"en": "return",
|
||||||
|
"zh": "往返的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R28",
|
||||||
|
"en": "car",
|
||||||
|
"zh": "汽车"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-R29",
|
||||||
|
"en": "zoo",
|
||||||
|
"zh": "动物园"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U07-S1",
|
||||||
|
"title": "买票、问坐哪路车",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P01",
|
||||||
|
"A1-U07-P02",
|
||||||
|
"A1-U07-P03",
|
||||||
|
"A1-U07-W01"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Excuse me. Which bus goes to the museum? Bus 15. Does this bus go to the museum? No, it doesn't. Take the other bus, on the other side of the street.",
|
||||||
|
"question": "去博物馆应该怎么做?",
|
||||||
|
"options": [
|
||||||
|
"到街对面坐车",
|
||||||
|
"就坐这辆车",
|
||||||
|
"改坐地铁"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "A ticket to the airport, please."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "A single ticket, please."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Which bus goes to the station?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Does this bus go to the museum?",
|
||||||
|
"tip": "Does this 连读,重音在 museum"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Take Line 2."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Travel in the city\nSubway: fast. Trains come every five minutes.\nBus: slow, but cheap. Pay the driver. The fare is $2.\nTram: Line 7 goes to the river.\nBoat: a small ship on the river, every hour.\nBike: you can ride a bicycle in the park.\nCar: not easy, and very expensive.",
|
||||||
|
"question": "哪种交通方式要把车费付给司机?",
|
||||||
|
"options": [
|
||||||
|
"bus",
|
||||||
|
"tram",
|
||||||
|
"boat"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:买一张去机场的票,再问哪路车去机场。",
|
||||||
|
"example": "A ticket to the airport, please. Which bus goes to the airport?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P01",
|
||||||
|
"A1-U07-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "想一个你常去的地方,用英语问哪路车去那里、这辆车去不去。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P02",
|
||||||
|
"A1-U07-P03"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-S2",
|
||||||
|
"title": "换乘、坐几站、几号站台",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P04",
|
||||||
|
"A1-U07-P05",
|
||||||
|
"A1-U07-P09",
|
||||||
|
"A1-U07-W02"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Excuse me. How do I get to the zoo? Take Line 2. Change to Line 5 at City Park. How many stops? Five stops. Trains come every four minutes.",
|
||||||
|
"question": "在哪一站换乘?",
|
||||||
|
"options": [
|
||||||
|
"城市公园站",
|
||||||
|
"动物园站",
|
||||||
|
"第五站"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Where do I change?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "How many stops?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Change to Line 3."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "The train comes every five minutes.",
|
||||||
|
"tip": "every 读两个音节 /ˈevri/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Which platform?",
|
||||||
|
"tip": "platform 重音在前"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Lily: Which train goes to the airport?\nMark: The airport train. It's on Platform 4.\nLily: How often does it come?\nMark: Every fifteen minutes. It's fast. It takes half an hour.\nLily: Do I change?\nMark: No, you don't. It goes to the airport.",
|
||||||
|
"question": "坐火车到机场要多久?",
|
||||||
|
"options": [
|
||||||
|
"half an hour",
|
||||||
|
"fifteen minutes",
|
||||||
|
"four minutes"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:问在哪里换乘,再问坐几站。",
|
||||||
|
"example": "Where do I change? How many stops?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P04",
|
||||||
|
"A1-U07-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语说说你家附近的一条地铁或公交线路:几号线、多久一班。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-W01",
|
||||||
|
"A1-U07-P09"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-S3",
|
||||||
|
"title": "找座位、下车、末班车",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P10",
|
||||||
|
"A1-U07-P06",
|
||||||
|
"A1-U07-P07",
|
||||||
|
"A1-U07-P08"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Excuse me, is this seat free? Yes, it is. Thanks. Where do I get off for the hospital? Get off at the next stop. Is this my stop? No, it's the next one.",
|
||||||
|
"question": "去医院在哪里下车?",
|
||||||
|
"options": [
|
||||||
|
"下一站",
|
||||||
|
"这一站",
|
||||||
|
"终点站"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Is this seat free?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Where do I get off?",
|
||||||
|
"tip": "get off 连读成 /ɡe tɒf/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Is this my stop?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "When is the last train?"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Last trains\nLine 1: 11:30\nLine 2: 11:45\nPlease arrive early. Do not be late!\nPassengers: this train goes in one direction only. After the last train, take a bus.",
|
||||||
|
"question": "2 号线的末班车是几点?",
|
||||||
|
"options": [
|
||||||
|
"十一点四十五",
|
||||||
|
"十一点半",
|
||||||
|
"十二点"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:问末班车几点,再问在哪里下车。",
|
||||||
|
"example": "When is the last train? Where do I get off?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P08",
|
||||||
|
"A1-U07-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "你坐车去一个没去过的地方,用英语问座位、在哪里下车、是不是这一站。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P10",
|
||||||
|
"A1-U07-P06",
|
||||||
|
"A1-U07-P07"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U07-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "坐地铁去机场",
|
||||||
|
"learnerRole": "乘客",
|
||||||
|
"aiRole": "地铁站工作人员",
|
||||||
|
"setting": "你在地铁站,要坐地铁去机场。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello. Can I help you?",
|
||||||
|
"goal": "买一张去机场的票",
|
||||||
|
"model": "Yes. A ticket to the airport, please.",
|
||||||
|
"zh": "是的。一张去机场的票。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Single or return? A single is three dollars.",
|
||||||
|
"goal": "付钱,问哪条线去机场",
|
||||||
|
"model": "Here you are. Which line goes to the airport?",
|
||||||
|
"zh": "给你。哪条线去机场?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P02",
|
||||||
|
"A1-U07-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Take Line 3 and change to the airport train.",
|
||||||
|
"goal": "问在哪里换乘",
|
||||||
|
"model": "Where do I change?",
|
||||||
|
"zh": "我在哪里换乘?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "At Bridge Street. Then take the airport train.",
|
||||||
|
"goal": "问坐几站,是不是每十分钟一班",
|
||||||
|
"model": "How many stops? Does it come every ten minutes?",
|
||||||
|
"zh": "坐几站?每十分钟一班吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P05",
|
||||||
|
"A1-U07-P09"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Four stops. It comes every fifteen minutes. The last train leaves at a quarter past eleven.",
|
||||||
|
"goal": "问在几号站台",
|
||||||
|
"model": "OK. Which platform is it?",
|
||||||
|
"zh": "好的。在几号站台?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-W02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Platform 2. Have a good trip!",
|
||||||
|
"goal": "道谢",
|
||||||
|
"model": "Thanks!",
|
||||||
|
"zh": "谢谢!",
|
||||||
|
"itemIds": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "公交车上确认下车",
|
||||||
|
"learnerRole": "乘客",
|
||||||
|
"aiRole": "公交车司机",
|
||||||
|
"setting": "你第一次坐这路公交车去博物馆,担心坐过站。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello. Where are you going?",
|
||||||
|
"goal": "问这辆车去不去博物馆",
|
||||||
|
"model": "Does this bus go to the museum?",
|
||||||
|
"zh": "这辆车去博物馆吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, it does. Two dollars, please.",
|
||||||
|
"goal": "付钱,问坐几站",
|
||||||
|
"model": "Here you are. How many stops?",
|
||||||
|
"zh": "给你。坐几站?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Seven stops.",
|
||||||
|
"goal": "问去博物馆在哪里下车",
|
||||||
|
"model": "Where do I get off for the museum?",
|
||||||
|
"zh": "去博物馆在哪里下车?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Get off at Park Road. It's after the bridge. The bus is slow today, sorry.",
|
||||||
|
"goal": "过了一会儿,问是不是这一站",
|
||||||
|
"model": "Excuse me, is this my stop?",
|
||||||
|
"zh": "打扰一下,这是我要下的站吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "No, the next stop. Don't miss it!",
|
||||||
|
"goal": "道谢",
|
||||||
|
"model": "OK, thank you!",
|
||||||
|
"zh": "好的,谢谢!",
|
||||||
|
"itemIds": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "深夜赶末班车",
|
||||||
|
"learnerRole": "乘客",
|
||||||
|
"aiRole": "另一位乘客",
|
||||||
|
"setting": "深夜你在火车站,担心赶不上回酒店的末班车。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Are you OK? You look lost.",
|
||||||
|
"goal": "问去城市公园的末班车几点",
|
||||||
|
"model": "Yes, thanks. When is the last train to City Park?",
|
||||||
|
"zh": "是的,谢谢。去城市公园的末班车几点?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "It leaves at half past eleven, from Platform 6. You can catch it.",
|
||||||
|
"goal": "确认站台,问在哪里换乘",
|
||||||
|
"model": "Platform 6? Where do I change?",
|
||||||
|
"zh": "6 号站台?我在哪里换乘?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-W02",
|
||||||
|
"A1-U07-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "You don't change. It's Line 1. Just ride it for eight stops.",
|
||||||
|
"goal": "确认线路和站数",
|
||||||
|
"model": "Line 1, eight stops. Thank you.",
|
||||||
|
"zh": "1 号线,八站。谢谢。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Here is the train. Oh, it's very full.",
|
||||||
|
"goal": "问旁边的人座位有没有人",
|
||||||
|
"model": "Excuse me, is this seat free?",
|
||||||
|
"zh": "打扰一下,这个座位有人吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, it is. Where do you get off?",
|
||||||
|
"goal": "说在城市公园下车,问远不远",
|
||||||
|
"model": "At City Park. Is it far?",
|
||||||
|
"zh": "在城市公园。远吗?",
|
||||||
|
"itemIds": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U07-T1",
|
||||||
|
"sceneId": "A1-U07-C1",
|
||||||
|
"goal": "买票,问线路、换乘、站数、班次和站台",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P01",
|
||||||
|
"A1-U07-P02",
|
||||||
|
"A1-U07-W01",
|
||||||
|
"A1-U07-P04",
|
||||||
|
"A1-U07-P05",
|
||||||
|
"A1-U07-P09",
|
||||||
|
"A1-U07-W02"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"目的地",
|
||||||
|
"线路",
|
||||||
|
"换乘站",
|
||||||
|
"站台"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-T2",
|
||||||
|
"sceneId": "A1-U07-C2",
|
||||||
|
"goal": "上车确认方向,问坐几站和在哪里下车",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P03",
|
||||||
|
"A1-U07-P05",
|
||||||
|
"A1-U07-P06",
|
||||||
|
"A1-U07-P07"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"目的地",
|
||||||
|
"下车站"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-T3",
|
||||||
|
"sceneId": "A1-U07-C3",
|
||||||
|
"goal": "深夜问末班车、站台和换乘,上车找座位",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U07-P08",
|
||||||
|
"A1-U07-W02",
|
||||||
|
"A1-U07-P04",
|
||||||
|
"A1-U07-W01",
|
||||||
|
"A1-U07-P10"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"末班车时间",
|
||||||
|
"站台",
|
||||||
|
"座位"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U07-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "公交车上的广播",
|
||||||
|
"text": "Good afternoon, passengers. This is the airport bus. A single ticket is ten dollars; a return ticket is fifteen. The fare is the same all day. The bus comes every fifteen minutes, so you don't need to wait long. Please find a free seat and hold on. We ride fast on the big road, but there is a slow tram on the other side. The next stop is the train station. If you go to the zoo, change here. The last bus tonight is late, at eleven. Don't miss it! Thank you for taking our bus.",
|
||||||
|
"glosses": {
|
||||||
|
"tonight": "今晚",
|
||||||
|
"afternoon": "下午",
|
||||||
|
"same": "一样的",
|
||||||
|
"long": "(时间)久",
|
||||||
|
"hold": "抓牢;hold on 抓稳"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "这是什么广播?",
|
||||||
|
"options": [
|
||||||
|
"机场公交车上的广播",
|
||||||
|
"餐厅的广播",
|
||||||
|
"商店的广播"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "这趟车多久来一班?",
|
||||||
|
"options": [
|
||||||
|
"每十五分钟",
|
||||||
|
"每十分钟",
|
||||||
|
"每小时"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:坐公交去机场",
|
||||||
|
"text": "Anna: Excuse me, does this bus go to the station?\nDriver: No, this one goes to the airport. For the station you need the tram on the other side of the road.\nAnna: I don't want to be late. How many stops, and is it fast?\nDriver: Four stops. It's fast, about half an hour. We arrive early today.\nAnna: Good, I don't want to miss my plane. Where do I get off?\nDriver: It's the last stop. Is this seat free?\nAnna: Yes. How much is a single ticket?\nDriver: Ten dollars. A return is fifteen.\nAnna: A single, please. I often travel by bus; it's cheaper than a car or a taxi.\nDriver: Here you are. Have a good trip!\nAnna: Thank you!",
|
||||||
|
"glosses": {
|
||||||
|
"tell": "告诉",
|
||||||
|
"half": "一半;half an hour 半小时",
|
||||||
|
"than": "比",
|
||||||
|
"cheaper": "更便宜",
|
||||||
|
"plane": "飞机",
|
||||||
|
"taxi": "出租车"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "去机场要坐几站?",
|
||||||
|
"options": [
|
||||||
|
"四站",
|
||||||
|
"五站",
|
||||||
|
"两站"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "Anna 在哪一站下车?",
|
||||||
|
"options": [
|
||||||
|
"最后一站",
|
||||||
|
"第一站",
|
||||||
|
"火车站"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "transfer",
|
||||||
|
"reason": "B1;A1 用 change 表达换乘"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "one-way / round trip",
|
||||||
|
"reason": "CEFR-J 未收录;A1 用 single / return,应用可提示美式说法"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,923 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U08",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "超市与便利店",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "找商品、说数量",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "123",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "61",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "只用 I'm looking for… 这个固定句块"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "15",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "59-2",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "16",
|
||||||
|
"use": "receptive"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U08-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Where can I find the milk?",
|
||||||
|
"zh": "哪里能找到牛奶?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"where can i find"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Excuse me. Where can I find the rice?",
|
||||||
|
"zh": "打扰一下,哪里能找到大米?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "在超市问哪里能找到糖。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Do you have any yogurt?",
|
||||||
|
"zh": "你们有酸奶吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"do you have"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Do you have any fresh bread?",
|
||||||
|
"zh": "你们有新鲜面包吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问店员有没有冰块。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "aisle",
|
||||||
|
"zh": "(超市的)通道",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "aisle 在 CEFR-J 为 A2,但在超市找东西时店员几乎都会这样指路",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"aisle"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The rice is in aisle 4.",
|
||||||
|
"zh": "大米在 4 号通道。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说“在 3 号通道”。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "It's on the top shelf.",
|
||||||
|
"zh": "在最上层的架子上。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"top shelf",
|
||||||
|
"bottom shelf"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The sugar is on the bottom shelf.",
|
||||||
|
"zh": "糖在最下层的架子上。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉朋友牛奶在最下层。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "a bottle of water",
|
||||||
|
"zh": "一瓶水",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"a bottle of",
|
||||||
|
"bottles of",
|
||||||
|
"a box of",
|
||||||
|
"a bag of",
|
||||||
|
"a piece of"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Two bottles of water, please.",
|
||||||
|
"zh": "请给我两瓶水。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说要一盒鸡蛋。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "a kilo of apples",
|
||||||
|
"zh": "一公斤苹果",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "kilo 在 CEFR-J 为 A2,但在市场买水果、蔬菜时按公斤说数量",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"kilo",
|
||||||
|
"kilos"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Half a kilo of grapes, please.",
|
||||||
|
"zh": "请给我半公斤葡萄。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "在水果摊说要两公斤苹果。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I need two bags.",
|
||||||
|
"zh": "我需要两个袋子。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"i need",
|
||||||
|
"we need"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I need a box of eggs.",
|
||||||
|
"zh": "我需要一盒鸡蛋。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你需要一个袋子。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "bag",
|
||||||
|
"zh": "袋子",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"bag",
|
||||||
|
"bags"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Do you need a bag?",
|
||||||
|
"zh": "你需要袋子吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "结账时说你要一个袋子。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-W03",
|
||||||
|
"type": "word",
|
||||||
|
"en": "fresh",
|
||||||
|
"zh": "新鲜的",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "fresh 在 CEFR-J 为 A2,但买水果、面包时常要问",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"fresh"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Is the fish fresh?",
|
||||||
|
"zh": "这鱼新鲜吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问这些水果新不新鲜。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-P07",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Where do I pay?",
|
||||||
|
"zh": "在哪里付钱?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"where do i pay",
|
||||||
|
"where can i pay"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Excuse me. Where do I pay?",
|
||||||
|
"zh": "打扰一下,在哪里付钱?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "拿好东西后问在哪里付钱。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-P08",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "What time do you close?",
|
||||||
|
"zh": "你们几点关门?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"what time do you close",
|
||||||
|
"what time do you open"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "What time do you open?",
|
||||||
|
"zh": "你们几点开门?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问便利店几点开门。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-P09",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I'm looking for eggs.",
|
||||||
|
"zh": "我在找电池。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"looking for"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'm looking for the bread.",
|
||||||
|
"zh": "我在找面包。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉店员你在找牛奶。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R01",
|
||||||
|
"en": "box",
|
||||||
|
"zh": "盒子;箱子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R02",
|
||||||
|
"en": "piece",
|
||||||
|
"zh": "一块;一片"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R03",
|
||||||
|
"en": "list",
|
||||||
|
"zh": "清单"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R04",
|
||||||
|
"en": "pick",
|
||||||
|
"zh": "挑选"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R05",
|
||||||
|
"en": "put",
|
||||||
|
"zh": "放"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R06",
|
||||||
|
"en": "carry",
|
||||||
|
"zh": "拿;提"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R07",
|
||||||
|
"en": "heavy",
|
||||||
|
"zh": "重的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R08",
|
||||||
|
"en": "store",
|
||||||
|
"zh": "商店"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R09",
|
||||||
|
"en": "candy",
|
||||||
|
"zh": "糖果"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R10",
|
||||||
|
"en": "biscuit",
|
||||||
|
"zh": "饼干"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R11",
|
||||||
|
"en": "grape",
|
||||||
|
"zh": "葡萄"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R12",
|
||||||
|
"en": "corn",
|
||||||
|
"zh": "玉米"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R13",
|
||||||
|
"en": "bean",
|
||||||
|
"zh": "豆子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R14",
|
||||||
|
"en": "basket",
|
||||||
|
"zh": "篮子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R15",
|
||||||
|
"en": "item",
|
||||||
|
"zh": "物品;件"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R16",
|
||||||
|
"en": "sell",
|
||||||
|
"zh": "卖"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R17",
|
||||||
|
"en": "open",
|
||||||
|
"zh": "开着的;营业"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R18",
|
||||||
|
"en": "closed",
|
||||||
|
"zh": "关着的;停止营业"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R19",
|
||||||
|
"en": "bottom",
|
||||||
|
"zh": "底部"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R20",
|
||||||
|
"en": "year",
|
||||||
|
"zh": "年"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R21",
|
||||||
|
"en": "night",
|
||||||
|
"zh": "夜晚"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R22",
|
||||||
|
"en": "snack",
|
||||||
|
"zh": "零食"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R23",
|
||||||
|
"en": "soap",
|
||||||
|
"zh": "肥皂"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R24",
|
||||||
|
"en": "salt",
|
||||||
|
"zh": "盐"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R25",
|
||||||
|
"en": "battery",
|
||||||
|
"zh": "电池"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R26",
|
||||||
|
"en": "empty",
|
||||||
|
"zh": "空的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R27",
|
||||||
|
"en": "keep",
|
||||||
|
"zh": "保留"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R28",
|
||||||
|
"en": "plastic",
|
||||||
|
"zh": "塑料的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-R29",
|
||||||
|
"en": "whole",
|
||||||
|
"zh": "整个的"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U08-S1",
|
||||||
|
"title": "找东西",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P01",
|
||||||
|
"A1-U08-P02",
|
||||||
|
"A1-U08-W01",
|
||||||
|
"A1-U08-P03",
|
||||||
|
"A1-U08-P09"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Excuse me. Where can I find the sugar? It's in aisle 4, on the bottom shelf. And do you have any candy? Yes, in aisle 7.",
|
||||||
|
"question": "糖在哪里?",
|
||||||
|
"options": [
|
||||||
|
"4 号通道最下层",
|
||||||
|
"7 号通道最下层",
|
||||||
|
"4 号通道最上层"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Excuse me. Where can I find the milk?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'm looking for the bread.",
|
||||||
|
"tip": "looking for 连读,for 很轻"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Do you have any yogurt?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "It's in aisle 3.",
|
||||||
|
"tip": "aisle 里的 s 不发音,读作 /aɪl/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "It's on the top shelf."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Welcome to City Store\nAisle 1: fruit and vegetables\nAisle 2: bread and cake\nAisle 3: milk, cheese, yogurt and cream\nAisle 4: rice, beans, corn, sugar and salt\nAisle 5: candy, biscuits and snacks\nAisle 6: soap and batteries\nIce is in the box next to the door.",
|
||||||
|
"question": "酸奶在哪个通道?",
|
||||||
|
"options": [
|
||||||
|
"aisle 3",
|
||||||
|
"aisle 5",
|
||||||
|
"aisle 6"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:问哪里能找到牛奶,再问有没有酸奶。",
|
||||||
|
"example": "Where can I find the milk? Do you have any yogurt?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P01",
|
||||||
|
"A1-U08-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "想想你家附近的超市,用英语问三样东西在哪里。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P01",
|
||||||
|
"A1-U08-P09",
|
||||||
|
"A1-U08-W01"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-S2",
|
||||||
|
"title": "说数量",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P04",
|
||||||
|
"A1-U08-P05",
|
||||||
|
"A1-U08-P06",
|
||||||
|
"A1-U08-W02",
|
||||||
|
"A1-U08-W03"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Can I have a kilo of apples, please? Sure. Anything else? Yes, two bottles of water. Do you need a bag? Yes, please. I need two bags. They're heavy.",
|
||||||
|
"question": "顾客买了几瓶水?",
|
||||||
|
"options": [
|
||||||
|
"两瓶",
|
||||||
|
"一瓶",
|
||||||
|
"三瓶"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "a bottle of water"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "a box of eggs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "a kilo of apples",
|
||||||
|
"tip": "kilo 读作 /ˈkiːləʊ/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Half a kilo, please."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I need two bags."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Is the bread fresh?"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Shopping list\n- a kilo of apples\n- half a kilo of grapes\n- a box of eggs\n- two bottles of water\n- a piece of cheese\n- a whole chicken\nMia: Please keep the list, and don't buy candy!",
|
||||||
|
"question": "清单上要买多少葡萄?",
|
||||||
|
"options": [
|
||||||
|
"half a kilo",
|
||||||
|
"a piece of cheese",
|
||||||
|
"a box of eggs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写购物清单里的两行:一瓶水、一公斤苹果。",
|
||||||
|
"example": "a bottle of water, a kilo of apples",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P04",
|
||||||
|
"A1-U08-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语说说你这周要买的三样东西和数量。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P04",
|
||||||
|
"A1-U08-P05",
|
||||||
|
"A1-U08-P06"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-S3",
|
||||||
|
"title": "付钱和营业时间",
|
||||||
|
"minutes": 10,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P07",
|
||||||
|
"A1-U08-P08",
|
||||||
|
"A1-U08-W02"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Where do I pay? Over there. What time do you close? We close at ten. We're open every day.",
|
||||||
|
"question": "这家店几点关门?",
|
||||||
|
"options": [
|
||||||
|
"十点",
|
||||||
|
"九点",
|
||||||
|
"十一点"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Where do I pay?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "What time do you close?",
|
||||||
|
"tip": "do you 连读成 /djuː/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "What time do you open?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Can I have a plastic bag?"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Open every day: 7 to 11\nClosed on the first day of the new year\nPlease put your items in a basket. Please pay here.\nPlastic bags are 10 cents.",
|
||||||
|
"question": "塑料袋多少钱?",
|
||||||
|
"options": [
|
||||||
|
"十美分一个",
|
||||||
|
"免费",
|
||||||
|
"一美元"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:问在哪里付钱,再问几点关门。",
|
||||||
|
"example": "Where do I pay? What time do you close?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P07",
|
||||||
|
"A1-U08-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "在便利店结账时,用英语要一个袋子,并问几点关门。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-W02",
|
||||||
|
"A1-U08-P08"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U08-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "在超市找东西",
|
||||||
|
"learnerRole": "顾客",
|
||||||
|
"aiRole": "店员",
|
||||||
|
"setting": "你在一家大超市,想买牛奶、酸奶和鸡蛋,但找不到。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi. Can I help you?",
|
||||||
|
"goal": "问哪里能找到牛奶",
|
||||||
|
"model": "Yes, please. Where can I find the milk?",
|
||||||
|
"zh": "是的,谢谢。哪里能找到牛奶?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "The milk is in aisle 3, on the bottom shelf.",
|
||||||
|
"goal": "确认通道,再问有没有新鲜酸奶",
|
||||||
|
"model": "Aisle 3? And do you have any fresh yogurt?",
|
||||||
|
"zh": "3 号通道?你们有新鲜酸奶吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-W01",
|
||||||
|
"A1-U08-P02",
|
||||||
|
"A1-U08-W03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, next to the milk, on the top shelf.",
|
||||||
|
"goal": "确认位置,再说你还在找鸡蛋",
|
||||||
|
"model": "On the top shelf. Thanks. I'm also looking for eggs.",
|
||||||
|
"zh": "最上层。谢谢。我还在找鸡蛋。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P03",
|
||||||
|
"A1-U08-P09"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Eggs are in aisle 5. Do you need a basket? You can't carry it all.",
|
||||||
|
"goal": "说不用篮子,你有袋子",
|
||||||
|
"model": "No, thanks. I have a bag.",
|
||||||
|
"zh": "不用了,谢谢。我有袋子。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-W02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK. Anything else?",
|
||||||
|
"goal": "问在哪里付钱",
|
||||||
|
"model": "Where do I pay?",
|
||||||
|
"zh": "在哪里付钱?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P07"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "在水果摊买水果",
|
||||||
|
"learnerRole": "顾客",
|
||||||
|
"aiRole": "摊主",
|
||||||
|
"setting": "你在市场的水果摊买水果。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello! Fresh fruit today!",
|
||||||
|
"goal": "问苹果新不新鲜",
|
||||||
|
"model": "Are the apples fresh?",
|
||||||
|
"zh": "苹果新鲜吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-W03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Very fresh. Pick your apples. Two dollars a kilo.",
|
||||||
|
"goal": "要两公斤苹果",
|
||||||
|
"model": "Two kilos of apples, please.",
|
||||||
|
"zh": "请给我两公斤苹果。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. Anything else? The grapes are very sweet.",
|
||||||
|
"goal": "要半公斤葡萄",
|
||||||
|
"model": "OK, half a kilo of grapes.",
|
||||||
|
"zh": "好,半公斤葡萄。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Here you are. It's heavy. Do you need a bag?",
|
||||||
|
"goal": "说需要两个袋子",
|
||||||
|
"model": "Yes, I need two bags, please.",
|
||||||
|
"zh": "要,我需要两个袋子。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P06",
|
||||||
|
"A1-U08-W02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. Seven dollars, please.",
|
||||||
|
"goal": "付钱",
|
||||||
|
"model": "Here you are.",
|
||||||
|
"zh": "给你。",
|
||||||
|
"itemIds": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "晚上去便利店",
|
||||||
|
"learnerRole": "顾客",
|
||||||
|
"aiRole": "店员",
|
||||||
|
"setting": "晚上你在酒店旁边的便利店买东西。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi there.",
|
||||||
|
"goal": "说你在找电池",
|
||||||
|
"model": "Hi. I'm looking for batteries.",
|
||||||
|
"zh": "你好。我在找电池。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P09"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sorry, we don't sell batteries. We have snacks, drinks and soap.",
|
||||||
|
"goal": "改要一瓶水",
|
||||||
|
"model": "OK. A bottle of water, please.",
|
||||||
|
"zh": "好吧。请给我一瓶水。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "The water is over there. Anything else?",
|
||||||
|
"goal": "问几点关门",
|
||||||
|
"model": "No, thanks. What time do you close?",
|
||||||
|
"zh": "不用了,谢谢。你们几点关门?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "We're open all night.",
|
||||||
|
"goal": "问有没有冰块",
|
||||||
|
"model": "Oh, good. Do you have any ice?",
|
||||||
|
"zh": "哦,太好了。你们有冰块吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sorry, the ice box is empty now.",
|
||||||
|
"goal": "回应",
|
||||||
|
"model": "That's OK. Thank you.",
|
||||||
|
"zh": "没关系,谢谢。",
|
||||||
|
"itemIds": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U08-T1",
|
||||||
|
"sceneId": "A1-U08-C1",
|
||||||
|
"goal": "在超市问三样东西在哪里,确认通道和货架,最后问在哪里付钱",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P01",
|
||||||
|
"A1-U08-W01",
|
||||||
|
"A1-U08-P02",
|
||||||
|
"A1-U08-W03",
|
||||||
|
"A1-U08-P03",
|
||||||
|
"A1-U08-P09",
|
||||||
|
"A1-U08-W02",
|
||||||
|
"A1-U08-P07"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"商品",
|
||||||
|
"位置"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-T2",
|
||||||
|
"sceneId": "A1-U08-C2",
|
||||||
|
"goal": "在水果摊问新鲜程度,按公斤买水果并要袋子",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-W03",
|
||||||
|
"A1-U08-P05",
|
||||||
|
"A1-U08-P06",
|
||||||
|
"A1-U08-W02"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"水果",
|
||||||
|
"数量",
|
||||||
|
"袋子"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-T3",
|
||||||
|
"sceneId": "A1-U08-C3",
|
||||||
|
"goal": "在便利店找东西,找不到时换一样,并问营业时间",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U08-P09",
|
||||||
|
"A1-U08-P04",
|
||||||
|
"A1-U08-P08",
|
||||||
|
"A1-U08-P02"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"商品",
|
||||||
|
"营业时间"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U08-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "超市广播",
|
||||||
|
"text": "Welcome to our store! We are open now, from morning to ten at night. Today we sell fresh fruit and vegetables. Grapes and apples are cheap. The candy, biscuits and snacks are on the top shelf; corn, beans and salt are at the bottom. Milk and yogurt are next to the eggs. Soap and batteries are near the door. Please take a basket and put your items in it. Some boxes are heavy, so carry them with care. Please keep your plastic bags. Pay at the front. Thank you, and have a nice day!",
|
||||||
|
"glosses": {
|
||||||
|
"forget": "忘记",
|
||||||
|
"tonight": "今晚",
|
||||||
|
"front": "前面;front desk 前台",
|
||||||
|
"care": "with care 小心地",
|
||||||
|
"shelf": "架子"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "这段广播主要说什么?",
|
||||||
|
"options": [
|
||||||
|
"超市里的商品和信息",
|
||||||
|
"怎么坐地铁",
|
||||||
|
"怎么点菜"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "糖果和零食放在哪里?",
|
||||||
|
"options": [
|
||||||
|
"最上层的架子",
|
||||||
|
"门口",
|
||||||
|
"最下面"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:在超市找东西",
|
||||||
|
"text": "Mia: Excuse me, where can I find the milk?\nStaff: It's on the top shelf, next to the yogurt.\nMia: Thank you. I have a list. I need a box of eggs, a piece of cheese and some grapes.\nStaff: The eggs are in aisle three. The grapes are fresh today. Please pick the good ones.\nMia: OK. Where are the corn and the beans?\nStaff: At the bottom, near the salt. Do you need soap or batteries?\nMia: Yes, one soap. This basket is heavy now! Can you carry it?\nStaff: Sure. Do you want a plastic bag or a box?\nMia: A box, please. What time do you close? Are you open on Sunday?\nStaff: We close at ten, and yes, we're open every day of the year.\nMia: Great, thank you very much!",
|
||||||
|
"glosses": {
|
||||||
|
"staff": "员工,服务员",
|
||||||
|
"front": "前面;front desk 前台",
|
||||||
|
"shelf": "架子"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "Mia 的清单上有什么?",
|
||||||
|
"options": [
|
||||||
|
"一盒鸡蛋、一块奶酪、一些葡萄",
|
||||||
|
"面包和牛奶",
|
||||||
|
"糖和零食"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "超市几点关门?",
|
||||||
|
"options": [
|
||||||
|
"十点",
|
||||||
|
"九点",
|
||||||
|
"十一点"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "checkout / cashier",
|
||||||
|
"reason": "B1 或未收录;A1 用 Where do I pay? 表达"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "dozen",
|
||||||
|
"reason": "B1;A1 用 a box of twelve eggs"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,973 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U09",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "描述人和感受",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "说一个人的外貌和性格,说自己的心情",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "60",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "101",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "59-1",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "117",
|
||||||
|
"use": "receptive"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U09-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "What does she look like?",
|
||||||
|
"zh": "她长什么样?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"look like"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "What does your brother look like?",
|
||||||
|
"zh": "你哥哥长什么样?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "朋友让你去接一个人,问那个人长什么样。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "tall",
|
||||||
|
"zh": "高的",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"tall"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "My father is very tall.",
|
||||||
|
"zh": "我爸爸很高。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你的朋友很高。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "short",
|
||||||
|
"zh": "矮的;短的",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"short"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "She's short, and she has short hair.",
|
||||||
|
"zh": "她个子矮,留着短发。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你的孩子个子矮。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "She has long hair.",
|
||||||
|
"zh": "她留着长发。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"has long",
|
||||||
|
"has short",
|
||||||
|
"have long",
|
||||||
|
"have short"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"hair"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "He has short black hair.",
|
||||||
|
"zh": "他留着黑色短发。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "描述一个留着长发的朋友。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "He wears glasses.",
|
||||||
|
"zh": "他戴眼镜。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"wears glasses",
|
||||||
|
"wear glasses"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "My mother wears glasses.",
|
||||||
|
"zh": "我妈妈戴眼镜。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你的老师戴眼镜。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "What is he like?",
|
||||||
|
"zh": "他(性格)怎么样?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"what is he like",
|
||||||
|
"what is she like",
|
||||||
|
"what are they like",
|
||||||
|
"what is your"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "What is your new teacher like?",
|
||||||
|
"zh": "你的新老师怎么样?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问朋友的新邻居性格怎么样。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-W03",
|
||||||
|
"type": "word",
|
||||||
|
"en": "kind",
|
||||||
|
"zh": "友善的;好心的",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"kind"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The man is very kind.",
|
||||||
|
"zh": "那个男人很友善。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你的邻居很友善。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-W04",
|
||||||
|
"type": "word",
|
||||||
|
"en": "funny",
|
||||||
|
"zh": "有趣的;好笑的",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"funny"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "My son is very funny.",
|
||||||
|
"zh": "我儿子很有趣。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你的朋友很有趣。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-W05",
|
||||||
|
"type": "word",
|
||||||
|
"en": "shy",
|
||||||
|
"zh": "害羞的",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"shy"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "She's a little shy.",
|
||||||
|
"zh": "她有点害羞。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你的女儿有点害羞。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I'm tired.",
|
||||||
|
"zh": "我累了。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"tired"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'm very tired today.",
|
||||||
|
"zh": "我今天很累。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉朋友你今天很累。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-W06",
|
||||||
|
"type": "word",
|
||||||
|
"en": "happy",
|
||||||
|
"zh": "开心的",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"happy"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'm very happy today.",
|
||||||
|
"zh": "我今天很开心。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你今天很开心。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I feel sad.",
|
||||||
|
"zh": "我觉得难过。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"feel",
|
||||||
|
"feels"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "He feels sad today.",
|
||||||
|
"zh": "他今天很难过。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉朋友你觉得难过。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-P07",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I'm worried.",
|
||||||
|
"zh": "我很担心。",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "worried 在 CEFR-J 为 A2,但遇到麻烦时说明自己担心很常用",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"worried"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'm worried about my son.",
|
||||||
|
"zh": "我很担心我儿子。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "孩子走丢了,告诉工作人员你很担心。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R01",
|
||||||
|
"en": "thin",
|
||||||
|
"zh": "瘦的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R02",
|
||||||
|
"en": "handsome",
|
||||||
|
"zh": "英俊的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R03",
|
||||||
|
"en": "pretty",
|
||||||
|
"zh": "漂亮的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R04",
|
||||||
|
"en": "beautiful",
|
||||||
|
"zh": "美丽的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R05",
|
||||||
|
"en": "eye",
|
||||||
|
"zh": "眼睛"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R06",
|
||||||
|
"en": "face",
|
||||||
|
"zh": "脸"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R07",
|
||||||
|
"en": "clever",
|
||||||
|
"zh": "聪明的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R08",
|
||||||
|
"en": "smart",
|
||||||
|
"zh": "聪明的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R09",
|
||||||
|
"en": "lazy",
|
||||||
|
"zh": "懒的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R10",
|
||||||
|
"en": "angry",
|
||||||
|
"zh": "生气的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R11",
|
||||||
|
"en": "lonely",
|
||||||
|
"zh": "孤单的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R12",
|
||||||
|
"en": "afraid",
|
||||||
|
"zh": "害怕的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R13",
|
||||||
|
"en": "glad",
|
||||||
|
"zh": "高兴的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R14",
|
||||||
|
"en": "strong",
|
||||||
|
"zh": "强壮的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R15",
|
||||||
|
"en": "cute",
|
||||||
|
"zh": "可爱的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R16",
|
||||||
|
"en": "feeling",
|
||||||
|
"zh": "感觉"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R17",
|
||||||
|
"en": "smile",
|
||||||
|
"zh": "微笑"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R18",
|
||||||
|
"en": "laugh",
|
||||||
|
"zh": "笑"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R19",
|
||||||
|
"en": "cry",
|
||||||
|
"zh": "哭"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R20",
|
||||||
|
"en": "love",
|
||||||
|
"zh": "爱;喜欢"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R21",
|
||||||
|
"en": "dark",
|
||||||
|
"zh": "深色的;黑暗的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R22",
|
||||||
|
"en": "black",
|
||||||
|
"zh": "黑色的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R23",
|
||||||
|
"en": "brown",
|
||||||
|
"zh": "棕色的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R24",
|
||||||
|
"en": "excited",
|
||||||
|
"zh": "兴奋的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R25",
|
||||||
|
"en": "boring",
|
||||||
|
"zh": "无聊的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R26",
|
||||||
|
"en": "nervous",
|
||||||
|
"zh": "紧张的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R27",
|
||||||
|
"en": "woman",
|
||||||
|
"zh": "女人"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R28",
|
||||||
|
"en": "man",
|
||||||
|
"zh": "男人"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R29",
|
||||||
|
"en": "boy",
|
||||||
|
"zh": "男孩"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R30",
|
||||||
|
"en": "girl",
|
||||||
|
"zh": "女孩"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R31",
|
||||||
|
"en": "guy",
|
||||||
|
"zh": "家伙;人"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R32",
|
||||||
|
"en": "surprised",
|
||||||
|
"zh": "惊讶的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R33",
|
||||||
|
"en": "interesting",
|
||||||
|
"zh": "有意思的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-R34",
|
||||||
|
"en": "let",
|
||||||
|
"zh": "让(let's 一起……吧)"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U09-S1",
|
||||||
|
"title": "长什么样",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P01",
|
||||||
|
"A1-U09-W01",
|
||||||
|
"A1-U09-W02",
|
||||||
|
"A1-U09-P02",
|
||||||
|
"A1-U09-P03"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "What does your brother look like? He's tall and thin. He has short black hair, and he wears glasses.",
|
||||||
|
"question": "哥哥长什么样?",
|
||||||
|
"options": [
|
||||||
|
"高瘦,短黑发,戴眼镜",
|
||||||
|
"矮个子,长黑发,戴眼镜",
|
||||||
|
"高瘦,短黑发,不戴眼镜"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "What does she look like?",
|
||||||
|
"tip": "look like 连读,重音在 look"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "She's tall."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "He's short."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "She has long brown hair."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "He wears glasses."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Please help! We are looking for a little girl. Her name is Lucy. She is five.\nShe has a small face, long brown hair and beautiful big brown eyes. She's short.\nLucy is shy, but she has a big smile.",
|
||||||
|
"question": "Lucy 长什么样?",
|
||||||
|
"options": [
|
||||||
|
"长棕发,棕色大眼睛",
|
||||||
|
"短黑发,戴眼镜",
|
||||||
|
"长黑发,个子很高"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话描述你的一位朋友:高还是矮、什么头发。",
|
||||||
|
"example": "My friend is tall. She has long hair.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-W01",
|
||||||
|
"A1-U09-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语描述一个你家里的人:他或她长什么样。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P01",
|
||||||
|
"A1-U09-W01",
|
||||||
|
"A1-U09-W02",
|
||||||
|
"A1-U09-P02",
|
||||||
|
"A1-U09-P03"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-S2",
|
||||||
|
"title": "性格怎么样",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P04",
|
||||||
|
"A1-U09-W03",
|
||||||
|
"A1-U09-W04",
|
||||||
|
"A1-U09-W05"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "What is your new teacher like? She's very kind and funny. The students love her. And your teacher? He's clever, but he's a little shy.",
|
||||||
|
"question": "说话人的新老师怎么样?",
|
||||||
|
"options": [
|
||||||
|
"友善又有趣",
|
||||||
|
"聪明但害羞",
|
||||||
|
"严厉又无聊"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "What is he like?",
|
||||||
|
"tip": "不要和 What does he like? 混淆"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "She's very kind."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "He's funny."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "My son is a little shy."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Tom: What are your new neighbors like?\nMia: The man is very kind. He's strong, and he can carry my bags!\nTom: And the woman?\nMia: She's clever and funny. Her two boys are cute, but they are a little lazy.\nTom: Lazy?\nMia: Yes. They don't help their mother!",
|
||||||
|
"question": "那个男人怎么样?",
|
||||||
|
"options": [
|
||||||
|
"very kind",
|
||||||
|
"clever and funny",
|
||||||
|
"a little lazy"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:问朋友的新朋友怎么样,再说他很有趣。",
|
||||||
|
"example": "What is your new friend like? He's very funny.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P04",
|
||||||
|
"A1-U09-W04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语说说你最好的朋友的性格,至少用两个词。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P04",
|
||||||
|
"A1-U09-W03",
|
||||||
|
"A1-U09-W04",
|
||||||
|
"A1-U09-W05"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-S3",
|
||||||
|
"title": "说感受",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P05",
|
||||||
|
"A1-U09-W06",
|
||||||
|
"A1-U09-P06",
|
||||||
|
"A1-U09-P07"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Hi, Ben. How are you? I'm tired. I have a lot of work today. And I feel sad. My cat is lost. Oh, no. I'm sorry.",
|
||||||
|
"question": "Ben 为什么难过?",
|
||||||
|
"options": [
|
||||||
|
"他的猫走丢了",
|
||||||
|
"他工作太多",
|
||||||
|
"他生病了"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "I'm tired."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'm very happy today."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I feel sad."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'm worried.",
|
||||||
|
"tip": "worried 读作 /ˈwʌrid/,不要读成 /ˈwɔːrid/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Emma: How are you today?\nLily: I'm happy and excited! I have a new job. My old job is very boring.\nEmma: That's great! I'm surprised.\nLily: And you? How are you feeling?\nEmma: I'm a little nervous. I'm in a new city, and I feel lonely.\nLily: Don't be afraid. Come and have lunch with me!",
|
||||||
|
"question": "Emma 为什么紧张?",
|
||||||
|
"options": [
|
||||||
|
"在新城市,觉得孤单",
|
||||||
|
"找到了新工作",
|
||||||
|
"午饭时间太晚"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话说你现在的感受:很累,但是开心。",
|
||||||
|
"example": "I'm tired, but I'm happy.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P05",
|
||||||
|
"A1-U09-W06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语说说你今天的感受。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P06",
|
||||||
|
"A1-U09-P05",
|
||||||
|
"A1-U09-W06",
|
||||||
|
"A1-U09-P07"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U09-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "帮朋友接人",
|
||||||
|
"learnerRole": "你",
|
||||||
|
"aiRole": "朋友",
|
||||||
|
"setting": "朋友请你去机场帮忙接她哥哥,你没见过他,打电话问清楚。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Can you get my brother at the airport today?",
|
||||||
|
"goal": "答应,问他长什么样",
|
||||||
|
"model": "Sure. What does he look like?",
|
||||||
|
"zh": "没问题。他长什么样?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "He's tall and handsome, and he has short dark hair.",
|
||||||
|
"goal": "确认,再问他戴不戴眼镜",
|
||||||
|
"model": "Tall, with short dark hair. Does he wear glasses?",
|
||||||
|
"zh": "高个子,黑色短发。他戴眼镜吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-W01",
|
||||||
|
"A1-U09-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, he does.",
|
||||||
|
"goal": "问他性格怎么样",
|
||||||
|
"model": "OK. What is he like?",
|
||||||
|
"zh": "好的。他人怎么样?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "He's kind, but a little shy. He's a nice guy.",
|
||||||
|
"goal": "说没关系,你也有点害羞",
|
||||||
|
"model": "That's OK. I'm shy too.",
|
||||||
|
"zh": "没关系,我也有点害羞。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-W05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Thank you! Are you OK? You look tired.",
|
||||||
|
"goal": "说你有点累,但很乐意帮忙",
|
||||||
|
"model": "I'm a little tired, but I'm happy to help.",
|
||||||
|
"zh": "我有点累,但很乐意帮忙。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P05",
|
||||||
|
"A1-U09-W06"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "商场里孩子走丢了",
|
||||||
|
"learnerRole": "家长",
|
||||||
|
"aiRole": "商场服务台工作人员",
|
||||||
|
"setting": "你在商场里和孩子走散了,去服务台求助。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello. Are you OK?",
|
||||||
|
"goal": "说你很担心,女儿走丢了",
|
||||||
|
"model": "No. I'm worried. My daughter is lost.",
|
||||||
|
"zh": "不好。我很担心,我女儿走丢了。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Don't worry. What does she look like?",
|
||||||
|
"goal": "描述:个子矮,长头发",
|
||||||
|
"model": "She's five. She's short, and she has long hair.",
|
||||||
|
"zh": "她五岁,个子矮,留着长发。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-W02",
|
||||||
|
"A1-U09-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Is her hair black or brown?",
|
||||||
|
"goal": "说是棕色,眼睛也是棕色的",
|
||||||
|
"model": "It's brown. And she has big brown eyes.",
|
||||||
|
"zh": "棕色的。她还有一双棕色的大眼睛。",
|
||||||
|
"itemIds": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Is she shy?",
|
||||||
|
"goal": "说她不害羞,很有趣,爱笑",
|
||||||
|
"model": "No, she isn't shy. She's very funny. She loves to laugh.",
|
||||||
|
"zh": "不,她不害羞,很有趣,很爱笑。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-W05",
|
||||||
|
"A1-U09-W04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Look! Is that her, the pretty little girl over there? She's crying.",
|
||||||
|
"goal": "看到女儿,很开心",
|
||||||
|
"model": "Yes! Oh, I'm so happy! Thank you!",
|
||||||
|
"zh": "是她!太开心了!谢谢你!",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-W06"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "朋友关心你的心情",
|
||||||
|
"learnerRole": "你",
|
||||||
|
"aiRole": "朋友",
|
||||||
|
"setting": "朋友发现你今天不太开心,关心你。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi! Are you OK? You don't look happy.",
|
||||||
|
"goal": "说你今天觉得难过",
|
||||||
|
"model": "I feel sad today.",
|
||||||
|
"zh": "我今天觉得难过。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Oh, no. Is it your work?",
|
||||||
|
"goal": "说是,你很累,工作很多",
|
||||||
|
"model": "Yes. I'm very tired. I have a lot of work.",
|
||||||
|
"zh": "是的。我很累,工作很多。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "I'm sorry. Are the people at work angry?",
|
||||||
|
"goal": "说同事们很友善,但你担心新工作",
|
||||||
|
"model": "No, they're kind, but I'm worried about my new job.",
|
||||||
|
"zh": "不,他们很友善,但我担心我的新工作。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-W03",
|
||||||
|
"A1-U09-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Don't be afraid. You're smart, and your work is interesting.",
|
||||||
|
"goal": "说谢谢,你现在觉得开心了",
|
||||||
|
"model": "Thank you. I feel happy now.",
|
||||||
|
"zh": "谢谢你。我现在觉得开心了。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P06",
|
||||||
|
"A1-U09-W06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Good! I'm glad. Let's have a cup of coffee.",
|
||||||
|
"goal": "答应",
|
||||||
|
"model": "OK, great!",
|
||||||
|
"zh": "好啊!",
|
||||||
|
"itemIds": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U09-T1",
|
||||||
|
"sceneId": "A1-U09-C1",
|
||||||
|
"goal": "帮朋友接人:问清外貌和性格,回应对方的关心",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P01",
|
||||||
|
"A1-U09-W01",
|
||||||
|
"A1-U09-P03",
|
||||||
|
"A1-U09-P04",
|
||||||
|
"A1-U09-W05",
|
||||||
|
"A1-U09-P05",
|
||||||
|
"A1-U09-W06"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"外貌",
|
||||||
|
"性格"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-T2",
|
||||||
|
"sceneId": "A1-U09-C2",
|
||||||
|
"goal": "孩子走丢时说明担心,描述孩子的外貌和性格",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P07",
|
||||||
|
"A1-U09-W02",
|
||||||
|
"A1-U09-P02",
|
||||||
|
"A1-U09-W05",
|
||||||
|
"A1-U09-W04",
|
||||||
|
"A1-U09-W06"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"年龄",
|
||||||
|
"外貌",
|
||||||
|
"性格"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-T3",
|
||||||
|
"sceneId": "A1-U09-C3",
|
||||||
|
"goal": "朋友关心时说出自己的感受和原因",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U09-P06",
|
||||||
|
"A1-U09-P05",
|
||||||
|
"A1-U09-W03",
|
||||||
|
"A1-U09-P07",
|
||||||
|
"A1-U09-W06"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"感受",
|
||||||
|
"原因"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U09-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "朋友让你去接人",
|
||||||
|
"text": "Can you get my friend at the station? You don't know her, so listen. She is a young woman, tall and thin, with a pretty face and big brown eyes. Her hair is long and black. She wears glasses and always has a nice smile. She is very kind, clever and funny, but a little shy, so don't worry if she is quiet. Today she has a big red bag. She is a little tired after the trip, and maybe nervous in a new city, so please be kind. When you find her, give her a smile. Call me then. Thank you!",
|
||||||
|
"glosses": {
|
||||||
|
"call": "打电话",
|
||||||
|
"know": "知道",
|
||||||
|
"red": "红色",
|
||||||
|
"always": "总是",
|
||||||
|
"maybe": "也许",
|
||||||
|
"give": "给"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "这段话在做什么?",
|
||||||
|
"options": [
|
||||||
|
"描述一个人,好去接她",
|
||||||
|
"介绍今天的天气",
|
||||||
|
"点一份晚餐"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "这个朋友长什么样?",
|
||||||
|
"options": [
|
||||||
|
"高、瘦、长黑发、戴眼镜",
|
||||||
|
"矮、短发、不戴眼镜",
|
||||||
|
"高、卷发、戴帽子"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:聊聚会上的人",
|
||||||
|
"text": "Tom: How was the party? You look happy and excited!\nMia: It was great, not boring at all! But I feel a little tired now.\nTom: Who is that handsome man, tall and strong, with the big smile?\nMia: That's my brother. He looks serious, but he is very funny and kind. Everyone loves him.\nTom: Is that clever girl his friend? She has beautiful eyes.\nMia: Yes. She is smart and cute. Are you OK? You look nervous.\nTom: I'm just shy at parties. Sometimes I feel lonely and a little afraid here.\nMia: Don't be afraid! Come and say hello. Everyone is glad to see new people.\nTom: OK. This party is interesting. Let's go and laugh together!\nMia: Great, that's the way!",
|
||||||
|
"glosses": {
|
||||||
|
"bit": "一点;a bit 有点",
|
||||||
|
"party": "聚会",
|
||||||
|
"parties": "聚会",
|
||||||
|
"serious": "严肃的",
|
||||||
|
"loves": "喜欢",
|
||||||
|
"everyone": "每个人",
|
||||||
|
"sometimes": "有时",
|
||||||
|
"together": "一起"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "那个英俊的男人是谁?",
|
||||||
|
"options": [
|
||||||
|
"Mia 的哥哥",
|
||||||
|
"Mia 的爸爸",
|
||||||
|
"Tom 的朋友"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "Tom 为什么显得紧张?",
|
||||||
|
"options": [
|
||||||
|
"他在聚会上有点害羞",
|
||||||
|
"他很累",
|
||||||
|
"他找不到 Mia"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "friendly",
|
||||||
|
"reason": "B2;A1 用 kind / nice 表达"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "curly / blond / beard",
|
||||||
|
"reason": "B1 或未收录;外貌先用 long / short / dark 描述"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,912 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U10",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "打车",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "说目的地、确认价格或路线",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "117",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "123",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "246",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "146",
|
||||||
|
"use": "receptive"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "120",
|
||||||
|
"use": "receptive"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U10-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Take me to the airport, please.",
|
||||||
|
"zh": "请带我去机场。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"take me to",
|
||||||
|
"to the airport",
|
||||||
|
"to the train station",
|
||||||
|
"to the station",
|
||||||
|
"to the hotel",
|
||||||
|
"to this address"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "To the train station, please.",
|
||||||
|
"zh": "请去火车站。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "上车后告诉司机去这个地址。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "taxi",
|
||||||
|
"zh": "出租车",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"taxi"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Let's take a taxi.",
|
||||||
|
"zh": "我们打车吧。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说“一辆出租车”。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "How much is it to the airport?",
|
||||||
|
"zh": "去机场多少钱?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"how much is it to",
|
||||||
|
"how much to"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "How much is it to the station?",
|
||||||
|
"zh": "去车站多少钱?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "上车前问去市中心要多少钱。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "How long does it take?",
|
||||||
|
"zh": "要多长时间?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"how long"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "How long does it take to the airport?",
|
||||||
|
"zh": "去机场要多长时间?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问司机到酒店要多久。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Can you stop here, please?",
|
||||||
|
"zh": "请在这里停车。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"stop here",
|
||||||
|
"stop at",
|
||||||
|
"stop in front of"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Stop at the corner, please.",
|
||||||
|
"zh": "请在拐角停车。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "到了,请司机在这里停车。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I'm in a hurry.",
|
||||||
|
"zh": "我赶时间。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"in a hurry"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Sorry, I'm in a hurry.",
|
||||||
|
"zh": "抱歉,我赶时间。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉司机你赶时间。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Please use the meter.",
|
||||||
|
"zh": "请打表。",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "meter 在 CEFR-J 为 A2,但在国外打车要求打表很重要",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"meter"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Can you use the meter, please?",
|
||||||
|
"zh": "可以打表吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "司机不打表,请他打表。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-P07",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Can you help me with my suitcase?",
|
||||||
|
"zh": "能帮我拿一下行李箱吗?",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "suitcase 在 CEFR-J 为 A2,但坐出租车去机场、酒店时常常用到",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"suitcase"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "My suitcase is very heavy.",
|
||||||
|
"zh": "我的行李箱很重。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "请司机帮你拿行李箱。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-P08",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Is this the right way?",
|
||||||
|
"zh": "这条路对吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"right way",
|
||||||
|
"wrong way"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Is this the right way to the museum?",
|
||||||
|
"zh": "这是去博物馆的路吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "担心司机走错路,问这条路对不对。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-P09",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Keep the change.",
|
||||||
|
"zh": "不用找了。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"keep the change"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Here's twenty dollars. Keep the change.",
|
||||||
|
"zh": "这是二十美元,不用找了。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "付钱时告诉司机不用找零。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "traffic",
|
||||||
|
"zh": "路上的车辆;交通",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "traffic 在 CEFR-J 为 A2,但打车时经常要听懂“堵车”",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"traffic"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "There's a lot of traffic today.",
|
||||||
|
"zh": "今天路上车很多。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说路上车很多。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-P10",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Please drive carefully.",
|
||||||
|
"zh": "请小心开车。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"drive carefully",
|
||||||
|
"drive slowly"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Please drive slowly.",
|
||||||
|
"zh": "请开慢一点。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "司机开得太快,请他小心开车。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R01",
|
||||||
|
"en": "careful",
|
||||||
|
"zh": "小心的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R02",
|
||||||
|
"en": "quickly",
|
||||||
|
"zh": "快速地"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R03",
|
||||||
|
"en": "front",
|
||||||
|
"zh": "前面的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R04",
|
||||||
|
"en": "back",
|
||||||
|
"zh": "后面"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R05",
|
||||||
|
"en": "pocket",
|
||||||
|
"zh": "口袋"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R06",
|
||||||
|
"en": "busy",
|
||||||
|
"zh": "忙的;繁忙的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R07",
|
||||||
|
"en": "highway",
|
||||||
|
"zh": "公路;高速公路"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R08",
|
||||||
|
"en": "radio",
|
||||||
|
"zh": "收音机;电台"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R09",
|
||||||
|
"en": "accident",
|
||||||
|
"zh": "事故"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R10",
|
||||||
|
"en": "jam",
|
||||||
|
"zh": "堵塞"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R11",
|
||||||
|
"en": "correct",
|
||||||
|
"zh": "正确的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R12",
|
||||||
|
"en": "different",
|
||||||
|
"zh": "不同的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R13",
|
||||||
|
"en": "place",
|
||||||
|
"zh": "地方"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R14",
|
||||||
|
"en": "already",
|
||||||
|
"zh": "已经"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R15",
|
||||||
|
"en": "almost",
|
||||||
|
"zh": "几乎;快要"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R16",
|
||||||
|
"en": "soon",
|
||||||
|
"zh": "很快"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R17",
|
||||||
|
"en": "yet",
|
||||||
|
"zh": "还(没)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R18",
|
||||||
|
"en": "outside",
|
||||||
|
"zh": "外面"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R19",
|
||||||
|
"en": "entrance",
|
||||||
|
"zh": "入口"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R20",
|
||||||
|
"en": "gate",
|
||||||
|
"zh": "大门"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R21",
|
||||||
|
"en": "belt",
|
||||||
|
"zh": "带子(seat belt 安全带)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R22",
|
||||||
|
"en": "center",
|
||||||
|
"zh": "中心"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R23",
|
||||||
|
"en": "famous",
|
||||||
|
"zh": "著名的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-R24",
|
||||||
|
"en": "tonight",
|
||||||
|
"zh": "今晚"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U10-S1",
|
||||||
|
"title": "说目的地、问价钱和时间",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P01",
|
||||||
|
"A1-U10-W01",
|
||||||
|
"A1-U10-P02",
|
||||||
|
"A1-U10-P03",
|
||||||
|
"A1-U10-P05"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Hi. To the airport, please. Sure. How much is it to the airport? About forty dollars. How long does it take? Thirty minutes. But there is a lot of traffic now.",
|
||||||
|
"question": "去机场大约多少钱?",
|
||||||
|
"options": [
|
||||||
|
"四十美元左右",
|
||||||
|
"三十美元左右",
|
||||||
|
"十四美元左右"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Take me to the airport, please."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Take me to this address, please."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "How much is it to the station?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "How long does it take?",
|
||||||
|
"tip": "does it 连读,take 重读"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'm in a hurry."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "TAXI\nPlease wait here for a taxi.\nTo the city center: about $45, 40 minutes.\nTo the train station: about $30, 25 minutes.\nAll taxis use the meter. Pay by cash or card.\nPlease use your seat belt.",
|
||||||
|
"question": "从这里到火车站大约要多久?",
|
||||||
|
"options": [
|
||||||
|
"二十五分钟",
|
||||||
|
"四十分钟",
|
||||||
|
"三十分钟"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:告诉司机去机场,再问要多久。",
|
||||||
|
"example": "To the airport, please. How long does it take?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P01",
|
||||||
|
"A1-U10-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "你要打车回酒店,用英语说目的地、问价格和时间。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P01",
|
||||||
|
"A1-U10-P02",
|
||||||
|
"A1-U10-P03"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-S2",
|
||||||
|
"title": "打表、确认路线",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P06",
|
||||||
|
"A1-U10-P08",
|
||||||
|
"A1-U10-W02",
|
||||||
|
"A1-U10-P10"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Please use the meter. OK. Is this the right way to the museum? Yes, but there is a lot of traffic on the bridge. We can take the highway. It's fast.",
|
||||||
|
"question": "司机为什么要走公路?",
|
||||||
|
"options": [
|
||||||
|
"桥上车很多",
|
||||||
|
"桥上有事故",
|
||||||
|
"公路更便宜"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Please use the meter.",
|
||||||
|
"tip": "meter 读作 /ˈmiːtə/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Is this the right way?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "There's a lot of traffic."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Please drive carefully."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Taxi tips\nTake a taxi from the taxi stop at the gate.\nSay, \"Please use the meter.\"\nHave the address on your phone or in your pocket.\nIs it a different way? Ask the driver, \"Is this the right way?\"",
|
||||||
|
"question": "应该在哪里坐出租车?",
|
||||||
|
"options": [
|
||||||
|
"大门口的出租车站",
|
||||||
|
"路边随便拦车",
|
||||||
|
"酒店里面"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:请司机打表,再问路对不对。",
|
||||||
|
"example": "Please use the meter. Is this the right way?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P06",
|
||||||
|
"A1-U10-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语说路上车很多,请司机小心开车。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P10",
|
||||||
|
"A1-U10-W02"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-S3",
|
||||||
|
"title": "停车、付钱、拿行李",
|
||||||
|
"minutes": 11,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P04",
|
||||||
|
"A1-U10-P07",
|
||||||
|
"A1-U10-P09"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Can you stop here, please? Sure. That's twenty dollars. Here you are, thirty. Keep the change. Thank you. Can you help me with my suitcase? Sure.",
|
||||||
|
"question": "乘客给了司机多少钱?",
|
||||||
|
"options": [
|
||||||
|
"三十美元",
|
||||||
|
"二十美元",
|
||||||
|
"五十美元"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Can you stop here, please?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Stop at the corner, please."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Keep the change."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Can you help me with my suitcase?",
|
||||||
|
"tip": "suitcase 读作 /ˈsuːtkeɪs/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Anna: Where are you?\nBen: I'm in a taxi. We are almost at the hotel.\nAnna: Great. The hotel entrance is on the other side. Ask the driver to stop in front of the hotel.\nBen: OK. See you soon.",
|
||||||
|
"question": "应该让司机停在哪里?",
|
||||||
|
"options": [
|
||||||
|
"in front of the hotel",
|
||||||
|
"on the other side",
|
||||||
|
"at the corner"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:请司机在这里停车,再说不用找零。",
|
||||||
|
"example": "Can you stop here, please? Keep the change.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P04",
|
||||||
|
"A1-U10-P09"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "到了酒店,用英语请司机停车、帮你拿行李箱,再付钱。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P04",
|
||||||
|
"A1-U10-P07",
|
||||||
|
"A1-U10-P09"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U10-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "从机场打车去酒店",
|
||||||
|
"learnerRole": "乘客",
|
||||||
|
"aiRole": "出租车司机",
|
||||||
|
"setting": "你在机场坐上一辆出租车,要去市中心的酒店。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello! Where to? Please put your bag in the back.",
|
||||||
|
"goal": "告诉司机去城市酒店",
|
||||||
|
"model": "Take me to City Hotel, please.",
|
||||||
|
"zh": "请带我去城市酒店。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "City Hotel. OK.",
|
||||||
|
"goal": "问多少钱、要多久",
|
||||||
|
"model": "How much is it to the hotel? How long does it take?",
|
||||||
|
"zh": "去酒店多少钱?要多久?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P02",
|
||||||
|
"A1-U10-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "About forty dollars. Forty minutes, but there is a lot of traffic today.",
|
||||||
|
"goal": "说你赶时间,请司机打表",
|
||||||
|
"model": "I'm in a hurry. Please use the meter.",
|
||||||
|
"zh": "我赶时间。请打表。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P05",
|
||||||
|
"A1-U10-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. There is an accident on the bridge, and a traffic jam. Let's take the highway. It's fast.",
|
||||||
|
"goal": "过了一会儿,问路对不对",
|
||||||
|
"model": "Is this the right way?",
|
||||||
|
"zh": "这条路对吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, it's correct. Your hotel is in a famous place, near the river. It's almost here.",
|
||||||
|
"goal": "请司机开慢一点、小心开",
|
||||||
|
"model": "OK. Please drive carefully.",
|
||||||
|
"zh": "好的。请小心开车。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Here is City Hotel.",
|
||||||
|
"goal": "请司机在这里停车,并帮你拿行李箱",
|
||||||
|
"model": "Can you stop here and help me with my suitcase?",
|
||||||
|
"zh": "能在这里停车,帮我拿一下行李箱吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P04",
|
||||||
|
"A1-U10-P07"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "打车赶火车",
|
||||||
|
"learnerRole": "乘客",
|
||||||
|
"aiRole": "出租车司机",
|
||||||
|
"setting": "你快赶不上火车了,在街上拦了一辆出租车。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi. It's cold outside! Where are you going?",
|
||||||
|
"goal": "说去火车站,你赶时间",
|
||||||
|
"model": "To the train station, please. I'm in a hurry.",
|
||||||
|
"zh": "请去火车站。我赶时间。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P01",
|
||||||
|
"A1-U10-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK. Be careful with the door. What time is your train?",
|
||||||
|
"goal": "说十点,问要多久",
|
||||||
|
"model": "At ten. How long does it take?",
|
||||||
|
"zh": "十点。要多久?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "About fifteen minutes. There is a lot of traffic on the bridge.",
|
||||||
|
"goal": "问有没有别的路",
|
||||||
|
"model": "A lot of traffic? Is there another way?",
|
||||||
|
"zh": "车很多?有别的路吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-W02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes. We can go through the park. I can drive quickly.",
|
||||||
|
"goal": "请司机小心开车",
|
||||||
|
"model": "Great, but please drive carefully.",
|
||||||
|
"zh": "太好了,不过请小心开车。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Here is the station, and you're not late yet. That's twelve dollars.",
|
||||||
|
"goal": "付十五美元,不用找零",
|
||||||
|
"model": "Here's fifteen. Keep the change.",
|
||||||
|
"zh": "这是十五美元。不用找了。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P09"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "司机不打表",
|
||||||
|
"learnerRole": "乘客",
|
||||||
|
"aiRole": "出租车司机",
|
||||||
|
"setting": "晚上你在酒店门口打车去一家餐厅,但司机不想打表。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi. Taxi? It's busy tonight.",
|
||||||
|
"goal": "说要打车,给地址",
|
||||||
|
"model": "Yes, a taxi, please. Take me to this address.",
|
||||||
|
"zh": "是的,要打车。请带我去这个地址。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-W01",
|
||||||
|
"A1-U10-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "That restaurant? Twenty dollars.",
|
||||||
|
"goal": "请司机打表",
|
||||||
|
"model": "Please use the meter.",
|
||||||
|
"zh": "请打表。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "The meter doesn't work today. It's the same price.",
|
||||||
|
"goal": "问要多久",
|
||||||
|
"model": "How long does it take?",
|
||||||
|
"zh": "要多长时间?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Ten minutes. Do you want the radio or some music?",
|
||||||
|
"goal": "说太贵了,请司机在这里停车,你换一辆车",
|
||||||
|
"model": "No, thanks. Can you stop here, please? I want a different taxi.",
|
||||||
|
"zh": "不用了,谢谢。请在这里停车,我换一辆车。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P04",
|
||||||
|
"A1-U10-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK, OK. The meter works now. It's already on.",
|
||||||
|
"goal": "回应,再问这条路对不对",
|
||||||
|
"model": "Thank you. Is this the right way to the restaurant?",
|
||||||
|
"zh": "谢谢。这是去餐厅的路吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P08"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U10-T1",
|
||||||
|
"sceneId": "A1-U10-C1",
|
||||||
|
"goal": "从机场打车去酒店:说目的地、问价格和时间、要求打表、确认路线、下车拿行李",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P01",
|
||||||
|
"A1-U10-P02",
|
||||||
|
"A1-U10-P03",
|
||||||
|
"A1-U10-P05",
|
||||||
|
"A1-U10-P06",
|
||||||
|
"A1-U10-P08",
|
||||||
|
"A1-U10-P10",
|
||||||
|
"A1-U10-P04",
|
||||||
|
"A1-U10-P07"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"目的地",
|
||||||
|
"价格",
|
||||||
|
"路线"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-T2",
|
||||||
|
"sceneId": "A1-U10-C2",
|
||||||
|
"goal": "赶火车时说明赶时间,问时间和路线,付钱下车",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-P01",
|
||||||
|
"A1-U10-P05",
|
||||||
|
"A1-U10-P03",
|
||||||
|
"A1-U10-W02",
|
||||||
|
"A1-U10-P10",
|
||||||
|
"A1-U10-P09"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"目的地",
|
||||||
|
"时间",
|
||||||
|
"付款"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-T3",
|
||||||
|
"sceneId": "A1-U10-C3",
|
||||||
|
"goal": "司机不打表时坚持打表,必要时换车",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U10-W01",
|
||||||
|
"A1-U10-P01",
|
||||||
|
"A1-U10-P06",
|
||||||
|
"A1-U10-P03",
|
||||||
|
"A1-U10-P04",
|
||||||
|
"A1-U10-P08"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"目的地",
|
||||||
|
"打表"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U10-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "打车去机场",
|
||||||
|
"text": "Hello, taxi? Good. Please take me to the airport quickly; I'm in a hurry. Is this the right way? Please use the meter. My bag is in the back; my phone is in my pocket. How much is it, and how long does it take? About thirty minutes? The traffic is busy tonight. The radio says there is an accident on the highway, so maybe there is a jam. Please drive carefully. Are we almost there? We are near the airport gate now. You can stop here at the entrance. Keep the change. Thank you!",
|
||||||
|
"glosses": {
|
||||||
|
"bad": "糟糕的",
|
||||||
|
"meter": "计价器",
|
||||||
|
"maybe": "也许"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "说话人要去哪里?",
|
||||||
|
"options": [
|
||||||
|
"机场",
|
||||||
|
"火车站",
|
||||||
|
"酒店"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "收音机里说高速路上怎么了?",
|
||||||
|
"options": [
|
||||||
|
"出了事故,可能堵车",
|
||||||
|
"天气很好",
|
||||||
|
"没有车"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:打车去酒店",
|
||||||
|
"text": "Ben: Take me to this hotel, please. Can you use the meter?\nDriver: Sure. It's about twenty minutes, but the road is busy.\nBen: I'm in a hurry. Is this the right way? Is it the correct road?\nDriver: Yes, but there is a traffic jam near the city center. Let's take a different way.\nBen: OK. Please drive carefully. Are we almost there?\nDriver: Almost. The hotel is just in front of us. We arrive soon.\nBen: Great. Can you stop at the entrance? Please put my suitcase on the ground; don't drop it.\nDriver: Of course. That's fifteen dollars.\nBen: Here is twenty. Keep the change. Is the airport far from here for tonight?\nDriver: Not far. Call me anytime. Be careful with your bag!\nBen: Thank you!",
|
||||||
|
"glosses": {
|
||||||
|
"tomorrow": "明天",
|
||||||
|
"course": "of course 当然",
|
||||||
|
"different": "不同的",
|
||||||
|
"ground": "地面",
|
||||||
|
"anytime": "随时",
|
||||||
|
"call": "打电话",
|
||||||
|
"drop": "掉落"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "司机说路上情况怎么样?",
|
||||||
|
"options": [
|
||||||
|
"很堵,要换条路",
|
||||||
|
"路很空",
|
||||||
|
"下雨了"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "车费多少钱?",
|
||||||
|
"options": [
|
||||||
|
"十五美元",
|
||||||
|
"二十美元",
|
||||||
|
"三十美元"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "trunk / boot / luggage",
|
||||||
|
"reason": "B1–B2;A1 用 suitcase 表达行李"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "route",
|
||||||
|
"reason": "B2;A1 用 the right way 确认路线"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,966 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U11",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "我的一天",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "说作息和常做的事",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "59",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "60",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "32",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "101",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "55",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "只用 get up、go to bed 等固定搭配"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U11-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I get up at seven.",
|
||||||
|
"zh": "我七点起床。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"get up",
|
||||||
|
"gets up"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "He gets up at six thirty.",
|
||||||
|
"zh": "他六点半起床。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你几点起床。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "What time do you get up?",
|
||||||
|
"zh": "你几点起床?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"what time do you",
|
||||||
|
"what time does"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "What time do you go to work?",
|
||||||
|
"zh": "你几点去上班?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问新室友几点起床。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I have breakfast at home.",
|
||||||
|
"zh": "我在家吃早饭。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"have breakfast",
|
||||||
|
"has breakfast",
|
||||||
|
"have lunch",
|
||||||
|
"has lunch",
|
||||||
|
"have dinner",
|
||||||
|
"has dinner"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I have lunch at twelve.",
|
||||||
|
"zh": "我十二点吃午饭。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你在家吃早饭。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I go to work at eight.",
|
||||||
|
"zh": "我八点去上班。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"go to work",
|
||||||
|
"goes to work",
|
||||||
|
"go to school",
|
||||||
|
"goes to school"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "My son goes to school at eight.",
|
||||||
|
"zh": "我儿子八点去上学。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你几点去上班。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "usually",
|
||||||
|
"zh": "通常",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"usually"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I usually go to work by bus.",
|
||||||
|
"zh": "我通常坐公交车上班。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你通常晚上看电视。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "always",
|
||||||
|
"zh": "总是",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"always"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I always have breakfast.",
|
||||||
|
"zh": "我总是吃早饭。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你总是早上洗澡。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-W03",
|
||||||
|
"type": "word",
|
||||||
|
"en": "never",
|
||||||
|
"zh": "从不",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"never"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I never watch TV in the morning.",
|
||||||
|
"zh": "我早上从不看电视。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你从不吃早饭。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-W04",
|
||||||
|
"type": "word",
|
||||||
|
"en": "sometimes",
|
||||||
|
"zh": "有时候",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "sometimes 在 CEFR-J 为 B1,但描述习惯时和 always、usually、never 一样常用",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"sometimes"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I sometimes cook dinner.",
|
||||||
|
"zh": "我有时候做晚饭。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你有时候早上跑步。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I watch TV in the evening.",
|
||||||
|
"zh": "我晚上看电视。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"in the evening",
|
||||||
|
"in the morning",
|
||||||
|
"in the afternoon",
|
||||||
|
"at night"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I run in the morning.",
|
||||||
|
"zh": "我早上跑步。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你晚上常做的一件事。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "every day",
|
||||||
|
"zh": "每天",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"every day"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I read the newspaper every day.",
|
||||||
|
"zh": "我每天看报纸。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你每天都喝咖啡。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-P07",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I take a shower.",
|
||||||
|
"zh": "我洗个澡。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"take a shower",
|
||||||
|
"takes a shower"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I always take a shower in the morning.",
|
||||||
|
"zh": "我总是早上洗澡。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你早上先洗澡。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-P08",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I go to bed at eleven.",
|
||||||
|
"zh": "我十一点睡觉。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"go to bed",
|
||||||
|
"goes to bed"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "What time do you go to bed?",
|
||||||
|
"zh": "你几点睡觉?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你通常十二点睡觉。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-P09",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "In my free time, I read books.",
|
||||||
|
"zh": "空闲时我看书。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"free time"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "In my free time, I watch videos.",
|
||||||
|
"zh": "空闲时我玩电子游戏。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你空闲时喜欢做什么。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R01",
|
||||||
|
"en": "wake",
|
||||||
|
"zh": "醒来(wake up)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R02",
|
||||||
|
"en": "sleep",
|
||||||
|
"zh": "睡觉"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R03",
|
||||||
|
"en": "wash",
|
||||||
|
"zh": "洗"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R04",
|
||||||
|
"en": "clean",
|
||||||
|
"zh": "打扫;干净的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R05",
|
||||||
|
"en": "brush",
|
||||||
|
"zh": "刷"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R06",
|
||||||
|
"en": "tooth",
|
||||||
|
"zh": "牙齿(复数 teeth)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R07",
|
||||||
|
"en": "cook",
|
||||||
|
"zh": "做饭"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R08",
|
||||||
|
"en": "school",
|
||||||
|
"zh": "学校"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R09",
|
||||||
|
"en": "study",
|
||||||
|
"zh": "学习"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R10",
|
||||||
|
"en": "teach",
|
||||||
|
"zh": "教"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R11",
|
||||||
|
"en": "learn",
|
||||||
|
"zh": "学"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R12",
|
||||||
|
"en": "newspaper",
|
||||||
|
"zh": "报纸"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R13",
|
||||||
|
"en": "afternoon",
|
||||||
|
"zh": "下午"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R14",
|
||||||
|
"en": "start",
|
||||||
|
"zh": "开始"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R15",
|
||||||
|
"en": "finish",
|
||||||
|
"zh": "完成;结束"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R16",
|
||||||
|
"en": "exercise",
|
||||||
|
"zh": "锻炼"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R17",
|
||||||
|
"en": "run",
|
||||||
|
"zh": "跑步"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R18",
|
||||||
|
"en": "homework",
|
||||||
|
"zh": "作业"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R19",
|
||||||
|
"en": "news",
|
||||||
|
"zh": "新闻"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R20",
|
||||||
|
"en": "internet",
|
||||||
|
"zh": "互联网"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R21",
|
||||||
|
"en": "computer",
|
||||||
|
"zh": "电脑"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R22",
|
||||||
|
"en": "video",
|
||||||
|
"zh": "视频"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R23",
|
||||||
|
"en": "song",
|
||||||
|
"zh": "歌曲"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R24",
|
||||||
|
"en": "sing",
|
||||||
|
"zh": "唱歌"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R25",
|
||||||
|
"en": "dance",
|
||||||
|
"zh": "跳舞"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R26",
|
||||||
|
"en": "draw",
|
||||||
|
"zh": "画画"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R27",
|
||||||
|
"en": "swim",
|
||||||
|
"zh": "游泳"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R28",
|
||||||
|
"en": "weekend",
|
||||||
|
"zh": "周末"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R29",
|
||||||
|
"en": "week",
|
||||||
|
"zh": "星期;周"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-R30",
|
||||||
|
"en": "life",
|
||||||
|
"zh": "生活"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U11-S1",
|
||||||
|
"title": "早上的安排",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-P01",
|
||||||
|
"A1-U11-P02",
|
||||||
|
"A1-U11-P03",
|
||||||
|
"A1-U11-P07",
|
||||||
|
"A1-U11-P04"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "What time do you get up? I get up at six thirty. I take a shower and have breakfast at home. I go to work at seven thirty.",
|
||||||
|
"question": "说话人几点去上班?",
|
||||||
|
"options": [
|
||||||
|
"七点半",
|
||||||
|
"六点半",
|
||||||
|
"八点"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "I get up at seven.",
|
||||||
|
"tip": "get up 连读成 /ɡe tʌp/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "What time do you get up?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I take a shower."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I have breakfast at home."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I go to work at eight."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Mark's morning\nMark wakes up at 6:00. He washes his face and brushes his teeth. He takes a shower. Then he cooks breakfast: eggs and bread.\nAt 7:30, he goes to work. His office is near his home.",
|
||||||
|
"question": "Mark 早饭吃什么?",
|
||||||
|
"options": [
|
||||||
|
"鸡蛋和面包",
|
||||||
|
"米饭和汤",
|
||||||
|
"咖啡和蛋糕"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:你几点起床、几点去上班。",
|
||||||
|
"example": "I get up at seven. I go to work at eight.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-P01",
|
||||||
|
"A1-U11-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语按顺序说说你平时早上做的几件事。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-P01",
|
||||||
|
"A1-U11-P07",
|
||||||
|
"A1-U11-P03",
|
||||||
|
"A1-U11-P04"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-S2",
|
||||||
|
"title": "总是、通常、有时、从不",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-W01",
|
||||||
|
"A1-U11-W02",
|
||||||
|
"A1-U11-W03",
|
||||||
|
"A1-U11-W04",
|
||||||
|
"A1-U11-P06"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "I always have breakfast. I usually go to work by bus. I sometimes run in the morning. I never watch TV in the morning.",
|
||||||
|
"question": "说话人早上从不做什么?",
|
||||||
|
"options": [
|
||||||
|
"看电视",
|
||||||
|
"跑步",
|
||||||
|
"吃早饭"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "I always have breakfast."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I usually go to work by bus.",
|
||||||
|
"tip": "usually 读作 /ˈjuːʒuəli/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I sometimes cook dinner."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I never watch TV in the morning."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I read the newspaper every day."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "How often do you exercise?\nAnna: I run every day. I always go before work.\nTom: I usually swim on the weekend.\nLily: I sometimes dance at home.\nBen: I never exercise. I'm always busy!",
|
||||||
|
"question": "谁每天跑步?",
|
||||||
|
"options": [
|
||||||
|
"Anna",
|
||||||
|
"Tom",
|
||||||
|
"Ben"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:说一件你总是做的事和一件你从不做的事。",
|
||||||
|
"example": "I always have breakfast. I never watch TV in the morning.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-W02",
|
||||||
|
"A1-U11-W03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用 usually、sometimes、never 各说一件你的习惯。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-W01",
|
||||||
|
"A1-U11-W04",
|
||||||
|
"A1-U11-W03"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-S3",
|
||||||
|
"title": "晚上和空闲时间",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-P05",
|
||||||
|
"A1-U11-P08",
|
||||||
|
"A1-U11-P09"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "What do you do in the evening? I usually cook dinner and watch TV. In my free time, I read books or watch videos. I go to bed at eleven.",
|
||||||
|
"question": "说话人几点睡觉?",
|
||||||
|
"options": [
|
||||||
|
"十一点",
|
||||||
|
"十点",
|
||||||
|
"十二点"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "I watch TV in the evening."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "In my free time, I read books."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I go to bed at eleven."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I study English at night."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "My week\nI'm a teacher. I teach at a school five days a week. After school, I finish my work and learn English on the computer.\nIn the evening, I listen to the news and songs on the internet. I sometimes sing and draw.\nMy life is busy, but I love it. On the weekend, I sleep late.",
|
||||||
|
"question": "这位老师晚上做什么?",
|
||||||
|
"options": [
|
||||||
|
"在网上听新闻和歌",
|
||||||
|
"去学校上课",
|
||||||
|
"很早睡觉"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:你晚上常做什么、几点睡觉。",
|
||||||
|
"example": "I watch TV in the evening. I go to bed at eleven.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-P05",
|
||||||
|
"A1-U11-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语说说你空闲时喜欢做的两件事。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-P09",
|
||||||
|
"A1-U11-P05"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U11-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "和语言伙伴聊作息",
|
||||||
|
"learnerRole": "你",
|
||||||
|
"aiRole": "语言交换伙伴",
|
||||||
|
"setting": "你和语言交换伙伴视频聊天,互相问对方平时一天怎么过。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "So, what time do you get up?",
|
||||||
|
"goal": "说你七点起床",
|
||||||
|
"model": "I get up at seven.",
|
||||||
|
"zh": "我七点起床。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Seven? That's early! What do you do in the morning?",
|
||||||
|
"goal": "说你洗澡、在家吃早饭",
|
||||||
|
"model": "I take a shower and have breakfast at home.",
|
||||||
|
"zh": "我洗个澡,在家吃早饭。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-P07",
|
||||||
|
"A1-U11-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Nice. I never have breakfast. I only have a coffee.",
|
||||||
|
"goal": "说你八点去上班,再问对方几点起床",
|
||||||
|
"model": "I go to work at eight. What time do you get up?",
|
||||||
|
"zh": "我八点去上班。你几点起床?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-P04",
|
||||||
|
"A1-U11-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "At nine! I work at home on the computer. In the afternoon, I clean the house. What do you do in the evening?",
|
||||||
|
"goal": "说你通常晚上看电视",
|
||||||
|
"model": "I usually watch TV in the evening.",
|
||||||
|
"zh": "我通常晚上看电视。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-W01",
|
||||||
|
"A1-U11-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Me too. And what time do you go to bed?",
|
||||||
|
"goal": "说十一点睡觉,从不太晚睡",
|
||||||
|
"model": "I go to bed at eleven. I never go to bed late.",
|
||||||
|
"zh": "我十一点睡觉,从不晚睡。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-P08",
|
||||||
|
"A1-U11-W03"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "体检时回答生活习惯",
|
||||||
|
"learnerRole": "病人",
|
||||||
|
"aiRole": "护士",
|
||||||
|
"setting": "体检时护士问你平时的生活习惯。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello. I have some questions about your day. Do you exercise?",
|
||||||
|
"goal": "说你有时候早上跑步",
|
||||||
|
"model": "Yes, I sometimes run in the morning.",
|
||||||
|
"zh": "有,我有时候早上跑步。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-W04",
|
||||||
|
"A1-U11-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Good. Do you have breakfast every day?",
|
||||||
|
"goal": "说你总是吃早饭",
|
||||||
|
"model": "Yes, I always have breakfast.",
|
||||||
|
"zh": "是的,我总是吃早饭。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-W02",
|
||||||
|
"A1-U11-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "What time do you go to bed?",
|
||||||
|
"goal": "说通常十二点睡觉",
|
||||||
|
"model": "I usually go to bed at twelve.",
|
||||||
|
"zh": "我通常十二点睡觉。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-W01",
|
||||||
|
"A1-U11-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "That's late. How many hours do you sleep?",
|
||||||
|
"goal": "说每天睡七个小时",
|
||||||
|
"model": "I sleep seven hours every day.",
|
||||||
|
"zh": "我每天睡七个小时。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK. And in your free time?",
|
||||||
|
"goal": "说空闲时你看书",
|
||||||
|
"model": "In my free time, I read books.",
|
||||||
|
"zh": "空闲时我看书。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-P09"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "和新室友商量早上的时间",
|
||||||
|
"learnerRole": "室友",
|
||||||
|
"aiRole": "新室友",
|
||||||
|
"setting": "你和新室友住在一起,商量早上谁先用浴室。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi! What time do you get up?",
|
||||||
|
"goal": "说你六点半起床",
|
||||||
|
"model": "I get up at six thirty.",
|
||||||
|
"zh": "我六点半起床。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Oh, I get up at seven. Do you take a shower in the morning?",
|
||||||
|
"goal": "说你总是早上洗澡",
|
||||||
|
"model": "Yes, I always take a shower in the morning.",
|
||||||
|
"zh": "是的,我总是早上洗澡。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-W02",
|
||||||
|
"A1-U11-P07",
|
||||||
|
"A1-U11-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK. You can use the bathroom first. What time do you go to work?",
|
||||||
|
"goal": "说你七点半去上班",
|
||||||
|
"model": "I go to work at seven thirty.",
|
||||||
|
"zh": "我七点半去上班。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "I start school at nine. I'm a student. Do you have breakfast at home?",
|
||||||
|
"goal": "说有时候在家吃,再问对方几点睡觉",
|
||||||
|
"model": "Sometimes. What time do you go to bed?",
|
||||||
|
"zh": "有时候。你几点睡觉?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-W04",
|
||||||
|
"A1-U11-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Usually at twelve. I do my homework late.",
|
||||||
|
"goal": "说你十一点睡觉,请对方晚上安静一点",
|
||||||
|
"model": "I go to bed at eleven. Please be quiet at night.",
|
||||||
|
"zh": "我十一点睡觉。晚上请安静一点。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-P08",
|
||||||
|
"A1-U11-P05"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U11-T1",
|
||||||
|
"sceneId": "A1-U11-C1",
|
||||||
|
"goal": "和语言伙伴互相介绍一天的作息",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-P01",
|
||||||
|
"A1-U11-P07",
|
||||||
|
"A1-U11-P03",
|
||||||
|
"A1-U11-P04",
|
||||||
|
"A1-U11-P02",
|
||||||
|
"A1-U11-W01",
|
||||||
|
"A1-U11-P05",
|
||||||
|
"A1-U11-P08",
|
||||||
|
"A1-U11-W03"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"起床",
|
||||||
|
"上班",
|
||||||
|
"晚上",
|
||||||
|
"睡觉"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-T2",
|
||||||
|
"sceneId": "A1-U11-C2",
|
||||||
|
"goal": "回答护士关于运动、早饭、睡眠和空闲时间的问题",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-W04",
|
||||||
|
"A1-U11-P05",
|
||||||
|
"A1-U11-W02",
|
||||||
|
"A1-U11-P03",
|
||||||
|
"A1-U11-W01",
|
||||||
|
"A1-U11-P08",
|
||||||
|
"A1-U11-P06",
|
||||||
|
"A1-U11-P09"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"运动",
|
||||||
|
"早饭",
|
||||||
|
"睡眠"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-T3",
|
||||||
|
"sceneId": "A1-U11-C3",
|
||||||
|
"goal": "和室友商量早上的时间安排",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U11-P01",
|
||||||
|
"A1-U11-W02",
|
||||||
|
"A1-U11-P07",
|
||||||
|
"A1-U11-P05",
|
||||||
|
"A1-U11-P04",
|
||||||
|
"A1-U11-W04",
|
||||||
|
"A1-U11-P08"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"起床时间",
|
||||||
|
"洗澡",
|
||||||
|
"睡觉时间"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U11-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "介绍我的一天",
|
||||||
|
"text": "This is my normal day. I wake up at seven and get up. I wash my face and brush my teeth, then I take a shower. I have breakfast and clean the kitchen. I go to school at eight to study and learn. I usually eat lunch with friends. In the afternoon my classes start again, and I do my homework. I finish at five. In the evening I sometimes cook, read the newspaper, or watch the news on TV. In my free time I run, swim, sing, dance or draw. On the weekend I use the internet and watch videos. I never sleep late; I go to bed at eleven.",
|
||||||
|
"glosses": {
|
||||||
|
"normal": "平常的",
|
||||||
|
"teeth": "牙齿",
|
||||||
|
"classes": "(复数)课"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "这段话主要讲什么?",
|
||||||
|
"options": [
|
||||||
|
"说话人每天的作息和常做的事",
|
||||||
|
"一次旅行",
|
||||||
|
"怎么买衣服"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "说话人早上先做什么?",
|
||||||
|
"options": [
|
||||||
|
"洗脸、刷牙",
|
||||||
|
"去上学",
|
||||||
|
"做作业"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:聊日常和爱好",
|
||||||
|
"text": "Mia: What time do you wake up?\nBen: I usually wake up at six thirty and go for a run. And you?\nMia: I never get up early! I wash and brush my teeth at eight.\nBen: Do you go to school?\nMia: Yes, I study music at college. I teach a small class on the weekend too.\nBen: What do you do in your free time?\nMia: I sing, dance and draw. Sometimes I swim. I like this life! What about you?\nBen: After work I clean the house, cook, and read the news on the internet.\nMia: Do you watch TV?\nBen: No, I never watch TV. But I like videos and songs.\nMia: Me too. Let's swim together this weekend!",
|
||||||
|
"glosses": {
|
||||||
|
"together": "一起",
|
||||||
|
"college": "大学",
|
||||||
|
"class": "课"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "Mia 空闲时喜欢做什么?",
|
||||||
|
"options": [
|
||||||
|
"唱歌、跳舞、画画",
|
||||||
|
"跑步",
|
||||||
|
"看电视"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "关于看电视,Ben 怎么说?",
|
||||||
|
"options": [
|
||||||
|
"他从不看电视",
|
||||||
|
"他每天看电视",
|
||||||
|
"他晚上看电视"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "routine",
|
||||||
|
"reason": "B1;A1 用 my day 表达"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "gym",
|
||||||
|
"reason": "B1;A1 用 exercise / run / swim 表达运动"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,971 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U12",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "买衣服",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "问尺码和颜色、试穿",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "123",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "8",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "38",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "只用 bigger、smaller 这类单音节比较级"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "16",
|
||||||
|
"use": "receptive"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U12-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Just looking, thanks.",
|
||||||
|
"zh": "我只是看看,谢谢。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"just looking"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "No, thanks. I'm just looking.",
|
||||||
|
"zh": "不用了,谢谢,我只是看看。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "店员问你要不要帮忙,说你只是看看。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "clothes",
|
||||||
|
"zh": "衣服",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"clothes"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I need some new clothes.",
|
||||||
|
"zh": "我需要几件新衣服。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你想买些衣服。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "shirt",
|
||||||
|
"zh": "衬衫",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"shirt",
|
||||||
|
"shirts"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'm looking for a white shirt.",
|
||||||
|
"zh": "我在找一件白衬衫。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你要找一件衬衫。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-W03",
|
||||||
|
"type": "word",
|
||||||
|
"en": "jacket",
|
||||||
|
"zh": "夹克;外套",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"jacket",
|
||||||
|
"jackets"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "This jacket is very nice.",
|
||||||
|
"zh": "这件夹克很好看。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你喜欢这件夹克。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "a pair of shoes",
|
||||||
|
"zh": "一双鞋",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"a pair of"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I want a pair of black shoes.",
|
||||||
|
"zh": "我想要一双黑鞋。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你想买一双鞋。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Can I try it on?",
|
||||||
|
"zh": "我可以试穿吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"try it on",
|
||||||
|
"try them on",
|
||||||
|
"try this on",
|
||||||
|
"try these on"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "These shoes are nice. Can I try them on?",
|
||||||
|
"zh": "这双鞋不错,我可以试穿吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问店员能不能试穿。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Where is the changing room?",
|
||||||
|
"zh": "试衣间在哪儿?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"changing room"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The changing room is next to the mirror.",
|
||||||
|
"zh": "试衣间在镜子旁边。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问试衣间在哪里。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "It's too small.",
|
||||||
|
"zh": "太小了。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"too small",
|
||||||
|
"too big",
|
||||||
|
"too long",
|
||||||
|
"too short"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "These pants are too long.",
|
||||||
|
"zh": "这条裤子太长了。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说这件外套太大了。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Do you have a bigger size?",
|
||||||
|
"zh": "有大一号的吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"bigger size",
|
||||||
|
"smaller size"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Do you have a smaller size?",
|
||||||
|
"zh": "有小一号的吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问有没有小一号的。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-P07",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "It doesn't fit.",
|
||||||
|
"zh": "不合身。",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "fit 在 CEFR-J 为 B1 动词,但试衣服时说“不合身”离不开它",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"doesn't fit",
|
||||||
|
"don't fit",
|
||||||
|
"fits"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "These shoes don't fit.",
|
||||||
|
"zh": "这双鞋不合脚。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说这件衬衫不合身。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-P08",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Do you have it in blue?",
|
||||||
|
"zh": "有蓝色的吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"in blue",
|
||||||
|
"in black",
|
||||||
|
"in red",
|
||||||
|
"in white"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Do you have this jacket in black?",
|
||||||
|
"zh": "这件夹克有黑色的吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问这件衬衫有没有白色的。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-P09",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "It looks good on you.",
|
||||||
|
"zh": "你穿着很好看。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"looks good on",
|
||||||
|
"look good on"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Those shoes look good on you.",
|
||||||
|
"zh": "那双鞋你穿着很好看。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "夸朋友穿这件外套好看。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-P10",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I'll think about it.",
|
||||||
|
"zh": "我再考虑一下。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"think about it"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "It's nice, but I'll think about it.",
|
||||||
|
"zh": "挺好的,不过我再考虑一下。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "不想马上买,礼貌地说再考虑一下。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R01",
|
||||||
|
"en": "color",
|
||||||
|
"zh": "颜色"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R02",
|
||||||
|
"en": "red",
|
||||||
|
"zh": "红色的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R03",
|
||||||
|
"en": "green",
|
||||||
|
"zh": "绿色的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R04",
|
||||||
|
"en": "yellow",
|
||||||
|
"zh": "黄色的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R05",
|
||||||
|
"en": "white",
|
||||||
|
"zh": "白色的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R06",
|
||||||
|
"en": "gray",
|
||||||
|
"zh": "灰色的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R07",
|
||||||
|
"en": "pink",
|
||||||
|
"zh": "粉色的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R08",
|
||||||
|
"en": "purple",
|
||||||
|
"zh": "紫色的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R09",
|
||||||
|
"en": "T-shirt",
|
||||||
|
"zh": "T 恤"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R10",
|
||||||
|
"en": "dress",
|
||||||
|
"zh": "连衣裙"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R11",
|
||||||
|
"en": "skirt",
|
||||||
|
"zh": "裙子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R12",
|
||||||
|
"en": "jeans",
|
||||||
|
"zh": "牛仔裤"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R13",
|
||||||
|
"en": "pants",
|
||||||
|
"zh": "裤子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R14",
|
||||||
|
"en": "coat",
|
||||||
|
"zh": "大衣"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R15",
|
||||||
|
"en": "cap",
|
||||||
|
"zh": "帽子(有檐的)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R16",
|
||||||
|
"en": "sweater",
|
||||||
|
"zh": "毛衣"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R17",
|
||||||
|
"en": "sock",
|
||||||
|
"zh": "袜子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R18",
|
||||||
|
"en": "tight",
|
||||||
|
"zh": "紧的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R19",
|
||||||
|
"en": "mirror",
|
||||||
|
"zh": "镜子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R20",
|
||||||
|
"en": "style",
|
||||||
|
"zh": "款式"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R21",
|
||||||
|
"en": "lovely",
|
||||||
|
"zh": "可爱的;漂亮的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R22",
|
||||||
|
"en": "ugly",
|
||||||
|
"zh": "难看的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R23",
|
||||||
|
"en": "favorite",
|
||||||
|
"zh": "最喜欢的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R24",
|
||||||
|
"en": "button",
|
||||||
|
"zh": "纽扣"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R25",
|
||||||
|
"en": "present",
|
||||||
|
"zh": "礼物"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R26",
|
||||||
|
"en": "girlfriend",
|
||||||
|
"zh": "女朋友"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R27",
|
||||||
|
"en": "boyfriend",
|
||||||
|
"zh": "男朋友"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R28",
|
||||||
|
"en": "lady",
|
||||||
|
"zh": "女士"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R29",
|
||||||
|
"en": "sir",
|
||||||
|
"zh": "先生"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R30",
|
||||||
|
"en": "toy",
|
||||||
|
"zh": "玩具"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R31",
|
||||||
|
"en": "jewelry",
|
||||||
|
"zh": "首饰"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R32",
|
||||||
|
"en": "notebook",
|
||||||
|
"zh": "笔记本"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R33",
|
||||||
|
"en": "pencil",
|
||||||
|
"zh": "铅笔"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R34",
|
||||||
|
"en": "bookstore",
|
||||||
|
"zh": "书店"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-R35",
|
||||||
|
"en": "kid",
|
||||||
|
"zh": "小孩"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U12-S1",
|
||||||
|
"title": "逛店和找衣服",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P01",
|
||||||
|
"A1-U12-W01",
|
||||||
|
"A1-U12-W02",
|
||||||
|
"A1-U12-W03",
|
||||||
|
"A1-U12-P02"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Can I help you? No, thanks. I'm just looking. OK. The shirts are over there, and the jackets are next to the mirror.",
|
||||||
|
"question": "夹克在哪里?",
|
||||||
|
"options": [
|
||||||
|
"镜子旁边",
|
||||||
|
"门口",
|
||||||
|
"楼上"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Just looking, thanks."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I need some new clothes.",
|
||||||
|
"tip": "clothes 读 /kləʊðz/,不要读成两个音节"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'm looking for a white shirt."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "This jacket is very nice."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I want a pair of black shoes."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "City Store\nFloor 1: shoes, bags, jewelry and caps\nFloor 2: lady's clothes: dresses, skirts and T-shirts\nFloor 3: men's clothes: shirts, jackets, coats and jeans\nFloor 4: kids' clothes and toys\nFloor 5: bookstore: books, notebooks and pencils",
|
||||||
|
"question": "买男士夹克去几楼?",
|
||||||
|
"options": [
|
||||||
|
"三楼",
|
||||||
|
"二楼",
|
||||||
|
"四楼"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:你在找什么衣服、想要一双什么颜色的鞋。",
|
||||||
|
"example": "I'm looking for a jacket. I want a pair of black shoes.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-W03",
|
||||||
|
"A1-U12-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语说说你今天想买的两件衣服。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-W01",
|
||||||
|
"A1-U12-W02",
|
||||||
|
"A1-U12-W03"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-S2",
|
||||||
|
"title": "试穿与尺码",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P03",
|
||||||
|
"A1-U12-P04",
|
||||||
|
"A1-U12-P05",
|
||||||
|
"A1-U12-P06",
|
||||||
|
"A1-U12-P07"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Can I try it on? Sure. The changing room is over there. ... Oh, it's too small. It doesn't fit. Do you have a bigger size? Yes, here you are.",
|
||||||
|
"question": "顾客遇到什么问题?",
|
||||||
|
"options": [
|
||||||
|
"衣服太小",
|
||||||
|
"衣服太贵",
|
||||||
|
"试衣间有人"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Can I try it on?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Where is the changing room?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "It's too small."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Do you have a bigger size?",
|
||||||
|
"tip": "bigger 重音在前:BIG-ger"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "It doesn't fit."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Size help\nS = small L = large\nTry this: Is your T-shirt tight? Then try a bigger size. Is it too long? Then try a smaller size.\nPants and jeans: sit down in the changing room. Are they OK?",
|
||||||
|
"question": "衣服太紧应该怎么办?",
|
||||||
|
"options": [
|
||||||
|
"换大一号",
|
||||||
|
"换小一号",
|
||||||
|
"换一种颜色"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:这件太小了,问有没有大一号。",
|
||||||
|
"example": "It's too small. Do you have a bigger size?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P05",
|
||||||
|
"A1-U12-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "你试穿的鞋太大,用英语告诉店员并要小一号。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P07",
|
||||||
|
"A1-U12-P05",
|
||||||
|
"A1-U12-P06"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-S3",
|
||||||
|
"title": "颜色和决定",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P08",
|
||||||
|
"A1-U12-P09",
|
||||||
|
"A1-U12-P10"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "I like this dress, but do you have it in blue? Sorry, we only have it in red and pink. Oh, it's lovely, but I'll think about it.",
|
||||||
|
"question": "顾客想要什么颜色?",
|
||||||
|
"options": [
|
||||||
|
"蓝色",
|
||||||
|
"红色",
|
||||||
|
"粉色"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Do you have it in blue?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "It looks good on you."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'll think about it."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "My favorite color is green."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "A present for my girlfriend\nI want a sweater for my girlfriend. Her favorite colors are purple and gray. In the store, there are yellow, green and white sweaters. The style is nice, but the yellow one is ugly. The lady says, \"Sir, we have it in purple. The buttons are lovely.\" It's a little expensive, so I'll think about it. I buy some socks for my boyfriend too. No, I don't have one!",
|
||||||
|
"question": "女朋友最喜欢什么颜色?",
|
||||||
|
"options": [
|
||||||
|
"紫色和浅灰色",
|
||||||
|
"黄色和绿色",
|
||||||
|
"白色和红色"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:问有没有蓝色的,然后说再考虑一下。",
|
||||||
|
"example": "Do you have it in blue? I'll think about it.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P08",
|
||||||
|
"A1-U12-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "朋友在试衣服,用英语夸他穿着好看,再说说你最喜欢的颜色。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P09",
|
||||||
|
"A1-U12-P08"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U12-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "在服装店买夹克",
|
||||||
|
"learnerRole": "顾客",
|
||||||
|
"aiRole": "店员",
|
||||||
|
"setting": "你在商场的服装店想买一件夹克。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello! Can I help you?",
|
||||||
|
"goal": "说你在找一件夹克",
|
||||||
|
"model": "Yes, I'm looking for a jacket.",
|
||||||
|
"zh": "是的,我在找一件夹克。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-W03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "The jackets are here. What about this one?",
|
||||||
|
"goal": "问能不能试穿、试衣间在哪",
|
||||||
|
"model": "Can I try it on? Where is the changing room?",
|
||||||
|
"zh": "我可以试穿吗?试衣间在哪儿?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P03",
|
||||||
|
"A1-U12-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. It's over there, next to the mirror. ... How is it?",
|
||||||
|
"goal": "说太小了、不合身",
|
||||||
|
"model": "It's too small. It doesn't fit.",
|
||||||
|
"zh": "太小了,不合身。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P05",
|
||||||
|
"A1-U12-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK. Here is a large. Is it better?",
|
||||||
|
"goal": "说合身了,问有没有蓝色的",
|
||||||
|
"model": "It fits. Do you have it in blue?",
|
||||||
|
"zh": "合身了。有蓝色的吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P07",
|
||||||
|
"A1-U12-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, here you are. It looks good on you!",
|
||||||
|
"goal": "说你要了",
|
||||||
|
"model": "I'll take it.",
|
||||||
|
"zh": "我要了。",
|
||||||
|
"itemIds": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "给朋友挑衣服",
|
||||||
|
"learnerRole": "朋友",
|
||||||
|
"aiRole": "正在试衣服的朋友",
|
||||||
|
"setting": "你陪朋友逛街,朋友在试衣服并问你的意见。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "What do you think about this shirt?",
|
||||||
|
"goal": "夸他穿着好看",
|
||||||
|
"model": "It looks good on you.",
|
||||||
|
"zh": "你穿着很好看。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P09"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Thanks! But it's a little tight.",
|
||||||
|
"goal": "让他问店员要大一号",
|
||||||
|
"model": "Ask for a bigger size.",
|
||||||
|
"zh": "问问有没有大一号的。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK. Do you like the color?",
|
||||||
|
"goal": "说你更喜欢白色,问店里有没有白色的",
|
||||||
|
"model": "I like white. Do they have it in white?",
|
||||||
|
"zh": "我喜欢白色。他们有白色的吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, but it's very expensive.",
|
||||||
|
"goal": "说那就只买一双鞋",
|
||||||
|
"model": "Just buy a pair of shoes.",
|
||||||
|
"zh": "那就买一双鞋吧。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Hmm. These shoes are nice.",
|
||||||
|
"goal": "说你再考虑一下",
|
||||||
|
"model": "OK, I'll think about it too.",
|
||||||
|
"zh": "好,我也再考虑一下。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P10"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "只是逛逛",
|
||||||
|
"learnerRole": "顾客",
|
||||||
|
"aiRole": "热情的店员",
|
||||||
|
"setting": "你随便逛逛,店员一直来推荐,你要礼貌地回应。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi! Are you looking for anything?",
|
||||||
|
"goal": "说只是看看",
|
||||||
|
"model": "I'm just looking at the clothes, thanks.",
|
||||||
|
"zh": "我只是看看衣服,谢谢。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P01",
|
||||||
|
"A1-U12-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "We have new clothes. This dress is on sale!",
|
||||||
|
"goal": "说你需要的是衬衫,不是连衣裙",
|
||||||
|
"model": "Thanks, but I need a shirt, not a dress.",
|
||||||
|
"zh": "谢谢,不过我需要衬衫,不是连衣裙。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-W02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Here are the shirts. Try this one!",
|
||||||
|
"goal": "问能不能试穿",
|
||||||
|
"model": "Can I try it on?",
|
||||||
|
"zh": "我可以试穿吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "How is it?",
|
||||||
|
"goal": "说太长了,不合身",
|
||||||
|
"model": "It's too long. It doesn't fit.",
|
||||||
|
"zh": "太长了,不合身。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P05",
|
||||||
|
"A1-U12-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Do you want a smaller size?",
|
||||||
|
"goal": "说你再考虑一下",
|
||||||
|
"model": "No, thanks. I'll think about it.",
|
||||||
|
"zh": "不用了,谢谢。我再考虑一下。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P10"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U12-T1",
|
||||||
|
"sceneId": "A1-U12-C1",
|
||||||
|
"goal": "找到合适尺码和颜色的夹克并买下",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-W03",
|
||||||
|
"A1-U12-P03",
|
||||||
|
"A1-U12-P04",
|
||||||
|
"A1-U12-P05",
|
||||||
|
"A1-U12-P07",
|
||||||
|
"A1-U12-P08"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"款式",
|
||||||
|
"尺码",
|
||||||
|
"颜色"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-T2",
|
||||||
|
"sceneId": "A1-U12-C2",
|
||||||
|
"goal": "帮朋友挑衣服并给出建议",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P09",
|
||||||
|
"A1-U12-P06",
|
||||||
|
"A1-U12-P08",
|
||||||
|
"A1-U12-P02",
|
||||||
|
"A1-U12-P10"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"好不好看",
|
||||||
|
"尺码",
|
||||||
|
"颜色"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-T3",
|
||||||
|
"sceneId": "A1-U12-C3",
|
||||||
|
"goal": "礼貌应对店员的推荐",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U12-P01",
|
||||||
|
"A1-U12-W02",
|
||||||
|
"A1-U12-W01",
|
||||||
|
"A1-U12-P03",
|
||||||
|
"A1-U12-P05",
|
||||||
|
"A1-U12-P07",
|
||||||
|
"A1-U12-P10"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"只是看看",
|
||||||
|
"试穿",
|
||||||
|
"拒绝"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U12-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "店员招呼你试衣服",
|
||||||
|
"text": "Hello! Are you looking for something? These clothes are on sale. What size are you? We have small, medium and large. This white T-shirt is nice, and the gray sweater is lovely. We also have red skirts, blue jeans, black pants, a warm coat and a yellow cap. Do you want to try it on? The mirror is over there. If it's too tight, tell me and I'll get another size. This pink dress is our favorite style. It looks good on you! Are you buying a present? We have socks, toys and jewelry too. Come and see!",
|
||||||
|
"glosses": {
|
||||||
|
"medium": "中号",
|
||||||
|
"tell": "告诉",
|
||||||
|
"warm": "暖和的"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "店员主要在做什么?",
|
||||||
|
"options": [
|
||||||
|
"帮顾客挑衣服、试穿",
|
||||||
|
"卖水果",
|
||||||
|
"问路"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "店员说镜子在哪里?",
|
||||||
|
"options": [
|
||||||
|
"在那边",
|
||||||
|
"门口",
|
||||||
|
"楼上"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:试连衣裙",
|
||||||
|
"text": "Mia: Excuse me, can I try on this dress? I want it as a present.\nStaff: Sure. What size and color?\nMia: Medium, in purple. Do you have that color?\nStaff: Yes. Here you are. The mirror is over there.\nMia: Hmm, it's too small and tight. It doesn't fit. This button is loose too.\nStaff: Sorry! Let me get a bigger size. How is this one?\nMia: Better! It's a lovely style, not ugly at all. I like the color. How much?\nStaff: Forty dollars. It's our favorite dress this year, sir — I mean, lady!\nMia: I'll take it. Do you have a white one too? And a green cap for a kid?\nStaff: Yes, the caps are near the toys and the notebooks.\nMia: Great, thank you!",
|
||||||
|
"glosses": {
|
||||||
|
"staff": "员工,服务员",
|
||||||
|
"medium": "中号",
|
||||||
|
"loose": "松的"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "Mia 第一次试的裙子怎么样?",
|
||||||
|
"options": [
|
||||||
|
"太小太紧,不合身",
|
||||||
|
"刚刚好",
|
||||||
|
"太大了"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "店员后来给她拿了什么?",
|
||||||
|
"options": [
|
||||||
|
"更大的尺码",
|
||||||
|
"一双鞋",
|
||||||
|
"一顶帽子"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "medium",
|
||||||
|
"reason": "B1;尺码表里只作为 M 的说明出现,不单独教"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "department store",
|
||||||
|
"reason": "department 为 B1;A1 用 mall 或 store"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,975 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U13",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "日期与约时间",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "说日期、约见面、改时间",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "239",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "236",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "CEFR-J 未标级别,When 问句是约时间的必需句型"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "120",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "21",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "日期用 in March、on Friday、at three"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "59-2",
|
||||||
|
"use": "receptive"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U13-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "What's the date today?",
|
||||||
|
"zh": "今天几号?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"what's the date",
|
||||||
|
"what is the date"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "What's the date tomorrow?",
|
||||||
|
"zh": "明天几号?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问今天几号。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "When is your birthday?",
|
||||||
|
"zh": "你的生日是哪天?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"when is your birthday",
|
||||||
|
"when's your birthday"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "When is your birthday, Anna?",
|
||||||
|
"zh": "安娜,你的生日是哪天?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问新朋友的生日。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "My birthday is in March.",
|
||||||
|
"zh": "我的生日在三月。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"in january",
|
||||||
|
"in february",
|
||||||
|
"in march",
|
||||||
|
"in april",
|
||||||
|
"in may",
|
||||||
|
"in june",
|
||||||
|
"in july",
|
||||||
|
"in august",
|
||||||
|
"in september",
|
||||||
|
"in october",
|
||||||
|
"in november",
|
||||||
|
"in december"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The party is in July.",
|
||||||
|
"zh": "聚会在七月。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你的生日在几月。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Are you free on Saturday?",
|
||||||
|
"zh": "你周六有空吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"are you free"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Are you free tomorrow?",
|
||||||
|
"zh": "你明天有空吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问朋友周六有没有空。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Sorry, I'm busy.",
|
||||||
|
"zh": "抱歉,我没空。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"i'm busy",
|
||||||
|
"i am busy"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Sorry, I'm busy on Friday.",
|
||||||
|
"zh": "抱歉,我周五没空。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "礼貌地说你那天没空。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "How about Sunday?",
|
||||||
|
"zh": "周日怎么样?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"how about"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "How about next week?",
|
||||||
|
"zh": "下周怎么样?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "提议改到周日。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-P07",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Let's meet at three.",
|
||||||
|
"zh": "我们三点见吧。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"let's meet",
|
||||||
|
"let us meet"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Let's meet at the station.",
|
||||||
|
"zh": "我们在车站见吧。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "约朋友三点见面。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-P08",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "What time is good for you?",
|
||||||
|
"zh": "你几点方便?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"good for you"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Is Friday good for you?",
|
||||||
|
"zh": "周五你方便吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问对方几点方便。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-P09",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "See you then.",
|
||||||
|
"zh": "到时见。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"see you then"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "OK, Saturday at two. See you then.",
|
||||||
|
"zh": "好,周六两点。到时见。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "约好时间后道别。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-P10",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "next week",
|
||||||
|
"zh": "下周",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"next week",
|
||||||
|
"next month",
|
||||||
|
"next monday",
|
||||||
|
"next friday"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'm free next week.",
|
||||||
|
"zh": "我下周有空。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你下周有空。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-P11",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Can we change the date?",
|
||||||
|
"zh": "我们能改个日期吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"change the date",
|
||||||
|
"change the time"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Sorry, can we change the time?",
|
||||||
|
"zh": "抱歉,我们能改个时间吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "请对方改个日期。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "tomorrow",
|
||||||
|
"zh": "明天",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"tomorrow"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "See you tomorrow!",
|
||||||
|
"zh": "明天见!"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你明天有空。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "party",
|
||||||
|
"zh": "聚会",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"party",
|
||||||
|
"parties"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Come to my birthday party!",
|
||||||
|
"zh": "来参加我的生日聚会吧!"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "请朋友来你的聚会。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R01",
|
||||||
|
"en": "January",
|
||||||
|
"zh": "一月"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R02",
|
||||||
|
"en": "February",
|
||||||
|
"zh": "二月"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R03",
|
||||||
|
"en": "April",
|
||||||
|
"zh": "四月"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R04",
|
||||||
|
"en": "June",
|
||||||
|
"zh": "六月"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R05",
|
||||||
|
"en": "July",
|
||||||
|
"zh": "七月"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R06",
|
||||||
|
"en": "August",
|
||||||
|
"zh": "八月"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R07",
|
||||||
|
"en": "September",
|
||||||
|
"zh": "九月"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R08",
|
||||||
|
"en": "October",
|
||||||
|
"zh": "十月"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R09",
|
||||||
|
"en": "November",
|
||||||
|
"zh": "十一月"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R10",
|
||||||
|
"en": "December",
|
||||||
|
"zh": "十二月"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R11",
|
||||||
|
"en": "month",
|
||||||
|
"zh": "月"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R12",
|
||||||
|
"en": "later",
|
||||||
|
"zh": "稍后;以后"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R13",
|
||||||
|
"en": "ago",
|
||||||
|
"zh": "以前"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R14",
|
||||||
|
"en": "pm",
|
||||||
|
"zh": "下午(p.m.)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R15",
|
||||||
|
"en": "plan",
|
||||||
|
"zh": "计划"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R16",
|
||||||
|
"en": "celebrate",
|
||||||
|
"zh": "庆祝"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R17",
|
||||||
|
"en": "remember",
|
||||||
|
"zh": "记得"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R18",
|
||||||
|
"en": "forget",
|
||||||
|
"zh": "忘记"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R19",
|
||||||
|
"en": "hope",
|
||||||
|
"zh": "希望"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R20",
|
||||||
|
"en": "wish",
|
||||||
|
"zh": "祝愿"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R21",
|
||||||
|
"en": "dear",
|
||||||
|
"zh": "亲爱的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R22",
|
||||||
|
"en": "luck",
|
||||||
|
"zh": "运气"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R23",
|
||||||
|
"en": "age",
|
||||||
|
"zh": "年龄"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R24",
|
||||||
|
"en": "invite",
|
||||||
|
"zh": "邀请"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R25",
|
||||||
|
"en": "wedding",
|
||||||
|
"zh": "婚礼"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R26",
|
||||||
|
"en": "holiday",
|
||||||
|
"zh": "假日"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R27",
|
||||||
|
"en": "festival",
|
||||||
|
"zh": "节日"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R28",
|
||||||
|
"en": "calendar",
|
||||||
|
"zh": "日历"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R29",
|
||||||
|
"en": "bye",
|
||||||
|
"zh": "再见"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R30",
|
||||||
|
"en": "cut",
|
||||||
|
"zh": "切"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R31",
|
||||||
|
"en": "mom",
|
||||||
|
"zh": "妈妈"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R32",
|
||||||
|
"en": "dad",
|
||||||
|
"zh": "爸爸"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R33",
|
||||||
|
"en": "maybe",
|
||||||
|
"zh": "也许"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R34",
|
||||||
|
"en": "together",
|
||||||
|
"zh": "一起"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-R35",
|
||||||
|
"en": "know",
|
||||||
|
"zh": "知道"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U13-S1",
|
||||||
|
"title": "日期和生日",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P01",
|
||||||
|
"A1-U13-P02",
|
||||||
|
"A1-U13-P03",
|
||||||
|
"A1-U13-W01"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "What's the date today? It's May 5. And tomorrow is May 6. Oh, tomorrow is my birthday!",
|
||||||
|
"question": "说话人的生日是几号?",
|
||||||
|
"options": [
|
||||||
|
"五月六日",
|
||||||
|
"五月五日",
|
||||||
|
"六月五日"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "What's the date today?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "When is your birthday?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "My birthday is in March.",
|
||||||
|
"tip": "March 读 /mɑːtʃ/,月份首字母要大写"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "See you tomorrow!"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Our birthdays\nThere are twelve months in a year. Look at our family calendar:\nMom: January 12\nDad: April 3\nMy sister: August 20\nMy brother: October 9\nMe: December 25\nMy grandfather: February, my grandmother: June, my aunt: July, my uncle: September, my cousin: November.\nMy grandmother's age? Eighty! We always celebrate with a big cake, and she cuts it.",
|
||||||
|
"question": "谁的生日在十月?",
|
||||||
|
"options": [
|
||||||
|
"哥哥",
|
||||||
|
"妈妈",
|
||||||
|
"姐姐"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:问朋友生日是哪天,再说你的生日在几月。",
|
||||||
|
"example": "When is your birthday? My birthday is in March.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P02",
|
||||||
|
"A1-U13-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语说说你家里两个人的生日在几月。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P03"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-S2",
|
||||||
|
"title": "约时间",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P04",
|
||||||
|
"A1-U13-P05",
|
||||||
|
"A1-U13-P06",
|
||||||
|
"A1-U13-P07",
|
||||||
|
"A1-U13-P08",
|
||||||
|
"A1-U13-P09"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Are you free on Saturday? Sorry, I'm busy on Saturday. How about Sunday? Sunday is good. Let's meet at three. OK, see you then.",
|
||||||
|
"question": "他们约在哪天见面?",
|
||||||
|
"options": [
|
||||||
|
"周日",
|
||||||
|
"周六",
|
||||||
|
"周五"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Are you free on Saturday?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Sorry, I'm busy."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "How about Sunday?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Let's meet at three."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "What time is good for you?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "See you then."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Nina: Hi Leo! Are you free on Friday? Let's have dinner.\nLeo: Sorry, I'm busy on Friday. I work until 9 pm. How about Saturday?\nNina: Saturday is good. What time is good for you?\nLeo: 7 pm? Let's meet at the restaurant.\nNina: OK! See you then. Bye!",
|
||||||
|
"question": "Leo 为什么周五不行?",
|
||||||
|
"options": [
|
||||||
|
"他要工作到九点",
|
||||||
|
"他要去生日聚会",
|
||||||
|
"他忘了时间"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:问朋友周六有没有空,再约三点见面。",
|
||||||
|
"example": "Are you free on Saturday? Let's meet at three.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P04",
|
||||||
|
"A1-U13-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "朋友约你周五见,你没空,用英语拒绝并提议别的时间。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P05",
|
||||||
|
"A1-U13-P06",
|
||||||
|
"A1-U13-P08"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-S3",
|
||||||
|
"title": "改期和聚会",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P10",
|
||||||
|
"A1-U13-P11",
|
||||||
|
"A1-U13-W02"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Hi, it's Tom. Sorry, I can't come to the party tomorrow. Can we change the date? Maybe next week?",
|
||||||
|
"question": "Tom 想把见面改到什么时候?",
|
||||||
|
"options": [
|
||||||
|
"下周",
|
||||||
|
"明天",
|
||||||
|
"下个月"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Can we change the date?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'm free next week."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Come to my birthday party!"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Remember the date!"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Dear friends,\nI want to invite you to my birthday party! It's on Saturday, June 14, at 6 pm. We can eat cake and celebrate together. Please don't forget! We had this plan two months ago!\nIt's a holiday plan too: there's a festival in the park later that night.\nSorry, we can't change the date. My brother's wedding is two days later.\nI hope you can come. Wish me luck with the cake!\nMia",
|
||||||
|
"question": "聚会是哪一天?",
|
||||||
|
"options": [
|
||||||
|
"六月十四日",
|
||||||
|
"六月六日",
|
||||||
|
"六月十六日"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:说抱歉,然后问能不能改到下周。",
|
||||||
|
"example": "Sorry, can we change the date? How about next week?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P11",
|
||||||
|
"A1-U13-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语邀请朋友来你的聚会,说出日期和时间。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-W02",
|
||||||
|
"A1-U13-P07"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U13-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "约朋友吃饭",
|
||||||
|
"learnerRole": "你",
|
||||||
|
"aiRole": "朋友",
|
||||||
|
"setting": "你给朋友打电话,想约周末一起吃饭。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi! What's up?",
|
||||||
|
"goal": "问朋友周六有没有空",
|
||||||
|
"model": "Are you free on Saturday?",
|
||||||
|
"zh": "你周六有空吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sorry, I'm busy on Saturday. It's my mom's birthday.",
|
||||||
|
"goal": "提议周日",
|
||||||
|
"model": "How about Sunday?",
|
||||||
|
"zh": "周日怎么样?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sunday is OK. What time?",
|
||||||
|
"goal": "问对方几点方便",
|
||||||
|
"model": "What time is good for you?",
|
||||||
|
"zh": "你几点方便?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Six pm is good for me.",
|
||||||
|
"goal": "约在饭店六点见",
|
||||||
|
"model": "Let's meet at six at the restaurant.",
|
||||||
|
"zh": "我们六点在饭店见吧。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Great. I can't wait!",
|
||||||
|
"goal": "说到时见",
|
||||||
|
"model": "See you then.",
|
||||||
|
"zh": "到时见。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P09"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "邀请同事来生日聚会",
|
||||||
|
"learnerRole": "过生日的人",
|
||||||
|
"aiRole": "同事",
|
||||||
|
"setting": "你下周过生日,想邀请同事来聚会。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi! You look happy today.",
|
||||||
|
"goal": "说你的生日在下周",
|
||||||
|
"model": "My birthday is next week.",
|
||||||
|
"zh": "我的生日在下周。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Oh, nice! What's the date?",
|
||||||
|
"goal": "说是五月九日,请对方来聚会",
|
||||||
|
"model": "It's May 9. Come to my party!",
|
||||||
|
"zh": "是五月九日。来参加我的聚会吧!",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-W02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "I'd love to. When is it?",
|
||||||
|
"goal": "说还不知道时间,也许明天知道",
|
||||||
|
"model": "I don't know the time yet. Maybe tomorrow.",
|
||||||
|
"zh": "我还不知道时间,也许明天就知道。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK. When is your birthday, then?",
|
||||||
|
"goal": "说你的生日在五月",
|
||||||
|
"model": "My birthday is in May.",
|
||||||
|
"zh": "我的生日在五月。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "And when is my birthday? Do you remember?",
|
||||||
|
"goal": "反问对方生日是哪天",
|
||||||
|
"model": "No! When is your birthday?",
|
||||||
|
"zh": "不记得!你的生日是哪天?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P02"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "改期",
|
||||||
|
"learnerRole": "你",
|
||||||
|
"aiRole": "朋友",
|
||||||
|
"setting": "你们本来约好明天见,但你临时有事,需要改期。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi! Are we OK for tomorrow at three?",
|
||||||
|
"goal": "说抱歉明天没空",
|
||||||
|
"model": "Sorry, I'm busy tomorrow.",
|
||||||
|
"zh": "抱歉,我明天没空。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P05",
|
||||||
|
"A1-U13-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Oh no. What's the problem?",
|
||||||
|
"goal": "问能不能改个日期",
|
||||||
|
"model": "I have to work. Can we change the date?",
|
||||||
|
"zh": "我要上班。我们能改个日期吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P11"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. When are you free?",
|
||||||
|
"goal": "说下周有空",
|
||||||
|
"model": "I'm free next week.",
|
||||||
|
"zh": "我下周有空。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Next week I'm busy on Monday.",
|
||||||
|
"goal": "提议下周五",
|
||||||
|
"model": "How about Friday?",
|
||||||
|
"zh": "周五怎么样?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Friday is good.",
|
||||||
|
"goal": "问今天几号,确认日期",
|
||||||
|
"model": "Great. What's the date today?",
|
||||||
|
"zh": "太好了。今天几号?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P01"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U13-T1",
|
||||||
|
"sceneId": "A1-U13-C1",
|
||||||
|
"goal": "约朋友周末吃饭,定下日子、时间和地点",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P04",
|
||||||
|
"A1-U13-P06",
|
||||||
|
"A1-U13-P08",
|
||||||
|
"A1-U13-P07",
|
||||||
|
"A1-U13-P09"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"哪天",
|
||||||
|
"几点",
|
||||||
|
"在哪儿"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-T2",
|
||||||
|
"sceneId": "A1-U13-C2",
|
||||||
|
"goal": "邀请同事参加你的生日聚会",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P10",
|
||||||
|
"A1-U13-W02",
|
||||||
|
"A1-U13-W01",
|
||||||
|
"A1-U13-P03",
|
||||||
|
"A1-U13-P02"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"日期",
|
||||||
|
"聚会",
|
||||||
|
"生日"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-T3",
|
||||||
|
"sceneId": "A1-U13-C3",
|
||||||
|
"goal": "临时没空,和朋友改约时间",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U13-P05",
|
||||||
|
"A1-U13-W01",
|
||||||
|
"A1-U13-P11",
|
||||||
|
"A1-U13-P10",
|
||||||
|
"A1-U13-P06",
|
||||||
|
"A1-U13-P01"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"原因",
|
||||||
|
"新日期"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U13-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "朋友打来约生日聚会",
|
||||||
|
"text": "Hi, it's me! I want to have a birthday party next month, in April. Are you free? My birthday is on the fifteenth. Please remember the date and write it on your calendar; don't forget! The party is at my home at three pm. My mom and dad will cook, and we will cut a big cake and celebrate together. I hope you can come. Maybe you can bring a small gift. I invited some old friends too. If Saturday is not good, how about later, on Sunday? I wish you a good week. Let me know. Bye!",
|
||||||
|
"glosses": {
|
||||||
|
"games": "游戏",
|
||||||
|
"fifteenth": "(每月)十五号",
|
||||||
|
"invited": "邀请(过去式)",
|
||||||
|
"bring": "带来"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "这段留言是关于什么的?",
|
||||||
|
"options": [
|
||||||
|
"邀请你参加生日聚会",
|
||||||
|
"改机票",
|
||||||
|
"问天气"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "聚会几点开始?",
|
||||||
|
"options": [
|
||||||
|
"下午三点",
|
||||||
|
"上午三点",
|
||||||
|
"晚上七点"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:约见面时间",
|
||||||
|
"text": "Ben: Are you free on Sunday? Let's meet.\nMia: Sorry, I'm busy on Sunday. My cousin's wedding is that day! How about Monday?\nBen: Monday is good. What time? Do you remember the cafe near the station?\nMia: Yes. Let's meet at ten in the morning. Don't forget!\nBen: I won't. Oh, can we change the time to eleven?\nMia: Sure. Wait, next Monday is a holiday, a big festival. Maybe the cafe is closed.\nBen: Good point. Let me check the calendar. It's open. See you at eleven then.\nMia: Great. I hope the weather is nice. Do you want lunch after that?\nBen: Yes! And happy birthday for last month, by the way.\nMia: Oh, that was months ago! Thank you. See you Monday. Bye!\nBen: Bye, and good luck at the wedding!",
|
||||||
|
"glosses": {
|
||||||
|
"sounds": "听起来",
|
||||||
|
"point": "good point 说得对",
|
||||||
|
"won't": "不会",
|
||||||
|
"check": "查看",
|
||||||
|
"weather": "天气"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "他们最后约在星期几?",
|
||||||
|
"options": [
|
||||||
|
"星期一",
|
||||||
|
"星期天",
|
||||||
|
"星期六"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "Mia 星期天为什么没空?",
|
||||||
|
"options": [
|
||||||
|
"要去参加表亲的婚礼",
|
||||||
|
"要上班",
|
||||||
|
"要考试"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "appointment",
|
||||||
|
"reason": "A2;A1 先用 meet 表达约见"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "fifth",
|
||||||
|
"reason": "序数词 fourth 以后不在 A1 表里;日期先用数字读法(May 5)"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,960 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U14",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "在机场",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "值机、问登机口、回答入境的简单问题",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "61",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "只用 I'm staying / I'm visiting 说行程"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "241",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "CEFR-J 未标级别,Which gate 是机场里必需的问句"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "245",
|
||||||
|
"use": "active"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U14-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Here is my passport.",
|
||||||
|
"zh": "这是我的护照。",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "passport 在 CEFR-J 为 B1,但出入境时必须会说",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"my passport"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Here is my passport and ticket.",
|
||||||
|
"zh": "这是我的护照和机票。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "工作人员要看证件,把护照递给他。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "flight",
|
||||||
|
"zh": "航班",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "flight 为 A2,是机场里最常听到的词",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"flight",
|
||||||
|
"flights"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "My flight is at ten.",
|
||||||
|
"zh": "我的航班是十点的。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你的航班几点。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "plane",
|
||||||
|
"zh": "飞机",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"plane",
|
||||||
|
"planes"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The plane is late.",
|
||||||
|
"zh": "飞机晚点了。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说飞机晚点了。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Which gate is it?",
|
||||||
|
"zh": "在几号登机口?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"which gate"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Which gate is my flight?",
|
||||||
|
"zh": "我的航班在几号登机口?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问你的航班在哪个登机口。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I have one bag to check.",
|
||||||
|
"zh": "我有一件行李要托运。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"bag to check",
|
||||||
|
"bags to check"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I have two bags to check.",
|
||||||
|
"zh": "我有两件行李要托运。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你有一件行李要托运。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "A window seat, please.",
|
||||||
|
"zh": "请给我靠窗的座位。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"window seat",
|
||||||
|
"aisle seat"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Can I have an aisle seat?",
|
||||||
|
"zh": "可以给我靠过道的座位吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "要一个靠窗的座位。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Is it on time?",
|
||||||
|
"zh": "准点吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"on time"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Is the plane on time?",
|
||||||
|
"zh": "飞机准点吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问航班是否准点。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I'm here on holiday.",
|
||||||
|
"zh": "我来度假。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"on holiday",
|
||||||
|
"on vacation",
|
||||||
|
"on business"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'm here on business.",
|
||||||
|
"zh": "我来出差。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "入境时说你来度假。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-P07",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I'm visiting friends.",
|
||||||
|
"zh": "我来看朋友。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"visiting"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'm visiting my sister.",
|
||||||
|
"zh": "我来看我姐姐。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你来看朋友。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-P08",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I'm staying for two weeks.",
|
||||||
|
"zh": "我待两周。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"staying for"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'm staying for five days.",
|
||||||
|
"zh": "我待五天。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你要待一周。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-P09",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I'm staying at a hotel.",
|
||||||
|
"zh": "我住酒店。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"staying at",
|
||||||
|
"staying with"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'm staying with a friend.",
|
||||||
|
"zh": "我住朋友家。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你住在哪里。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-P10",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "It's my first visit.",
|
||||||
|
"zh": "这是我第一次来。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"first visit",
|
||||||
|
"first time"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "It's my first time here.",
|
||||||
|
"zh": "这是我第一次来这里。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你第一次来这个国家。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-P11",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Where can I get my bags?",
|
||||||
|
"zh": "在哪里取行李?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"get my bags",
|
||||||
|
"get my bag"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Where can I get my bag?",
|
||||||
|
"zh": "我在哪里取行李?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "下飞机后问在哪里取行李。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R01",
|
||||||
|
"en": "airplane",
|
||||||
|
"zh": "飞机"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R02",
|
||||||
|
"en": "fly",
|
||||||
|
"zh": "飞;乘飞机"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R03",
|
||||||
|
"en": "jet",
|
||||||
|
"zh": "喷气式飞机"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R04",
|
||||||
|
"en": "vacation",
|
||||||
|
"zh": "假期"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R05",
|
||||||
|
"en": "foreign",
|
||||||
|
"zh": "外国的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R06",
|
||||||
|
"en": "foreigner",
|
||||||
|
"zh": "外国人"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R07",
|
||||||
|
"en": "nationality",
|
||||||
|
"zh": "国籍"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R08",
|
||||||
|
"en": "information",
|
||||||
|
"zh": "信息"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R09",
|
||||||
|
"en": "business",
|
||||||
|
"zh": "商务;生意"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R10",
|
||||||
|
"en": "camera",
|
||||||
|
"zh": "相机"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R11",
|
||||||
|
"en": "row",
|
||||||
|
"zh": "排"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R12",
|
||||||
|
"en": "wheel",
|
||||||
|
"zh": "轮子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R13",
|
||||||
|
"en": "world",
|
||||||
|
"zh": "世界"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R14",
|
||||||
|
"en": "language",
|
||||||
|
"zh": "语言"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R15",
|
||||||
|
"en": "island",
|
||||||
|
"zh": "岛"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R16",
|
||||||
|
"en": "pleasure",
|
||||||
|
"zh": "荣幸(My pleasure.)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R17",
|
||||||
|
"en": "stand",
|
||||||
|
"zh": "站立"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R18",
|
||||||
|
"en": "step",
|
||||||
|
"zh": "迈步"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R19",
|
||||||
|
"en": "push",
|
||||||
|
"zh": "推"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R20",
|
||||||
|
"en": "hold",
|
||||||
|
"zh": "拿着"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R21",
|
||||||
|
"en": "drop",
|
||||||
|
"zh": "掉下"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R22",
|
||||||
|
"en": "out",
|
||||||
|
"zh": "出去"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R23",
|
||||||
|
"en": "away",
|
||||||
|
"zh": "离开"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R24",
|
||||||
|
"en": "land",
|
||||||
|
"zh": "降落"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R25",
|
||||||
|
"en": "delay",
|
||||||
|
"zh": "延误"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R26",
|
||||||
|
"en": "screen",
|
||||||
|
"zh": "屏幕"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R27",
|
||||||
|
"en": "move",
|
||||||
|
"zh": "移动"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R28",
|
||||||
|
"en": "country",
|
||||||
|
"zh": "国家"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R29",
|
||||||
|
"en": "alone",
|
||||||
|
"zh": "单独地"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R30",
|
||||||
|
"en": "why",
|
||||||
|
"zh": "为什么"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-R31",
|
||||||
|
"en": "hand",
|
||||||
|
"zh": "手"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U14-S1",
|
||||||
|
"title": "值机",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P01",
|
||||||
|
"A1-U14-W01",
|
||||||
|
"A1-U14-P03",
|
||||||
|
"A1-U14-P04"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Good morning. Where are you flying today? To London. Here is my passport. Thank you. Do you have any bags? I have one bag to check. And a window seat, please.",
|
||||||
|
"question": "乘客要什么座位?",
|
||||||
|
"options": [
|
||||||
|
"靠窗",
|
||||||
|
"靠过道",
|
||||||
|
"最前排"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Here is my passport."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "My flight is at ten."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I have one bag to check."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "A window seat, please.",
|
||||||
|
"tip": "window seat 两个词都要重读"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Check-in information\n1. Have your passport and ticket ready.\n2. Put your bag on the machine. One bag can be 23 kilos.\n3. Take your ticket. It has your gate and seat: Row 15, seat A is a window seat.\n4. Please don't leave your bags alone! Big jets fly from here to every island and country in the world.",
|
||||||
|
"question": "靠窗座位在哪一排?",
|
||||||
|
"options": [
|
||||||
|
"第十五排",
|
||||||
|
"第二十三排",
|
||||||
|
"第一排"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:说你有一件行李要托运,再要一个靠窗座位。",
|
||||||
|
"example": "I have one bag to check. A window seat, please.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P03",
|
||||||
|
"A1-U14-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语跟值机柜台说你的航班、行李和座位要求。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-W01",
|
||||||
|
"A1-U14-P03",
|
||||||
|
"A1-U14-P04",
|
||||||
|
"A1-U14-P01"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-S2",
|
||||||
|
"title": "登机口与延误",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-W02",
|
||||||
|
"A1-U14-P02",
|
||||||
|
"A1-U14-P05"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Excuse me, which gate is it for the flight to Tokyo? Gate 12. Is it on time? No, sorry. There's a delay. The plane is late. It can leave at 3:30.",
|
||||||
|
"question": "飞机大概几点出发?",
|
||||||
|
"options": [
|
||||||
|
"三点半",
|
||||||
|
"十二点",
|
||||||
|
"两点半"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Which gate is it?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Is it on time?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "The plane is late."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I can see the planes out the window."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "The screen at the airport\nFlight 205 to Seoul: Gate 8: ON TIME\nFlight 318 to Bangkok: Gate 14: DELAY: now 16:40\nFlight 422 to Paris: Gate 3: GO TO GATE NOW\nPlease move to your gate. Please don't lose your ticket. The airplane from Singapore can't land now, so it is late.",
|
||||||
|
"question": "去曼谷的航班怎么了?",
|
||||||
|
"options": [
|
||||||
|
"延误了",
|
||||||
|
"正在登机",
|
||||||
|
"准点"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:问在几号登机口,再问准点吗。",
|
||||||
|
"example": "Which gate is it? Is it on time?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P02",
|
||||||
|
"A1-U14-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "你看不懂屏幕,用英语问工作人员你的航班在哪个登机口、准不准点。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-W01",
|
||||||
|
"A1-U14-P02",
|
||||||
|
"A1-U14-P05"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-S3",
|
||||||
|
"title": "入境与取行李",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P06",
|
||||||
|
"A1-U14-P07",
|
||||||
|
"A1-U14-P08",
|
||||||
|
"A1-U14-P09",
|
||||||
|
"A1-U14-P10",
|
||||||
|
"A1-U14-P11"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Hello. Why are you here? I'm here on holiday. I'm visiting friends. How long are you staying? I'm staying for two weeks. Where are you staying? At a hotel in the city.",
|
||||||
|
"question": "旅客待多久?",
|
||||||
|
"options": [
|
||||||
|
"两周",
|
||||||
|
"两天",
|
||||||
|
"两个月"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "I'm here on holiday."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'm visiting friends."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'm staying for two weeks."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'm staying at a hotel."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "It's my first visit."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Where can I get my bags?"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Welcome to our country: for foreign passports\nForeigners on vacation or business: stand in line and wait. Step up when the light is green.\nHold your passport in your hand. Have your address in this country ready.\nThey may ask about your trip, your nationality or your language.\nThen get your bags and move away to the door. Bags with wheels are easy to push. Please don't drop your camera or phone! Put them in your pocket.",
|
||||||
|
"question": "外国游客排队时要准备好什么?",
|
||||||
|
"options": [
|
||||||
|
"护照和在当地的地址",
|
||||||
|
"相机和手机",
|
||||||
|
"行李和推车"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写三句话:说你来度假、待两周、住酒店。",
|
||||||
|
"example": "I'm here on holiday. I'm staying for two weeks. I'm staying at a hotel.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P06",
|
||||||
|
"A1-U14-P08",
|
||||||
|
"A1-U14-P09"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "入境官问你为什么来、待多久、住哪儿,用英语回答。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P06",
|
||||||
|
"A1-U14-P07",
|
||||||
|
"A1-U14-P08",
|
||||||
|
"A1-U14-P09",
|
||||||
|
"A1-U14-P10"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U14-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "入境检查",
|
||||||
|
"learnerRole": "旅客",
|
||||||
|
"aiRole": "入境检查官",
|
||||||
|
"setting": "你刚下飞机,在入境柜台回答检查官的问题。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Good afternoon. Passport, please.",
|
||||||
|
"goal": "递上护照",
|
||||||
|
"model": "Here is my passport.",
|
||||||
|
"zh": "这是我的护照。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Thank you. Why are you visiting?",
|
||||||
|
"goal": "说你来度假,也来看朋友",
|
||||||
|
"model": "I'm here on holiday. I'm visiting friends.",
|
||||||
|
"zh": "我来度假,也来看朋友。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P06",
|
||||||
|
"A1-U14-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "How long are you staying?",
|
||||||
|
"goal": "说待两周",
|
||||||
|
"model": "I'm staying for two weeks.",
|
||||||
|
"zh": "我待两周。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "And where are you staying?",
|
||||||
|
"goal": "说住在一家酒店",
|
||||||
|
"model": "I'm staying at a hotel in the city.",
|
||||||
|
"zh": "我住在市里的一家酒店。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P09"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Is this your first time in our country?",
|
||||||
|
"goal": "说是第一次来,再问在哪取行李",
|
||||||
|
"model": "Yes, it's my first visit. Where can I get my bags?",
|
||||||
|
"zh": "是的,第一次来。我在哪里取行李?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P10",
|
||||||
|
"A1-U14-P11"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "值机柜台",
|
||||||
|
"learnerRole": "乘客",
|
||||||
|
"aiRole": "值机员",
|
||||||
|
"setting": "你在机场值机柜台办理登机手续。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Good morning. Where are you flying today?",
|
||||||
|
"goal": "说去东京,递上护照",
|
||||||
|
"model": "To Tokyo. Here is my passport.",
|
||||||
|
"zh": "去东京。这是我的护照。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Thank you. Do you have any bags?",
|
||||||
|
"goal": "说有一件行李要托运",
|
||||||
|
"model": "Yes, I have one bag to check.",
|
||||||
|
"zh": "是的,我有一件行李要托运。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK. Put it here, please. A window or an aisle seat?",
|
||||||
|
"goal": "要靠窗的座位",
|
||||||
|
"model": "A window seat, please.",
|
||||||
|
"zh": "请给我靠窗的座位。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Here is your ticket.",
|
||||||
|
"goal": "问在几号登机口",
|
||||||
|
"model": "Thank you. Which gate is it?",
|
||||||
|
"zh": "谢谢。在几号登机口?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Gate 22. Your flight leaves at 11:30.",
|
||||||
|
"goal": "问航班准不准点",
|
||||||
|
"model": "Is my flight on time?",
|
||||||
|
"zh": "我的航班准点吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-W01",
|
||||||
|
"A1-U14-P05"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "航班延误",
|
||||||
|
"learnerRole": "乘客",
|
||||||
|
"aiRole": "登机口工作人员",
|
||||||
|
"setting": "你在登机口等了很久,飞机还没来。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello. Can I help you?",
|
||||||
|
"goal": "问航班准不准点",
|
||||||
|
"model": "Is my flight on time?",
|
||||||
|
"zh": "我的航班准点吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-W01",
|
||||||
|
"A1-U14-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sorry, there's a delay. The plane is late. It can't land now.",
|
||||||
|
"goal": "问飞机几点到",
|
||||||
|
"model": "What time is the plane here?",
|
||||||
|
"zh": "飞机几点到?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-W02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "At about four. Are you OK?",
|
||||||
|
"goal": "说你在酒店住到明天,时间没问题",
|
||||||
|
"model": "Yes. I'm staying at a hotel until tomorrow.",
|
||||||
|
"zh": "没事。我在酒店住到明天。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P09"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Good. Is this your first visit?",
|
||||||
|
"goal": "说是第一次来,来看朋友",
|
||||||
|
"model": "Yes, it's my first visit. I'm visiting friends.",
|
||||||
|
"zh": "是的,第一次来。我来看朋友。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P10",
|
||||||
|
"A1-U14-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "My pleasure. Please wait here.",
|
||||||
|
"goal": "问是不是这个登机口",
|
||||||
|
"model": "OK. Which gate is it, again?",
|
||||||
|
"zh": "好的。再问一下,是哪个登机口?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P02"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U14-T1",
|
||||||
|
"sceneId": "A1-U14-C1",
|
||||||
|
"goal": "回答入境检查官关于来意、停留和住处的问题",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P01",
|
||||||
|
"A1-U14-P06",
|
||||||
|
"A1-U14-P07",
|
||||||
|
"A1-U14-P08",
|
||||||
|
"A1-U14-P09",
|
||||||
|
"A1-U14-P10",
|
||||||
|
"A1-U14-P11"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"来意",
|
||||||
|
"停留时间",
|
||||||
|
"住处"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-T2",
|
||||||
|
"sceneId": "A1-U14-C2",
|
||||||
|
"goal": "办理值机:行李、座位和登机口",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-P01",
|
||||||
|
"A1-U14-P03",
|
||||||
|
"A1-U14-P04",
|
||||||
|
"A1-U14-P02",
|
||||||
|
"A1-U14-W01",
|
||||||
|
"A1-U14-P05"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"行李",
|
||||||
|
"座位",
|
||||||
|
"登机口"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-T3",
|
||||||
|
"sceneId": "A1-U14-C3",
|
||||||
|
"goal": "航班延误时向工作人员问清楚情况",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U14-W01",
|
||||||
|
"A1-U14-P05",
|
||||||
|
"A1-U14-W02",
|
||||||
|
"A1-U14-P09",
|
||||||
|
"A1-U14-P10",
|
||||||
|
"A1-U14-P07",
|
||||||
|
"A1-U14-P02"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"是否准点",
|
||||||
|
"到达时间"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U14-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "机场登机广播",
|
||||||
|
"text": "Good morning. This is a message for flight CA108 to London. Please go to gate twelve now. Have your passport and boarding pass ready, in your hand. Your seat is in row twenty. The flight is on time; it will not be delayed. It's a long flight over the sea to a foreign country, about ten hours. Please do not stand or move in the plane when we fly, land or when the wheels are down. Turn off your phone and look at the screen for information. Please do not push. Have a good vacation, and welcome to the world of flying!",
|
||||||
|
"glosses": {
|
||||||
|
"pass": "boarding pass 登机牌",
|
||||||
|
"message": "留言,信息",
|
||||||
|
"boarding": "登机",
|
||||||
|
"delayed": "延误的",
|
||||||
|
"flying": "飞行",
|
||||||
|
"off": "关掉",
|
||||||
|
"sea": "大海"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "这段广播主要通知什么?",
|
||||||
|
"options": [
|
||||||
|
"请乘客去登机口登机",
|
||||||
|
"飞机取消了",
|
||||||
|
"改坐火车"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "这个航班去哪里?",
|
||||||
|
"options": [
|
||||||
|
"伦敦",
|
||||||
|
"东京",
|
||||||
|
"北京"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:入境问答",
|
||||||
|
"text": "Officer: Passport, please. What's your nationality, and why are you here?\nBen: Here you are. I'm here on holiday, for a vacation. It's my first visit to your country.\nOfficer: Are you traveling alone or on business?\nBen: Alone, not for business. I'm visiting friends and I want to see the world.\nOfficer: How long are you staying?\nBen: Two weeks. I'll stay at a hotel near the city center, and then fly to an island for some days.\nOfficer: Do you speak our language?\nBen: A little. Please give me some information if I need help.\nOfficer: Of course. Do you have a camera in your bag?\nBen: Yes, one camera. Please don't drop it!\nOfficer: No, I won't. Welcome, and enjoy your holiday.\nBen: Thank you. My pleasure!",
|
||||||
|
"glosses": {
|
||||||
|
"reason": "原因",
|
||||||
|
"officer": "(海关)官员",
|
||||||
|
"course": "of course 当然",
|
||||||
|
"won't": "不会",
|
||||||
|
"give": "给"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "Ben 来做什么?",
|
||||||
|
"options": [
|
||||||
|
"度假旅游",
|
||||||
|
"工作出差",
|
||||||
|
"上学"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "他一个人来还是出差?",
|
||||||
|
"options": [
|
||||||
|
"一个人来",
|
||||||
|
"出差",
|
||||||
|
"和家人来"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "customs",
|
||||||
|
"reason": "B1;A1 只练入境问答"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "luggage",
|
||||||
|
"reason": "B1;A1 用 bag / bags 表达行李"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,917 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U15",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "入住酒店",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "说明预订信息、办理入住",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "123",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "239",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "146",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "21",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "22",
|
||||||
|
"use": "receptive"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U15-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I have a reservation.",
|
||||||
|
"zh": "我有预订。",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "reservation 为 B1,但入住酒店第一句就要用",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"have a reservation"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Hello, I have a reservation for tonight.",
|
||||||
|
"zh": "你好,我预订了今晚的房间。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "到了前台,说你有预订。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "It's under the name Chen.",
|
||||||
|
"zh": "预订名字是陈。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"under the name"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The reservation is under the name Wang.",
|
||||||
|
"zh": "预订用的是王这个名字。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉前台预订用的名字。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "for three nights",
|
||||||
|
"zh": "住三晚",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"night",
|
||||||
|
"nights"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'm staying for one night.",
|
||||||
|
"zh": "我住一晚。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你要住两晚。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Can I check in now?",
|
||||||
|
"zh": "我现在可以入住吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"check in"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "What time can I check in?",
|
||||||
|
"zh": "我几点可以入住?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问现在能不能入住。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "What time is check-out?",
|
||||||
|
"zh": "几点退房?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"check-out",
|
||||||
|
"check out"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Can I check out late?",
|
||||||
|
"zh": "我可以晚点退房吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问几点退房。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Do I fill in this form?",
|
||||||
|
"zh": "我要填这张表吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"fill in"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Please fill in this form.",
|
||||||
|
"zh": "请填一下这张表。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问要不要填表。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-P07",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Here is your key.",
|
||||||
|
"zh": "这是您的钥匙。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"key",
|
||||||
|
"keys"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Can I have two keys?",
|
||||||
|
"zh": "可以给我两把钥匙吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "要两把房间钥匙。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-P08",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "What's the Wi-Fi password?",
|
||||||
|
"zh": "Wi-Fi 密码是多少?",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "password 为 B1,住酒店时几乎每次都要问",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"password"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "What's the password, please?",
|
||||||
|
"zh": "请问密码是多少?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问 Wi-Fi 密码。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-P09",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "What time is breakfast?",
|
||||||
|
"zh": "早饭几点?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"time is breakfast"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "What time is breakfast tomorrow?",
|
||||||
|
"zh": "明天早饭几点?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问早饭时间。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-P10",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Where is the elevator?",
|
||||||
|
"zh": "电梯在哪里?",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "elevator 为 A2,酒店里找路必需",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"elevator"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The elevator is next to the bar.",
|
||||||
|
"zh": "电梯在酒吧旁边。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问电梯在哪里。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-P11",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Can I have a quiet room?",
|
||||||
|
"zh": "能给我一间安静的房间吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"quiet room"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Can I have a quiet room with a view?",
|
||||||
|
"zh": "能给我一间安静、有景色的房间吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "要一间安静的房间。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-P12",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Can you keep my bags?",
|
||||||
|
"zh": "能帮我寄存行李吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"keep my bags",
|
||||||
|
"keep my bag"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Can you keep my bags until three?",
|
||||||
|
"zh": "能帮我寄存行李到三点吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "退房后请前台寄存行李。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-P13",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Can I pay later?",
|
||||||
|
"zh": "我可以晚点付钱吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"pay later"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Can I pay later, at check-out?",
|
||||||
|
"zh": "我可以退房时再付吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问能不能晚点付钱。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R01",
|
||||||
|
"en": "guest",
|
||||||
|
"zh": "客人"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R02",
|
||||||
|
"en": "code",
|
||||||
|
"zh": "代码;密码"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R03",
|
||||||
|
"en": "swimming pool",
|
||||||
|
"zh": "游泳池"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R04",
|
||||||
|
"en": "bath",
|
||||||
|
"zh": "浴缸;洗澡"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R05",
|
||||||
|
"en": "hall",
|
||||||
|
"zh": "大厅"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R06",
|
||||||
|
"en": "clock",
|
||||||
|
"zh": "钟"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R07",
|
||||||
|
"en": "sea",
|
||||||
|
"zh": "大海"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R08",
|
||||||
|
"en": "beach",
|
||||||
|
"zh": "海滩"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R09",
|
||||||
|
"en": "tower",
|
||||||
|
"zh": "塔"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R10",
|
||||||
|
"en": "garbage",
|
||||||
|
"zh": "垃圾"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R11",
|
||||||
|
"en": "note",
|
||||||
|
"zh": "便条"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R12",
|
||||||
|
"en": "copy",
|
||||||
|
"zh": "复印件"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R13",
|
||||||
|
"en": "rule",
|
||||||
|
"zh": "规定"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R14",
|
||||||
|
"en": "smoking",
|
||||||
|
"zh": "吸烟"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R15",
|
||||||
|
"en": "bar",
|
||||||
|
"zh": "酒吧"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R16",
|
||||||
|
"en": "receptionist",
|
||||||
|
"zh": "前台接待员"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R17",
|
||||||
|
"en": "double",
|
||||||
|
"zh": "双人的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R18",
|
||||||
|
"en": "view",
|
||||||
|
"zh": "景色"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R19",
|
||||||
|
"en": "balcony",
|
||||||
|
"zh": "阳台"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R20",
|
||||||
|
"en": "surname",
|
||||||
|
"zh": "姓"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R21",
|
||||||
|
"en": "ID",
|
||||||
|
"zh": "身份证件"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R22",
|
||||||
|
"en": "high",
|
||||||
|
"zh": "高的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R23",
|
||||||
|
"en": "star",
|
||||||
|
"zh": "星级;星星"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R24",
|
||||||
|
"en": "hill",
|
||||||
|
"zh": "小山"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-R25",
|
||||||
|
"en": "own",
|
||||||
|
"zh": "自己的"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U15-S1",
|
||||||
|
"title": "办理入住",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P01",
|
||||||
|
"A1-U15-P02",
|
||||||
|
"A1-U15-P03",
|
||||||
|
"A1-U15-P04",
|
||||||
|
"A1-U15-P06"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Good afternoon. I have a reservation. It's under the name Chen. For three nights. Yes, a double room. Can I check in now? Sure. Please fill in this form.",
|
||||||
|
"question": "客人住几晚?",
|
||||||
|
"options": [
|
||||||
|
"三晚",
|
||||||
|
"两晚",
|
||||||
|
"一晚"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "I have a reservation.",
|
||||||
|
"tip": "reservation 重音在第三个音节:res-er-VA-tion"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "It's under the name Chen."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'm staying for three nights."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Can I check in now?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Do I fill in this form?"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Guest form\nSurname: ______ First name: ______\nNationality: ______\nID or passport number: ______\nRoom: single / double\nNights: ______\nEach guest must fill in their own form. If you have a child, write his or her name below yours. Please show us a copy of your passport.",
|
||||||
|
"question": "带孩子的客人要怎么填?",
|
||||||
|
"options": [
|
||||||
|
"把孩子的名字写在自己下面",
|
||||||
|
"给孩子另填一张",
|
||||||
|
"不用写孩子"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:说你有预订,名字是什么。",
|
||||||
|
"example": "I have a reservation. It's under the name Chen.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P01",
|
||||||
|
"A1-U15-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语跟前台说你的预订、住几晚,并问现在能不能入住。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P01",
|
||||||
|
"A1-U15-P02",
|
||||||
|
"A1-U15-P03",
|
||||||
|
"A1-U15-P04"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-S2",
|
||||||
|
"title": "房间和钥匙",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P07",
|
||||||
|
"A1-U15-P08",
|
||||||
|
"A1-U15-P09",
|
||||||
|
"A1-U15-P10"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Here is your key. Your room is 1208, on floor 12. The elevator is over there. Breakfast is from seven to ten. And the Wi-Fi password is on the card.",
|
||||||
|
"question": "早饭几点开始?",
|
||||||
|
"options": [
|
||||||
|
"七点",
|
||||||
|
"十点",
|
||||||
|
"十二点"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Here is your key."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "What's the Wi-Fi password?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "What time is breakfast?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Where is the elevator?",
|
||||||
|
"tip": "elevator 重音在第一个音节:EL-e-va-tor"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Welcome to Sea View Hotel: four stars\nBreakfast: 7:00-10:00, in the hall on the first floor.\nSwimming pool: on the high floor above the bar. It's open to everyone until 9 pm.\nWi-Fi: the password is on your key card. The code for the door is 4471.\nRules: no smoking inside. Please put garbage in the bag beside the door. The clock in the hall is always right.",
|
||||||
|
"question": "游泳池在哪里?",
|
||||||
|
"options": [
|
||||||
|
"酒吧楼上的高层",
|
||||||
|
"一楼大厅",
|
||||||
|
"前台旁边"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:问 Wi-Fi 密码,再问早饭几点。",
|
||||||
|
"example": "What's the Wi-Fi password? What time is breakfast?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P08",
|
||||||
|
"A1-U15-P09"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "刚拿到钥匙,用英语问电梯在哪、早饭几点。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P07",
|
||||||
|
"A1-U15-P10",
|
||||||
|
"A1-U15-P09"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-S3",
|
||||||
|
"title": "特别需求",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P05",
|
||||||
|
"A1-U15-P11",
|
||||||
|
"A1-U15-P12",
|
||||||
|
"A1-U15-P13"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Excuse me, what time is check-out? Twelve. Can you keep my bags? My flight is at six. Yes. And can I pay later? Yes, at check-out.",
|
||||||
|
"question": "客人为什么要寄存行李?",
|
||||||
|
"options": [
|
||||||
|
"航班在六点",
|
||||||
|
"房间太吵",
|
||||||
|
"他要去海滩"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "What time is check-out?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Can I have a quiet room?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Can you keep my bags?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Can I pay later?"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "A note from the receptionist\nDear guest,\nYour room has a bath and a balcony with a view of the sea and the beach. From there, you can see the old tower on the hill. Someone in the room next to yours is not quiet, so we can move you to a quiet room. Check-out is at 11:00. We can keep your bags after that.",
|
||||||
|
"question": "酒店可以帮客人做什么?",
|
||||||
|
"options": [
|
||||||
|
"换到安静的房间",
|
||||||
|
"送去海滩",
|
||||||
|
"免费早饭"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:问几点退房,再请前台寄存行李。",
|
||||||
|
"example": "What time is check-out? Can you keep my bags?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P05",
|
||||||
|
"A1-U15-P12"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "你的航班很晚,用英语问退房时间并请酒店寄存行李。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P05",
|
||||||
|
"A1-U15-P12",
|
||||||
|
"A1-U15-P13"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U15-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "前台入住",
|
||||||
|
"learnerRole": "客人",
|
||||||
|
"aiRole": "前台接待员",
|
||||||
|
"setting": "你到达酒店前台,办理入住。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Good evening. Welcome to Sea View Hotel.",
|
||||||
|
"goal": "说你有预订",
|
||||||
|
"model": "Hi. I have a reservation.",
|
||||||
|
"zh": "你好,我有预订。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "What's the name, please?",
|
||||||
|
"goal": "说预订名字是陈",
|
||||||
|
"model": "It's under the name Chen.",
|
||||||
|
"zh": "预订名字是陈。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, Mr Chen. A double room for three nights. Please fill in this form.",
|
||||||
|
"goal": "确认后问现在能不能入住",
|
||||||
|
"model": "OK. Can I check in now?",
|
||||||
|
"zh": "好的。我现在可以入住吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, you can. Here is your key. Your room is on floor 8.",
|
||||||
|
"goal": "问电梯在哪里",
|
||||||
|
"model": "Thank you. Where is the elevator?",
|
||||||
|
"zh": "谢谢。电梯在哪里?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "It's over there, beside the bar.",
|
||||||
|
"goal": "问 Wi-Fi 密码和早饭时间",
|
||||||
|
"model": "What's the Wi-Fi password? And what time is breakfast?",
|
||||||
|
"zh": "Wi-Fi 密码是多少?早饭几点?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P08",
|
||||||
|
"A1-U15-P09"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "提前到达",
|
||||||
|
"learnerRole": "客人",
|
||||||
|
"aiRole": "前台接待员",
|
||||||
|
"setting": "你早上九点就到了酒店,但入住时间是下午两点。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Good morning! How can I help you?",
|
||||||
|
"goal": "说有预订,问现在能否入住",
|
||||||
|
"model": "I have a reservation. Can I check in now?",
|
||||||
|
"zh": "我有预订。现在可以入住吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P01",
|
||||||
|
"A1-U15-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sorry, check-in is at two pm.",
|
||||||
|
"goal": "请前台先寄存行李",
|
||||||
|
"model": "OK. Can you keep my bags?",
|
||||||
|
"zh": "好的。能帮我寄存行李吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P12"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. What's your name?",
|
||||||
|
"goal": "说名字,住两晚",
|
||||||
|
"model": "It's under the name Li. For two nights.",
|
||||||
|
"zh": "名字是李。住两晚。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P02",
|
||||||
|
"A1-U15-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Thank you. Do you want to pay now?",
|
||||||
|
"goal": "问能不能晚点付",
|
||||||
|
"model": "Can I pay later?",
|
||||||
|
"zh": "我可以晚点付吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P13"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. Do you have any questions?",
|
||||||
|
"goal": "问能不能要一间安静的房间",
|
||||||
|
"model": "Yes. Can I have a quiet room?",
|
||||||
|
"zh": "有。能给我一间安静的房间吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P11"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "退房前",
|
||||||
|
"learnerRole": "客人",
|
||||||
|
"aiRole": "前台接待员",
|
||||||
|
"setting": "你明天要走,来前台问退房的事。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello. What can I do for you?",
|
||||||
|
"goal": "问几点退房",
|
||||||
|
"model": "What time is check-out?",
|
||||||
|
"zh": "几点退房?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "It's at eleven.",
|
||||||
|
"goal": "说航班很晚,请寄存行李",
|
||||||
|
"model": "My flight is late. Can you keep my bags?",
|
||||||
|
"zh": "我的航班很晚,能帮我寄存行李吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P12"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, no problem. Here is a card for your bags.",
|
||||||
|
"goal": "问要不要填表",
|
||||||
|
"model": "Thank you. Do I fill in this form?",
|
||||||
|
"zh": "谢谢。我要填这张表吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, please. Just your name and room.",
|
||||||
|
"goal": "问还要不要钥匙",
|
||||||
|
"model": "OK. Here is my key. Do you want it now?",
|
||||||
|
"zh": "好的,这是我的钥匙。你现在要吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Tomorrow is OK. Have a good night!",
|
||||||
|
"goal": "问早饭几点",
|
||||||
|
"model": "Thanks. What time is breakfast?",
|
||||||
|
"zh": "谢谢。早饭几点?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P09"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U15-T1",
|
||||||
|
"sceneId": "A1-U15-C1",
|
||||||
|
"goal": "在前台完成入住并问清楚房间信息",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P01",
|
||||||
|
"A1-U15-P02",
|
||||||
|
"A1-U15-P04",
|
||||||
|
"A1-U15-P10",
|
||||||
|
"A1-U15-P08",
|
||||||
|
"A1-U15-P09",
|
||||||
|
"A1-U15-P07",
|
||||||
|
"A1-U15-P03"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"预订",
|
||||||
|
"钥匙",
|
||||||
|
"密码",
|
||||||
|
"早饭"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-T2",
|
||||||
|
"sceneId": "A1-U15-C2",
|
||||||
|
"goal": "提前到达时安排寄存和付款",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P01",
|
||||||
|
"A1-U15-P04",
|
||||||
|
"A1-U15-P12",
|
||||||
|
"A1-U15-P02",
|
||||||
|
"A1-U15-P03",
|
||||||
|
"A1-U15-P13",
|
||||||
|
"A1-U15-P11"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"入住时间",
|
||||||
|
"寄存",
|
||||||
|
"付款"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-T3",
|
||||||
|
"sceneId": "A1-U15-C3",
|
||||||
|
"goal": "退房前问清时间并寄存行李",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U15-P05",
|
||||||
|
"A1-U15-P12",
|
||||||
|
"A1-U15-P06",
|
||||||
|
"A1-U15-P07",
|
||||||
|
"A1-U15-P09"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"退房",
|
||||||
|
"行李"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U15-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "酒店前台接待",
|
||||||
|
"text": "Good evening, and welcome to our hotel — it's a high, five-star tower by the sea. Do you have a reservation? Can I have your surname and your ID? Your room is a double room on the fifth floor, with a balcony and a nice view of the beach. The elevator is in the hall, near the big clock. Breakfast is from seven to nine. There is a swimming pool, a bar, and a small garden on the hill. One rule: no smoking in the room, please. The Wi-Fi code is on this note. Here is your key. Check-out is at twelve. Enjoy your stay!",
|
||||||
|
"glosses": {
|
||||||
|
"fifth": "第五",
|
||||||
|
"desk": "桌子;front desk 前台",
|
||||||
|
"five-star": "五星级",
|
||||||
|
"key": "钥匙"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "这段话主要在做什么?",
|
||||||
|
"options": [
|
||||||
|
"帮客人办理入住",
|
||||||
|
"点晚餐",
|
||||||
|
"问路"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "早餐几点供应?",
|
||||||
|
"options": [
|
||||||
|
"早上七点到九点",
|
||||||
|
"中午十二点",
|
||||||
|
"晚上七点"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:办入住",
|
||||||
|
"text": "Guest: Hi, I have a reservation. My surname is Chen, for three nights.\nReceptionist: Let me check. Can I see your ID, please? Yes, one double room for three nights.\nGuest: Can I check in now? Can I have a quiet room with a view of the sea?\nReceptionist: Of course. Room 502 has a balcony and a view of the beach and the tower.\nGuest: Lovely. What's the Wi-Fi code?\nReceptionist: It's on this note. Here is a copy of the hotel rules; there is no smoking inside.\nGuest: OK. Is there a swimming pool?\nReceptionist: Yes, near the bar. What time is check-out?\nGuest: At twelve. Can you keep my bags after that? And where do I put the garbage?\nReceptionist: I'll keep your bags in the hall. The garbage goes in the box by the door.\nGuest: Great, thank you!",
|
||||||
|
"glosses": {
|
||||||
|
"course": "of course 当然",
|
||||||
|
"inside": "里面",
|
||||||
|
"key": "钥匙"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "这位客人订了几晚?",
|
||||||
|
"options": [
|
||||||
|
"三晚",
|
||||||
|
"两晚",
|
||||||
|
"一晚"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "客人想要什么样的房间?",
|
||||||
|
"options": [
|
||||||
|
"安静、能看海的房间",
|
||||||
|
"最便宜的房间",
|
||||||
|
"楼层最低的房间"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "reception",
|
||||||
|
"reason": "B1;A1 用 front desk 以外的说法,直接对 receptionist 说话"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "deposit",
|
||||||
|
"reason": "B1;押金留到 A2 酒店问题单元"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,954 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U16",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "天气与穿着",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "问天气、说该穿什么",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "239",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "61",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "用 It's raining 描述眼前的天气"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "69",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "只用 Is it going to rain? 问天气预报,这是出门前必问的一句"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "117",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "161",
|
||||||
|
"use": "receptive"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U16-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "What's the weather like today?",
|
||||||
|
"zh": "今天天气怎么样?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"what's the weather like",
|
||||||
|
"what is the weather like"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "What's the weather like in Tokyo?",
|
||||||
|
"zh": "东京天气怎么样?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问朋友今天天气怎么样。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "It's sunny.",
|
||||||
|
"zh": "天气晴朗。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"sunny",
|
||||||
|
"cloudy",
|
||||||
|
"rainy",
|
||||||
|
"snowy"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "It's cloudy and cool today.",
|
||||||
|
"zh": "今天多云,挺凉快。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说今天是晴天。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "It's raining.",
|
||||||
|
"zh": "正在下雨。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"raining",
|
||||||
|
"snowing"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "It's raining outside.",
|
||||||
|
"zh": "外面在下雨。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说外面正在下雨。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "warm",
|
||||||
|
"zh": "暖和的",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"warm"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "It's warm in spring.",
|
||||||
|
"zh": "春天很暖和。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说今天很暖和。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "cool",
|
||||||
|
"zh": "凉快的",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"cool"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The evening is cool.",
|
||||||
|
"zh": "晚上很凉快。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说早上挺凉快。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "It's very cold outside.",
|
||||||
|
"zh": "外面很冷。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"cold outside",
|
||||||
|
"hot outside"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "It's very hot outside today.",
|
||||||
|
"zh": "今天外面很热。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说外面很热。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "What's the temperature?",
|
||||||
|
"zh": "气温多少度?",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "temperature 为 A2,旅行前查天气时必需",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"temperature"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "What's the temperature in London?",
|
||||||
|
"zh": "伦敦气温多少度?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问现在气温多少度。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Take an umbrella.",
|
||||||
|
"zh": "带把伞。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"take an umbrella",
|
||||||
|
"take your umbrella"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "It's raining. Take your umbrella.",
|
||||||
|
"zh": "下雨了,带上你的伞。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "提醒朋友带伞。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-P07",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Put on your coat.",
|
||||||
|
"zh": "穿上外套。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"put on"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Put on your hat. It's cold.",
|
||||||
|
"zh": "戴上帽子,很冷。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "提醒孩子穿上外套。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-P08",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Take off your jacket.",
|
||||||
|
"zh": "把夹克脱了吧。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"take off"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "It's hot. Take off your coat.",
|
||||||
|
"zh": "很热,把外套脱了吧。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "屋里很热,让朋友脱掉外套。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-P09",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I like summer.",
|
||||||
|
"zh": "我喜欢夏天。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"summer",
|
||||||
|
"winter",
|
||||||
|
"spring",
|
||||||
|
"autumn"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I don't like winter.",
|
||||||
|
"zh": "我不喜欢冬天。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你最喜欢哪个季节。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-P10",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Is it going to rain?",
|
||||||
|
"zh": "会下雨吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"going to rain",
|
||||||
|
"going to snow"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Is it going to snow tomorrow?",
|
||||||
|
"zh": "明天会下雪吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "出门前问会不会下雨。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-P11",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "The wind is strong.",
|
||||||
|
"zh": "风很大。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"wind"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The wind is strong today. Take a coat.",
|
||||||
|
"zh": "今天风很大,带件外套。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说今天风很大。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R01",
|
||||||
|
"en": "rainy",
|
||||||
|
"zh": "下雨的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R02",
|
||||||
|
"en": "cloudy",
|
||||||
|
"zh": "多云的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R03",
|
||||||
|
"en": "snowy",
|
||||||
|
"zh": "下雪的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R04",
|
||||||
|
"en": "foggy",
|
||||||
|
"zh": "有雾的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R05",
|
||||||
|
"en": "snow",
|
||||||
|
"zh": "雪;下雪"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R06",
|
||||||
|
"en": "cloud",
|
||||||
|
"zh": "云"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R07",
|
||||||
|
"en": "sun",
|
||||||
|
"zh": "太阳"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R08",
|
||||||
|
"en": "sunshine",
|
||||||
|
"zh": "阳光"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R09",
|
||||||
|
"en": "sky",
|
||||||
|
"zh": "天空"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R10",
|
||||||
|
"en": "moon",
|
||||||
|
"zh": "月亮"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R11",
|
||||||
|
"en": "dry",
|
||||||
|
"zh": "干燥的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R12",
|
||||||
|
"en": "wet",
|
||||||
|
"zh": "湿的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R13",
|
||||||
|
"en": "storm",
|
||||||
|
"zh": "暴风雨"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R14",
|
||||||
|
"en": "degree",
|
||||||
|
"zh": "度"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R15",
|
||||||
|
"en": "windy",
|
||||||
|
"zh": "刮风的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R16",
|
||||||
|
"en": "spring",
|
||||||
|
"zh": "春天"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R17",
|
||||||
|
"en": "autumn",
|
||||||
|
"zh": "秋天"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R18",
|
||||||
|
"en": "winter",
|
||||||
|
"zh": "冬天"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R19",
|
||||||
|
"en": "blow",
|
||||||
|
"zh": "吹"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R20",
|
||||||
|
"en": "scarf",
|
||||||
|
"zh": "围巾"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R21",
|
||||||
|
"en": "sunglasses",
|
||||||
|
"zh": "墨镜"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R22",
|
||||||
|
"en": "tree",
|
||||||
|
"zh": "树"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R23",
|
||||||
|
"en": "flower",
|
||||||
|
"zh": "花"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R24",
|
||||||
|
"en": "bird",
|
||||||
|
"zh": "鸟"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R25",
|
||||||
|
"en": "grow",
|
||||||
|
"zh": "生长"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R26",
|
||||||
|
"en": "jump",
|
||||||
|
"zh": "跳"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R27",
|
||||||
|
"en": "terrible",
|
||||||
|
"zh": "糟糕的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R28",
|
||||||
|
"en": "wonderful",
|
||||||
|
"zh": "极好的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R29",
|
||||||
|
"en": "bright",
|
||||||
|
"zh": "明亮的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R30",
|
||||||
|
"en": "idea",
|
||||||
|
"zh": "主意"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-R31",
|
||||||
|
"en": "really",
|
||||||
|
"zh": "真的"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U16-S1",
|
||||||
|
"title": "今天天气怎么样",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P01",
|
||||||
|
"A1-U16-P02",
|
||||||
|
"A1-U16-P03",
|
||||||
|
"A1-U16-P05",
|
||||||
|
"A1-U16-P04"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "What's the weather like today? It's sunny in the morning, but it's cloudy in the afternoon. What's the temperature? Twenty-five degrees.",
|
||||||
|
"question": "下午天气怎么样?",
|
||||||
|
"options": [
|
||||||
|
"多云",
|
||||||
|
"晴天",
|
||||||
|
"下雨"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "What's the weather like today?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "It's sunny."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "It's raining.",
|
||||||
|
"tip": "raining 的 ai 读 /eɪ/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "What's the temperature?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "It's very cold outside."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Weather in five cities\nLondon: rainy, 12 degrees\nBeijing: sunny and dry, 30 degrees\nTokyo: cloudy and windy, 18 degrees\nSydney: foggy in the morning, then sunshine, 22 degrees\nSeoul: snowy, -3 degrees. There is ice on the roads!",
|
||||||
|
"question": "哪个城市在下雪?",
|
||||||
|
"options": [
|
||||||
|
"首尔",
|
||||||
|
"伦敦",
|
||||||
|
"东京"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:问今天天气怎么样,再说外面在下雨。",
|
||||||
|
"example": "What's the weather like today? It's raining.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P01",
|
||||||
|
"A1-U16-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "看看窗外,用英语说说今天的天气和气温。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P02",
|
||||||
|
"A1-U16-P04",
|
||||||
|
"A1-U16-P05"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-S2",
|
||||||
|
"title": "出门穿什么",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-W01",
|
||||||
|
"A1-U16-W02",
|
||||||
|
"A1-U16-P06",
|
||||||
|
"A1-U16-P07",
|
||||||
|
"A1-U16-P08",
|
||||||
|
"A1-U16-P11"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Is it cold? No, it's warm today. Take off your jacket. But take an umbrella. It's cloudy. And in the evening it's cool, so put on a coat.",
|
||||||
|
"question": "晚上天气怎么样?",
|
||||||
|
"options": [
|
||||||
|
"凉快",
|
||||||
|
"暖和",
|
||||||
|
"很热"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "It's warm today."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "The evening is cool."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Take an umbrella."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Put on your coat."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Take off your jacket."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "The wind is strong."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "What to wear\nSunny and hot: wear shorts, a T-shirt and sunglasses. Take water too.\nRainy and wet: take an umbrella and wear a coat.\nCold and snowy: put on a warm coat, a hat and a scarf.\nWindy: the wind can blow your hat away!",
|
||||||
|
"question": "刮风时要注意什么?",
|
||||||
|
"options": [
|
||||||
|
"帽子会被吹走",
|
||||||
|
"要戴墨镜",
|
||||||
|
"要穿短裤"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:提醒朋友带伞、穿上外套。",
|
||||||
|
"example": "Take an umbrella. Put on your coat.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P06",
|
||||||
|
"A1-U16-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "朋友要出门,今天风很大很冷,用英语提醒他穿什么。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P11",
|
||||||
|
"A1-U16-P07",
|
||||||
|
"A1-U16-P04"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-S3",
|
||||||
|
"title": "季节和天气预报",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P09",
|
||||||
|
"A1-U16-P10"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Is it going to rain tomorrow? No, it's going to be sunny. Great! I like summer because I can swim every day.",
|
||||||
|
"question": "说话人为什么喜欢夏天?",
|
||||||
|
"options": [
|
||||||
|
"可以每天游泳",
|
||||||
|
"天气凉快",
|
||||||
|
"可以看雪"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "I like summer."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Is it going to rain?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I don't like winter. It's very cold."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Spring, summer, autumn and winter in my city\nSpring is warm. Trees and flowers grow, and birds sing.\nSummer is very hot. The sun is bright, and there are no clouds in the blue sky.\nAutumn is cool and dry. I love it more than summer.\nWinter is terrible: there are storms and it snows. But children jump in the snow and look at the moon at night. It's wonderful for them!",
|
||||||
|
"question": "作者更喜欢哪个季节?",
|
||||||
|
"options": [
|
||||||
|
"秋天",
|
||||||
|
"夏天",
|
||||||
|
"冬天"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:说你喜欢哪个季节,再问明天会不会下雨。",
|
||||||
|
"example": "I like autumn. Is it going to rain tomorrow?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P09",
|
||||||
|
"A1-U16-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语说说你最喜欢的季节和那时的天气。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P09",
|
||||||
|
"A1-U16-P02",
|
||||||
|
"A1-U16-W01"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U16-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "出门前问天气",
|
||||||
|
"learnerRole": "游客",
|
||||||
|
"aiRole": "酒店前台",
|
||||||
|
"setting": "你住在酒店,今天要出去玩,先问问前台天气。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Good morning! Going out today?",
|
||||||
|
"goal": "问今天天气怎么样",
|
||||||
|
"model": "Yes. What's the weather like today?",
|
||||||
|
"zh": "是的。今天天气怎么样?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "It's sunny now, but it's cloudy later.",
|
||||||
|
"goal": "问气温多少度",
|
||||||
|
"model": "What's the temperature?",
|
||||||
|
"zh": "气温多少度?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "About twenty degrees. It's warm.",
|
||||||
|
"goal": "问会不会下雨",
|
||||||
|
"model": "Is it going to rain?",
|
||||||
|
"zh": "会下雨吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Maybe in the evening.",
|
||||||
|
"goal": "说那你带上伞",
|
||||||
|
"model": "OK. I can take an umbrella.",
|
||||||
|
"zh": "好的,我带把伞。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Good idea. And the wind is strong by the sea.",
|
||||||
|
"goal": "说你穿上外套",
|
||||||
|
"model": "Thanks. I can put on my coat.",
|
||||||
|
"zh": "谢谢,我穿上外套。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P07"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "和朋友视频聊天气",
|
||||||
|
"learnerRole": "你",
|
||||||
|
"aiRole": "在外国的朋友",
|
||||||
|
"setting": "你和住在国外的朋友视频,互相问天气。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi! What's the weather like there?",
|
||||||
|
"goal": "说外面正在下雨,很冷",
|
||||||
|
"model": "It's raining. It's very cold outside.",
|
||||||
|
"zh": "在下雨,外面很冷。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P03",
|
||||||
|
"A1-U16-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Oh no! Here it's sunny and hot.",
|
||||||
|
"goal": "问那边气温多少度",
|
||||||
|
"model": "What's the temperature?",
|
||||||
|
"zh": "气温多少度?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Thirty-two degrees! I like summer.",
|
||||||
|
"goal": "说你喜欢冬天,不喜欢夏天",
|
||||||
|
"model": "I don't like summer. I like winter. It's cool.",
|
||||||
|
"zh": "我不喜欢夏天,我喜欢冬天,很凉快。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P09",
|
||||||
|
"A1-U16-W02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Really? Is it going to snow there?",
|
||||||
|
"goal": "说风很大,但是不会下雪",
|
||||||
|
"model": "No, but the wind is strong.",
|
||||||
|
"zh": "不会,但是风很大。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P11"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Put on your coat, then!",
|
||||||
|
"goal": "让朋友脱掉外套",
|
||||||
|
"model": "And you, take off your jacket!",
|
||||||
|
"zh": "你呢,把夹克脱了吧!",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P08"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "带孩子出门",
|
||||||
|
"learnerRole": "家长",
|
||||||
|
"aiRole": "孩子",
|
||||||
|
"setting": "你要带孩子去公园,孩子不想多穿衣服。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Can we go to the park now?",
|
||||||
|
"goal": "说外面很冷",
|
||||||
|
"model": "Yes, but it's very cold outside.",
|
||||||
|
"zh": "可以,但是外面很冷。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "I don't want my coat!",
|
||||||
|
"goal": "让孩子穿上外套",
|
||||||
|
"model": "Put on your coat, please.",
|
||||||
|
"zh": "请穿上外套。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK... Is it going to rain?",
|
||||||
|
"goal": "说会下雨,带把伞",
|
||||||
|
"model": "Yes, it's going to rain. Take an umbrella.",
|
||||||
|
"zh": "会下雨,带把伞。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P10",
|
||||||
|
"A1-U16-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Look! It's sunny now!",
|
||||||
|
"goal": "说现在暖和了",
|
||||||
|
"model": "Yes, it's sunny and warm now.",
|
||||||
|
"zh": "是啊,现在出太阳了,很暖和。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-W01",
|
||||||
|
"A1-U16-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "I'm hot!",
|
||||||
|
"goal": "让孩子把夹克脱了",
|
||||||
|
"model": "OK, take off your jacket.",
|
||||||
|
"zh": "好,把夹克脱了吧。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P08"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U16-T1",
|
||||||
|
"sceneId": "A1-U16-C1",
|
||||||
|
"goal": "出门前问清天气并决定带什么",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P01",
|
||||||
|
"A1-U16-P05",
|
||||||
|
"A1-U16-P10",
|
||||||
|
"A1-U16-P06",
|
||||||
|
"A1-U16-P07"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"天气",
|
||||||
|
"气温",
|
||||||
|
"要带的东西"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-T2",
|
||||||
|
"sceneId": "A1-U16-C2",
|
||||||
|
"goal": "和朋友比较两地的天气和季节",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P03",
|
||||||
|
"A1-U16-P04",
|
||||||
|
"A1-U16-P05",
|
||||||
|
"A1-U16-P09",
|
||||||
|
"A1-U16-P11",
|
||||||
|
"A1-U16-P08",
|
||||||
|
"A1-U16-W02"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"天气",
|
||||||
|
"气温",
|
||||||
|
"喜欢的季节"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-T3",
|
||||||
|
"sceneId": "A1-U16-C3",
|
||||||
|
"goal": "根据天气提醒孩子穿什么",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U16-P04",
|
||||||
|
"A1-U16-P07",
|
||||||
|
"A1-U16-P10",
|
||||||
|
"A1-U16-P06",
|
||||||
|
"A1-U16-W01",
|
||||||
|
"A1-U16-P02",
|
||||||
|
"A1-U16-P08"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"冷热",
|
||||||
|
"下雨",
|
||||||
|
"穿脱"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U16-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "天气预报",
|
||||||
|
"text": "Good morning! Here is today's weather. In spring the sky is bright and blue, with a warm sun and sunshine. This morning it is dry, about twenty degrees; take your sunglasses. In the afternoon clouds will grow, the wind will blow strong, and it will be a windy, wet day — it is going to rain. Take an umbrella. Tonight a storm will come, so it will be cold; put on your coat and a scarf. Tomorrow the rainy sky will go away and it will be sunny again. The trees, flowers and birds love the sun. Have a wonderful day!",
|
||||||
|
"glosses": {
|
||||||
|
"blue": "蓝色的",
|
||||||
|
"away": "go away 离开、消散"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "这是什么内容?",
|
||||||
|
"options": [
|
||||||
|
"今天的天气预报",
|
||||||
|
"一条新闻",
|
||||||
|
"一个广告"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "下午天气怎么样?",
|
||||||
|
"options": [
|
||||||
|
"刮大风,要下雨",
|
||||||
|
"一直是晴天",
|
||||||
|
"下雪"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:聊天气和出行",
|
||||||
|
"text": "Mia: What's the weather like today? I want to go to the park and see the flowers and birds.\nBen: The sky is cloudy now, and it's wet after the rain. It's not a bright day.\nMia: Is a storm coming? Should I take an umbrella?\nBen: Yes. The wind will blow hard — it's windy and cold. Put on a coat and a scarf.\nMia: What a terrible day! What about tomorrow?\nBen: Tomorrow the sun will grow bright and the sky will be blue and dry. A wonderful day for the beach!\nMia: Great idea! In summer I love the sunshine, the sea and the trees.\nBen: Me too. Let's go early, before the clouds come back.\nMia: Really? Then let's jump on the first bus. Perfect!",
|
||||||
|
"glosses": {
|
||||||
|
"perfect": "完美的",
|
||||||
|
"blue": "蓝色的",
|
||||||
|
"hard": "用力地"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "Ben 建议 Mia 今天带什么?",
|
||||||
|
"options": [
|
||||||
|
"雨伞、大衣和围巾",
|
||||||
|
"相机",
|
||||||
|
"什么都不用带"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "明天天气怎么样?",
|
||||||
|
"options": [
|
||||||
|
"晴朗干燥",
|
||||||
|
"下雨",
|
||||||
|
"刮大风"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "season",
|
||||||
|
"reason": "B1;A1 直接说 spring、summer、autumn、winter"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "forecast",
|
||||||
|
"reason": "B1;A1 用 Is it going to rain? 表达"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,910 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U17",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "酒店里的需求",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "要物品、报告简单问题",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "16",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "59-2",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "123",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "250",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "CEFR-J 未标级别,Could you ...? 是向酒店提要求时最礼貌的说法"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "117",
|
||||||
|
"use": "active"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U17-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "There's no hot water.",
|
||||||
|
"zh": "没有热水。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"no hot water"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "There's no hot water in the shower.",
|
||||||
|
"zh": "淋浴没有热水。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉前台房间没有热水。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "The TV doesn't work.",
|
||||||
|
"zh": "电视坏了。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"doesn't work",
|
||||||
|
"don't work"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The light doesn't work.",
|
||||||
|
"zh": "灯不亮。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说房间的灯不亮。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "broken",
|
||||||
|
"zh": "坏的",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"broken"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The chair is broken.",
|
||||||
|
"zh": "椅子坏了。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说房间的椅子坏了。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "dirty",
|
||||||
|
"zh": "脏的",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"dirty"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "The towels are dirty.",
|
||||||
|
"zh": "毛巾是脏的。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说床单是脏的。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Can I have another towel?",
|
||||||
|
"zh": "可以再给我一条毛巾吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"another towel",
|
||||||
|
"more towels"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Can I have two more towels?",
|
||||||
|
"zh": "可以再给我两条毛巾吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "再要一条毛巾。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "It's too noisy.",
|
||||||
|
"zh": "太吵了。",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "noisy 为 A2,投诉房间时离不开这个词",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"noisy"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "My room is too noisy.",
|
||||||
|
"zh": "我的房间太吵了。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说房间太吵,睡不着。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Can you send someone?",
|
||||||
|
"zh": "能派个人来吗?",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "send 为 A2,请酒店派人处理问题时必需",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"send someone"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Can you send someone to my room?",
|
||||||
|
"zh": "能派个人来我房间吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "请前台派人来修。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Can I change rooms?",
|
||||||
|
"zh": "我能换个房间吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"change rooms",
|
||||||
|
"another room"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Can I have another room?",
|
||||||
|
"zh": "能给我换一间房吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问能不能换房间。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-P07",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Could you bring me some water?",
|
||||||
|
"zh": "能给我拿点水吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"bring me"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Could you bring me a blanket?",
|
||||||
|
"zh": "能给我拿条毛毯吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "请服务员给你拿点水。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-P08",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "My room number is 1206.",
|
||||||
|
"zh": "我的房间号是 1206。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"room number"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "What's your room number?",
|
||||||
|
"zh": "你的房间号是多少?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "打电话给前台时先说房间号。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-P09",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I can't open the door.",
|
||||||
|
"zh": "我打不开门。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"can't open"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I can't open the window.",
|
||||||
|
"zh": "我打不开窗。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你打不开房门。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-P10",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Please clean my room.",
|
||||||
|
"zh": "请打扫我的房间。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"clean my room",
|
||||||
|
"clean the room"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Please clean the room at ten.",
|
||||||
|
"zh": "请十点打扫房间。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "请酒店打扫你的房间。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-P11",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Thank you for your help.",
|
||||||
|
"zh": "谢谢你的帮助。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"thank you for",
|
||||||
|
"thanks for"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Thanks for the towels.",
|
||||||
|
"zh": "谢谢你送的毛巾。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问题解决后道谢。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R01",
|
||||||
|
"en": "noise",
|
||||||
|
"zh": "噪音"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R02",
|
||||||
|
"en": "paper",
|
||||||
|
"zh": "纸"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R03",
|
||||||
|
"en": "wall",
|
||||||
|
"zh": "墙"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R04",
|
||||||
|
"en": "desk",
|
||||||
|
"zh": "书桌"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R05",
|
||||||
|
"en": "chair",
|
||||||
|
"zh": "椅子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R06",
|
||||||
|
"en": "couch",
|
||||||
|
"zh": "沙发"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R07",
|
||||||
|
"en": "blanket",
|
||||||
|
"zh": "毛毯"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R08",
|
||||||
|
"en": "shampoo",
|
||||||
|
"zh": "洗发水"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R09",
|
||||||
|
"en": "lamp",
|
||||||
|
"zh": "台灯"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R10",
|
||||||
|
"en": "repair",
|
||||||
|
"zh": "修理"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R11",
|
||||||
|
"en": "moment",
|
||||||
|
"zh": "片刻"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R12",
|
||||||
|
"en": "give",
|
||||||
|
"zh": "给"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R13",
|
||||||
|
"en": "break",
|
||||||
|
"zh": "弄坏"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R14",
|
||||||
|
"en": "hole",
|
||||||
|
"zh": "洞"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R15",
|
||||||
|
"en": "hear",
|
||||||
|
"zh": "听见"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R16",
|
||||||
|
"en": "matter",
|
||||||
|
"zh": "事情(What's the matter?)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R17",
|
||||||
|
"en": "happen",
|
||||||
|
"zh": "发生"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R18",
|
||||||
|
"en": "lock",
|
||||||
|
"zh": "锁"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R19",
|
||||||
|
"en": "extra",
|
||||||
|
"zh": "额外的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R20",
|
||||||
|
"en": "rude",
|
||||||
|
"zh": "粗鲁的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R21",
|
||||||
|
"en": "strange",
|
||||||
|
"zh": "奇怪的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R22",
|
||||||
|
"en": "awake",
|
||||||
|
"zh": "醒着的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R23",
|
||||||
|
"en": "hard",
|
||||||
|
"zh": "硬的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R24",
|
||||||
|
"en": "bad",
|
||||||
|
"zh": "坏的;糟糕的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-R25",
|
||||||
|
"en": "call",
|
||||||
|
"zh": "打电话"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U17-S1",
|
||||||
|
"title": "房间里的问题",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P01",
|
||||||
|
"A1-U17-P02",
|
||||||
|
"A1-U17-W01",
|
||||||
|
"A1-U17-W02",
|
||||||
|
"A1-U17-P08"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Hello, this is room 1206. There's no hot water. And the TV doesn't work. OK, sir. What's your room number again? My room number is 1206.",
|
||||||
|
"question": "客人房间有什么问题?",
|
||||||
|
"options": [
|
||||||
|
"没有热水,电视坏了",
|
||||||
|
"太吵,门打不开",
|
||||||
|
"毛巾脏了"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "There's no hot water."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "The TV doesn't work."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "The chair is broken.",
|
||||||
|
"tip": "broken 读 /ˈbrəʊkən/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "The towels are dirty."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "My room number is 1206."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Room problems\nThe lamp on the desk doesn't work.\nThe couch is dirty.\nThere's a hole in the wall.\nThe shower has no hot water.\nThere's no toilet paper and no shampoo.\nCall 0 and give us your room number. We can repair everything soon!",
|
||||||
|
"question": "客人发现问题时应该怎么做?",
|
||||||
|
"options": [
|
||||||
|
"拨 0 并说房间号",
|
||||||
|
"自己修理",
|
||||||
|
"去前台排队"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:说出房间号,再说没有热水。",
|
||||||
|
"example": "My room number is 1206. There's no hot water.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P08",
|
||||||
|
"A1-U17-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语打电话给前台,说你房间的两个问题。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P08",
|
||||||
|
"A1-U17-P02",
|
||||||
|
"A1-U17-W01",
|
||||||
|
"A1-U17-W02"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-S2",
|
||||||
|
"title": "请求帮助",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P03",
|
||||||
|
"A1-U17-P05",
|
||||||
|
"A1-U17-P07",
|
||||||
|
"A1-U17-P10",
|
||||||
|
"A1-U17-P11"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Hi, can I have another towel? And could you bring me some water? Sure. Anything else? Can you send someone? The light is broken. Yes, in a moment. Thank you for your help.",
|
||||||
|
"question": "客人要了哪两样东西?",
|
||||||
|
"options": [
|
||||||
|
"毛巾和水",
|
||||||
|
"毛毯和水",
|
||||||
|
"毛巾和洗发水"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Can I have another towel?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Can you send someone?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Could you bring me some water?",
|
||||||
|
"tip": "Could you 常连读成 /kʊdʒu/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Please clean my room."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Thank you for your help."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Hotel help\nNeed something extra? Call 0.\n· Towels, blankets and shampoo: we can bring them to your room.\n· Something is broken? We can send someone.\n· Please clean my room: put this card on your door.\n· Don't break the lock! If you can't open the door, call us.",
|
||||||
|
"question": "想让酒店打扫房间,应该怎么做?",
|
||||||
|
"options": [
|
||||||
|
"把卡挂在门上",
|
||||||
|
"拨 0",
|
||||||
|
"去前台"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:再要一条毛巾,再请人拿点水。",
|
||||||
|
"example": "Can I have another towel? Could you bring me some water?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P03",
|
||||||
|
"A1-U17-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语请酒店派人来修电视,最后道谢。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P05",
|
||||||
|
"A1-U17-P02",
|
||||||
|
"A1-U17-P11"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-S3",
|
||||||
|
"title": "换房间",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P04",
|
||||||
|
"A1-U17-P06",
|
||||||
|
"A1-U17-P09"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "What's the matter? It's too noisy. I can hear music from the next room. Can I change rooms? Sure. Here is the key to room 1508. ... Hello? I can't open the door.",
|
||||||
|
"question": "客人为什么要换房间?",
|
||||||
|
"options": [
|
||||||
|
"太吵了",
|
||||||
|
"门打不开",
|
||||||
|
"房间太脏"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "It's too noisy."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Can I change rooms?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I can't open the door."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "A bad night\nWhat happened? I can't sleep. My room is too noisy. There's a strange noise from the wall, and I'm awake at 3 am. The bed is very hard too. I call the front desk, but the man is rude. He says, \"No, you can't change rooms.\" Tomorrow I can ask again.",
|
||||||
|
"question": "写这段话的人为什么睡不着?",
|
||||||
|
"options": [
|
||||||
|
"房间太吵,床也太硬",
|
||||||
|
"房间太冷",
|
||||||
|
"灯坏了"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:说太吵了,问能不能换房间。",
|
||||||
|
"example": "It's too noisy. Can I change rooms?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P04",
|
||||||
|
"A1-U17-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "你拿到新房卡却打不开门,用英语向前台说明。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P09",
|
||||||
|
"A1-U17-P08",
|
||||||
|
"A1-U17-P05"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U17-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "打电话给前台",
|
||||||
|
"learnerRole": "客人",
|
||||||
|
"aiRole": "前台",
|
||||||
|
"setting": "你刚入住,发现房间有几个问题,打电话给前台。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Front desk. How can I help you?",
|
||||||
|
"goal": "先说房间号",
|
||||||
|
"model": "Hello. My room number is 1206.",
|
||||||
|
"zh": "你好,我的房间号是 1206。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, Mr Chen. What's the matter?",
|
||||||
|
"goal": "说没有热水",
|
||||||
|
"model": "There's no hot water.",
|
||||||
|
"zh": "没有热水。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "I'm sorry. Anything else?",
|
||||||
|
"goal": "说电视也坏了",
|
||||||
|
"model": "And the TV doesn't work.",
|
||||||
|
"zh": "电视也坏了。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK. What can we do for you?",
|
||||||
|
"goal": "请前台派人来",
|
||||||
|
"model": "Can you send someone?",
|
||||||
|
"zh": "能派个人来吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, in ten minutes.",
|
||||||
|
"goal": "道谢",
|
||||||
|
"model": "Thank you for your help.",
|
||||||
|
"zh": "谢谢你的帮助。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P11"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "房间太吵要换房",
|
||||||
|
"learnerRole": "客人",
|
||||||
|
"aiRole": "前台",
|
||||||
|
"setting": "半夜房间很吵,你到前台要求换房间。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Good evening. Can I help you?",
|
||||||
|
"goal": "说房间太吵",
|
||||||
|
"model": "Yes. My room is too noisy.",
|
||||||
|
"zh": "是的,我的房间太吵了。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Oh, I'm sorry. Is it the music?",
|
||||||
|
"goal": "问能不能换房间",
|
||||||
|
"model": "Yes. Can I change rooms?",
|
||||||
|
"zh": "是的。我能换个房间吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. Here is the key to room 815.",
|
||||||
|
"goal": "说房间也有点脏",
|
||||||
|
"model": "Thank you. And my room is a little dirty.",
|
||||||
|
"zh": "谢谢。我的房间也有点脏。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-W02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sorry about that. We can clean it tomorrow.",
|
||||||
|
"goal": "请明天早上打扫房间",
|
||||||
|
"model": "OK. Please clean my room in the morning.",
|
||||||
|
"zh": "好的。请早上打扫我的房间。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes. Anything else?",
|
||||||
|
"goal": "请给你拿点水",
|
||||||
|
"model": "Could you bring me some water?",
|
||||||
|
"zh": "能给我拿点水吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P07"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "进不去房间",
|
||||||
|
"learnerRole": "客人",
|
||||||
|
"aiRole": "前台",
|
||||||
|
"setting": "你回到酒店,房门打不开,房间里的东西也有问题。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello again! Is everything OK?",
|
||||||
|
"goal": "说你打不开门",
|
||||||
|
"model": "No. I can't open the door.",
|
||||||
|
"zh": "不好。我打不开门。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P09"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Oh, the key card is broken. Here is a new one.",
|
||||||
|
"goal": "再要一条毛巾",
|
||||||
|
"model": "Thanks. Can I have another towel?",
|
||||||
|
"zh": "谢谢。可以再给我一条毛巾吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes. Anything else?",
|
||||||
|
"goal": "说椅子坏了",
|
||||||
|
"model": "The chair in my room is broken.",
|
||||||
|
"zh": "我房间的椅子坏了。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "I can send someone. What's your room number?",
|
||||||
|
"goal": "说房间号",
|
||||||
|
"model": "My room number is 815.",
|
||||||
|
"zh": "我的房间号是 815。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK, in a moment.",
|
||||||
|
"goal": "道谢",
|
||||||
|
"model": "Thank you for your help.",
|
||||||
|
"zh": "谢谢你的帮助。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P11"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U17-T1",
|
||||||
|
"sceneId": "A1-U17-C1",
|
||||||
|
"goal": "打电话给前台说明房间问题并请人来修",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P08",
|
||||||
|
"A1-U17-P01",
|
||||||
|
"A1-U17-P02",
|
||||||
|
"A1-U17-P05",
|
||||||
|
"A1-U17-P11"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"房间号",
|
||||||
|
"问题",
|
||||||
|
"派人"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-T2",
|
||||||
|
"sceneId": "A1-U17-C2",
|
||||||
|
"goal": "当面投诉房间太吵并换房",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P04",
|
||||||
|
"A1-U17-P06",
|
||||||
|
"A1-U17-W02",
|
||||||
|
"A1-U17-P10",
|
||||||
|
"A1-U17-P07"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"问题",
|
||||||
|
"换房",
|
||||||
|
"其他请求"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-T3",
|
||||||
|
"sceneId": "A1-U17-C3",
|
||||||
|
"goal": "进不去房间时处理多个小问题",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U17-P09",
|
||||||
|
"A1-U17-P03",
|
||||||
|
"A1-U17-W01",
|
||||||
|
"A1-U17-P08",
|
||||||
|
"A1-U17-P11"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"房门",
|
||||||
|
"毛巾",
|
||||||
|
"损坏"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U17-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "打给前台报房间问题",
|
||||||
|
"text": "Hello, front desk? This is room 1206. I'm sorry, but there are some problems, and I can't sleep. There's no hot water, and the TV is broken; it doesn't work. The lamp on the desk is broken too. The room is a little dirty, and there is a hole in the wall. It's also very noisy — I can hear a strange noise all night, so I'm still awake. Can you send someone to repair these things and clean the room? Could you bring me another blanket, some shampoo and a new chair? Can I change rooms? One moment — sorry, that's a lot. Thank you for your help.",
|
||||||
|
"glosses": {
|
||||||
|
"send": "派(人)",
|
||||||
|
"still": "仍然",
|
||||||
|
"things": "东西"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "客人打电话主要是为了什么?",
|
||||||
|
"options": [
|
||||||
|
"报告房间的问题",
|
||||||
|
"订早餐",
|
||||||
|
"问路"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "下面哪个是客人说的问题?",
|
||||||
|
"options": [
|
||||||
|
"没有热水,电视坏了",
|
||||||
|
"床太小",
|
||||||
|
"房间太贵"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:报修",
|
||||||
|
"text": "Guest: Hi, my room number is 305. The TV doesn't work, and there's no hot water.\nAnna: I'm so sorry. What's the matter? I'll send someone to repair it now.\nGuest: Thank you. There's also a strange noise in the wall. What happened? I can't sleep; I'm still awake.\nAnna: Sorry for the trouble. Can I bring you anything?\nGuest: Yes, please. Can I have another blanket, some shampoo, and paper? And the lamp is broken.\nAnna: Of course. We'll give you a new lamp and repair the door lock too.\nGuest: Thank you. The couch has a hole in it, and the chair is broken. Sorry, that's a lot!\nAnna: No problem. Some guests are rude, but you are very kind. I'll fix everything today.\nGuest: One moment — could you bring an extra towel too?\nAnna: Sure, I'll bring it now.\nGuest: Thank you for your help.",
|
||||||
|
"glosses": {
|
||||||
|
"fix": "修理,解决",
|
||||||
|
"trouble": "麻烦",
|
||||||
|
"course": "of course 当然",
|
||||||
|
"still": "仍然"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "客人房间里什么坏了?",
|
||||||
|
"options": [
|
||||||
|
"电视和台灯",
|
||||||
|
"空调",
|
||||||
|
"窗户"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "客人还额外要了什么?",
|
||||||
|
"options": [
|
||||||
|
"一条毛巾",
|
||||||
|
"一双鞋",
|
||||||
|
"一份报纸"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "pillow",
|
||||||
|
"reason": "B1;A1 用 blanket、towel 这类词"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "heater",
|
||||||
|
"reason": "B1;A1 用 no hot water / it's cold 表达"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,935 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U18",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "药店与不舒服",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "说一个症状、听懂基本建议",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "59-2",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "60",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "用 My head hurts 说哪里疼"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "246",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "123",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "64",
|
||||||
|
"use": "receptive"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U18-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I don't feel well.",
|
||||||
|
"zh": "我不舒服。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"don't feel well"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I don't feel well today.",
|
||||||
|
"zh": "我今天不舒服。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉朋友你不舒服。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I have a headache.",
|
||||||
|
"zh": "我头疼。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"have a headache",
|
||||||
|
"have a fever",
|
||||||
|
"have a cold",
|
||||||
|
"have a stomachache",
|
||||||
|
"has a headache",
|
||||||
|
"has a fever",
|
||||||
|
"has a cold"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I have a cold.",
|
||||||
|
"zh": "我感冒了。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你发烧了。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "My head hurts.",
|
||||||
|
"zh": "我头疼。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"hurts",
|
||||||
|
"hurt"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "My back hurts.",
|
||||||
|
"zh": "我背疼。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你的腿疼。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "sick",
|
||||||
|
"zh": "生病的",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"sick"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I feel sick.",
|
||||||
|
"zh": "我觉得恶心/不舒服。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你的孩子生病了。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "medicine",
|
||||||
|
"zh": "药",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"medicine"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I need some medicine.",
|
||||||
|
"zh": "我需要一些药。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你需要买药。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Is there a pharmacy near here?",
|
||||||
|
"zh": "附近有药店吗?",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "pharmacy 为 B1,但旅行中找药店时必需",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"pharmacy"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Where is the pharmacy?",
|
||||||
|
"zh": "药店在哪里?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "在街上问附近有没有药店。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Do you have something for a headache?",
|
||||||
|
"zh": "有治头疼的药吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"something for"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Do you have something for a cold?",
|
||||||
|
"zh": "有治感冒的药吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "在药店问有没有治发烧的药。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "How often do I take it?",
|
||||||
|
"zh": "这个药多久吃一次?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"how often"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "How often do I take this medicine?",
|
||||||
|
"zh": "这个药多久吃一次?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问药怎么吃。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-P07",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Three times a day.",
|
||||||
|
"zh": "一天三次。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"times a day",
|
||||||
|
"once a day",
|
||||||
|
"twice a day"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Take it two times a day.",
|
||||||
|
"zh": "一天吃两次。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说一天吃两次。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-P08",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "after meals",
|
||||||
|
"zh": "饭后",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"after meals",
|
||||||
|
"before meals"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Take it after meals.",
|
||||||
|
"zh": "饭后吃。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说这个药饭前吃。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-P09",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I need to see a doctor.",
|
||||||
|
"zh": "我需要看医生。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"see a doctor"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Can I see a doctor today?",
|
||||||
|
"zh": "我今天能看医生吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你需要看医生。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-P10",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I feel better now.",
|
||||||
|
"zh": "我现在好多了。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"feel better"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Do you feel better?",
|
||||||
|
"zh": "你好点了吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉朋友你好多了。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-P11",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Take care.",
|
||||||
|
"zh": "保重。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"take care"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Take care and drink water.",
|
||||||
|
"zh": "保重,多喝水。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "朋友生病了,跟他说保重。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R01",
|
||||||
|
"en": "fever",
|
||||||
|
"zh": "发烧"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R02",
|
||||||
|
"en": "health",
|
||||||
|
"zh": "健康"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R03",
|
||||||
|
"en": "healthy",
|
||||||
|
"zh": "健康的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R04",
|
||||||
|
"en": "body",
|
||||||
|
"zh": "身体"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R05",
|
||||||
|
"en": "arm",
|
||||||
|
"zh": "手臂"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R06",
|
||||||
|
"en": "leg",
|
||||||
|
"zh": "腿"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R07",
|
||||||
|
"en": "ear",
|
||||||
|
"zh": "耳朵"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R08",
|
||||||
|
"en": "nose",
|
||||||
|
"zh": "鼻子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R09",
|
||||||
|
"en": "mouth",
|
||||||
|
"zh": "嘴"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R10",
|
||||||
|
"en": "neck",
|
||||||
|
"zh": "脖子"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R11",
|
||||||
|
"en": "shoulder",
|
||||||
|
"zh": "肩膀"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R12",
|
||||||
|
"en": "knee",
|
||||||
|
"zh": "膝盖"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R13",
|
||||||
|
"en": "heart",
|
||||||
|
"zh": "心脏"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R14",
|
||||||
|
"en": "nurse",
|
||||||
|
"zh": "护士"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R15",
|
||||||
|
"en": "breathe",
|
||||||
|
"zh": "呼吸"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R16",
|
||||||
|
"en": "once",
|
||||||
|
"zh": "一次"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R17",
|
||||||
|
"en": "stomach",
|
||||||
|
"zh": "胃"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R18",
|
||||||
|
"en": "pill",
|
||||||
|
"zh": "药片"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R19",
|
||||||
|
"en": "ill",
|
||||||
|
"zh": "生病的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R20",
|
||||||
|
"en": "dentist",
|
||||||
|
"zh": "牙医"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R21",
|
||||||
|
"en": "toothache",
|
||||||
|
"zh": "牙疼"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R22",
|
||||||
|
"en": "blood",
|
||||||
|
"zh": "血"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R23",
|
||||||
|
"en": "twice",
|
||||||
|
"zh": "两次"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R24",
|
||||||
|
"en": "important",
|
||||||
|
"zh": "重要的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R25",
|
||||||
|
"en": "yesterday",
|
||||||
|
"zh": "昨天"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-R26",
|
||||||
|
"en": "still",
|
||||||
|
"zh": "仍然"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U18-S1",
|
||||||
|
"title": "说哪里不舒服",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P01",
|
||||||
|
"A1-U18-P02",
|
||||||
|
"A1-U18-P03",
|
||||||
|
"A1-U18-W01",
|
||||||
|
"A1-U18-P09"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "What's the matter? I don't feel well. I have a headache, and my neck hurts. I think I need to see a doctor.",
|
||||||
|
"question": "说话人哪里不舒服?",
|
||||||
|
"options": [
|
||||||
|
"头疼和脖子疼",
|
||||||
|
"发烧和胃疼",
|
||||||
|
"牙疼"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "I don't feel well."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I have a headache.",
|
||||||
|
"tip": "headache 读 /ˈhedeɪk/,ch 读 /k/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "My head hurts."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I feel sick."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I need to see a doctor."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Your body\nHead: eyes, ears, nose and mouth\nNeck and shoulders\nArms and hands\nLegs and knees\nIn your body, your heart is very important. When you run, you breathe fast.\nToothache? See a dentist. A fever or blood? See a doctor or a nurse.",
|
||||||
|
"question": "牙疼应该看谁?",
|
||||||
|
"options": [
|
||||||
|
"牙医",
|
||||||
|
"护士",
|
||||||
|
"医生"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:说你不舒服,头疼。",
|
||||||
|
"example": "I don't feel well. I have a headache.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P01",
|
||||||
|
"A1-U18-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语说说你哪里疼,并说需要看医生。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P03",
|
||||||
|
"A1-U18-W01",
|
||||||
|
"A1-U18-P09"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-S2",
|
||||||
|
"title": "在药店",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-W02",
|
||||||
|
"A1-U18-P04",
|
||||||
|
"A1-U18-P05",
|
||||||
|
"A1-U18-P06",
|
||||||
|
"A1-U18-P07",
|
||||||
|
"A1-U18-P08"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Excuse me, is there a pharmacy near here? Yes, next to the bank. ... Hello. Do you have something for a headache? Yes, this medicine. How often do I take it? Three times a day, after meals.",
|
||||||
|
"question": "药怎么吃?",
|
||||||
|
"options": [
|
||||||
|
"一天三次,饭后",
|
||||||
|
"一天两次,饭前",
|
||||||
|
"一天一次,睡前"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "I need some medicine."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Is there a pharmacy near here?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Do you have something for a headache?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "How often do I take it?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Three times a day."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Take it after meals."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Medicine box\nFor headaches and fevers\nPeople over 12: take 2 pills three times a day, after meals.\nChildren: take 1 pill twice a day.\nDon't take more than 6 pills a day.\nIll for more than three days? See a doctor.\nFor stomach problems, take it once a day, before meals.",
|
||||||
|
"question": "大人一天最多吃几片?",
|
||||||
|
"options": [
|
||||||
|
"六片",
|
||||||
|
"三片",
|
||||||
|
"两片"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:问有没有治头疼的药,再问多久吃一次。",
|
||||||
|
"example": "Do you have something for a headache? How often do I take it?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P05",
|
||||||
|
"A1-U18-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "你在药店买感冒药,用英语问清楚怎么吃。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-W02",
|
||||||
|
"A1-U18-P05",
|
||||||
|
"A1-U18-P06",
|
||||||
|
"A1-U18-P07",
|
||||||
|
"A1-U18-P08"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-S3",
|
||||||
|
"title": "好些了",
|
||||||
|
"minutes": 11,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P10",
|
||||||
|
"A1-U18-P11"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "How are you today? I was sick yesterday, but I feel better now. Good! Take care.",
|
||||||
|
"question": "说话人今天怎么样?",
|
||||||
|
"options": [
|
||||||
|
"好多了",
|
||||||
|
"还在发烧",
|
||||||
|
"要去看医生"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "I feel better now."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Take care."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I was sick yesterday."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "A note to my friend\nHi Sam,\nI was ill yesterday. I had a fever, and my body hurt. Today I feel better now. I drink a lot of water and sleep. Health is important! I want to be healthy, so I run every day.\nTake care,\nLily",
|
||||||
|
"question": "Lily 昨天怎么了?",
|
||||||
|
"options": [
|
||||||
|
"发烧,全身疼",
|
||||||
|
"牙疼",
|
||||||
|
"胃疼"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:说你昨天病了,现在好多了。",
|
||||||
|
"example": "I was sick yesterday. I feel better now.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P10",
|
||||||
|
"A1-U18-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "朋友生病了,用英语问他好点没有,并说保重。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P10",
|
||||||
|
"A1-U18-P11"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U18-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "在药店买药",
|
||||||
|
"learnerRole": "游客",
|
||||||
|
"aiRole": "药剂师",
|
||||||
|
"setting": "你旅行时头疼,走进一家药店。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello. How can I help you?",
|
||||||
|
"goal": "说你不舒服,头疼",
|
||||||
|
"model": "I don't feel well. I have a headache.",
|
||||||
|
"zh": "我不舒服,头疼。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P01",
|
||||||
|
"A1-U18-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Oh, I'm sorry. Do you have a fever?",
|
||||||
|
"goal": "说没有发烧,问有没有治头疼的药",
|
||||||
|
"model": "No. Do you have something for a headache?",
|
||||||
|
"zh": "没有。有治头疼的药吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes. This medicine is good.",
|
||||||
|
"goal": "问多久吃一次",
|
||||||
|
"model": "How often do I take it?",
|
||||||
|
"zh": "这个药多久吃一次?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Three times a day, after meals.",
|
||||||
|
"goal": "复述:一天三次,饭后",
|
||||||
|
"model": "Three times a day, after meals. OK.",
|
||||||
|
"zh": "一天三次,饭后。好的。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P07",
|
||||||
|
"A1-U18-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Is it very bad?",
|
||||||
|
"goal": "说如果还疼就去看医生",
|
||||||
|
"model": "If my head hurts tomorrow, I need to see a doctor.",
|
||||||
|
"zh": "如果明天头还疼,我需要看医生。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P03",
|
||||||
|
"A1-U18-P09"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "在街上找药店",
|
||||||
|
"learnerRole": "游客",
|
||||||
|
"aiRole": "路人",
|
||||||
|
"setting": "你的孩子生病了,你在街上找药店。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Are you OK?",
|
||||||
|
"goal": "说孩子生病了",
|
||||||
|
"model": "My son is sick.",
|
||||||
|
"zh": "我儿子病了。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Oh no. What's the matter?",
|
||||||
|
"goal": "说他发烧了",
|
||||||
|
"model": "He has a fever.",
|
||||||
|
"zh": "他发烧了。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "He needs some medicine.",
|
||||||
|
"goal": "问附近有没有药店",
|
||||||
|
"model": "Yes, he needs medicine. Is there a pharmacy near here?",
|
||||||
|
"zh": "是的,他需要药。附近有药店吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P04",
|
||||||
|
"A1-U18-W02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, it's on the next street.",
|
||||||
|
"goal": "说也许需要看医生",
|
||||||
|
"model": "Thank you. Maybe he needs to see a doctor too.",
|
||||||
|
"zh": "谢谢。也许他还需要看医生。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P09"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "There's a hospital near the pharmacy. Take care!",
|
||||||
|
"goal": "道谢",
|
||||||
|
"model": "Thanks. You take care too.",
|
||||||
|
"zh": "谢谢,你也保重。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P11"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "朋友来问候",
|
||||||
|
"learnerRole": "你",
|
||||||
|
"aiRole": "朋友",
|
||||||
|
"setting": "你昨天生病了,今天朋友打电话来问候。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi! How are you today?",
|
||||||
|
"goal": "说好多了",
|
||||||
|
"model": "I feel better now.",
|
||||||
|
"zh": "我现在好多了。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Great! Do you still have a headache?",
|
||||||
|
"goal": "说还是不太舒服,背疼",
|
||||||
|
"model": "A little. I don't feel well, and my back hurts.",
|
||||||
|
"zh": "有一点。还是不太舒服,背也疼。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P01",
|
||||||
|
"A1-U18-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Do you have medicine?",
|
||||||
|
"goal": "说有药,一天吃两次",
|
||||||
|
"model": "Yes. I take the medicine two times a day.",
|
||||||
|
"zh": "有,这个药一天吃两次。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-W02",
|
||||||
|
"A1-U18-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Before meals or after meals?",
|
||||||
|
"goal": "说饭后吃",
|
||||||
|
"model": "After meals.",
|
||||||
|
"zh": "饭后吃。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK. Take care!",
|
||||||
|
"goal": "道谢",
|
||||||
|
"model": "Thanks. Take care.",
|
||||||
|
"zh": "谢谢。保重。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P11"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U18-T1",
|
||||||
|
"sceneId": "A1-U18-C1",
|
||||||
|
"goal": "在药店说明症状并问清楚药怎么吃",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P01",
|
||||||
|
"A1-U18-P02",
|
||||||
|
"A1-U18-P05",
|
||||||
|
"A1-U18-P06",
|
||||||
|
"A1-U18-P07",
|
||||||
|
"A1-U18-P08",
|
||||||
|
"A1-U18-P03",
|
||||||
|
"A1-U18-P09"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"症状",
|
||||||
|
"药",
|
||||||
|
"用法"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-T2",
|
||||||
|
"sceneId": "A1-U18-C2",
|
||||||
|
"goal": "孩子生病时在街上找药店",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-W01",
|
||||||
|
"A1-U18-P02",
|
||||||
|
"A1-U18-P04",
|
||||||
|
"A1-U18-W02",
|
||||||
|
"A1-U18-P09",
|
||||||
|
"A1-U18-P11"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"症状",
|
||||||
|
"药店"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-T3",
|
||||||
|
"sceneId": "A1-U18-C3",
|
||||||
|
"goal": "回答朋友的问候,说说病情",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U18-P10",
|
||||||
|
"A1-U18-P01",
|
||||||
|
"A1-U18-P03",
|
||||||
|
"A1-U18-W02",
|
||||||
|
"A1-U18-P07",
|
||||||
|
"A1-U18-P08",
|
||||||
|
"A1-U18-P11"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"现在怎么样",
|
||||||
|
"哪里疼",
|
||||||
|
"吃药"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U18-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "药店店员给建议",
|
||||||
|
"text": "Hello. What's the matter? You don't look well; you don't look healthy today. Do you have a fever? OK, you have a headache, your stomach hurts, and your neck and shoulder hurt too. Don't worry. Your health is important. Here is some medicine. Take one pill twice a day, after meals — not once, but two times. Please breathe slowly, drink a lot of water, and rest. If your ear, nose or leg still hurts tomorrow, or if you feel ill, you need to see a doctor. For a toothache, see a dentist. The nurse can help too. The pharmacy is open until ten. Take care!",
|
||||||
|
"glosses": {
|
||||||
|
"rest": "休息",
|
||||||
|
"hurts": "疼",
|
||||||
|
"hurt": "疼",
|
||||||
|
"slowly": "慢慢地"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "说话人主要在做什么?",
|
||||||
|
"options": [
|
||||||
|
"给生病的人建议和药",
|
||||||
|
"卖衣服",
|
||||||
|
"介绍菜单"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "这个药怎么吃?",
|
||||||
|
"options": [
|
||||||
|
"一天两次,饭后吃",
|
||||||
|
"一天三次,饭前吃",
|
||||||
|
"睡前吃"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:说不舒服",
|
||||||
|
"text": "Ben: I don't feel well. I have a bad headache, and my body hurts everywhere.\nMia: Oh no. Do you have a fever? You don't look healthy.\nBen: A little. My head and my stomach hurt, and my arm and leg are tired.\nMia: Yesterday you were fine. You should rest. It's important. Do you have any medicine?\nBen: No. Is there a pharmacy near here?\nMia: Yes, next to the bank. The nurse there can give you something for a headache.\nBen: Thanks. My tooth hurts too. Maybe I need a dentist for this toothache.\nMia: Take care. Breathe slowly and drink water. I hope you feel better soon.\nBen: Thank you, my friend. I still feel ill, but a little better now.",
|
||||||
|
"glosses": {
|
||||||
|
"rest": "休息",
|
||||||
|
"hurts": "疼",
|
||||||
|
"hurt": "疼",
|
||||||
|
"everywhere": "到处",
|
||||||
|
"slowly": "慢慢地"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "Ben 哪里不舒服?",
|
||||||
|
"options": [
|
||||||
|
"头疼、发一点烧、浑身疼",
|
||||||
|
"只是牙疼",
|
||||||
|
"只是肚子疼"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "药店在哪里?",
|
||||||
|
"options": [
|
||||||
|
"银行旁边",
|
||||||
|
"车站里",
|
||||||
|
"酒店对面"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "sore throat",
|
||||||
|
"reason": "sore 为 B1、throat 为 B2;A1 用 My throat hurts 以外的说法,先不教"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "cough",
|
||||||
|
"reason": "B1–B2;留到 A2 看病单元"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,912 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U19",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "遇到麻烦时求助",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "说明遇到的麻烦、请求帮忙、感谢与回应",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "64",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "只用 I was / It was 说刚才的情况"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "65",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "只用 lost、took、happened 几个过去式"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "117",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "101",
|
||||||
|
"use": "active"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U19-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I lost my wallet.",
|
||||||
|
"zh": "我的钱包丢了。",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "wallet 为 A2,旅行中丢东西时最先要说",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"lost my"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I lost my phone.",
|
||||||
|
"zh": "我的手机丢了。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你的钱包丢了。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Someone took my bag.",
|
||||||
|
"zh": "有人拿走了我的包。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"took my"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Someone took my phone.",
|
||||||
|
"zh": "有人拿走了我的手机。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说有人拿走了你的包。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Call the police!",
|
||||||
|
"zh": "快报警!",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "police 为 A2,遇到偷窃必须会说",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"call the police"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Please call the police.",
|
||||||
|
"zh": "请报警。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "请旁边的人报警。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Where is the police station?",
|
||||||
|
"zh": "警察局在哪里?",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "police station 为 A2,报案时要去",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"police station"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Is there a police station near here?",
|
||||||
|
"zh": "附近有警察局吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问警察局在哪里。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I can't find my passport.",
|
||||||
|
"zh": "我找不到我的护照了。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"can't find"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I can't find my hotel.",
|
||||||
|
"zh": "我找不到我的酒店了。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你找不到护照了。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "What happened?",
|
||||||
|
"zh": "发生了什么事?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"what happened"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "What happened to your bag?",
|
||||||
|
"zh": "你的包怎么了?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "看到有人着急,问发生了什么。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-P07",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I was on the bus.",
|
||||||
|
"zh": "我当时在公交车上。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"i was"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I was in the station.",
|
||||||
|
"zh": "我当时在车站。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你当时在出租车上。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-P08",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Does anyone speak Chinese?",
|
||||||
|
"zh": "有人会说中文吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"does anyone speak"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Does anyone speak English?",
|
||||||
|
"zh": "有人会说英语吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问有没有人会说中文。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-P09",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Don't worry.",
|
||||||
|
"zh": "别担心。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"don't worry"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Don't worry. We can help you.",
|
||||||
|
"zh": "别担心,我们能帮你。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "安慰着急的朋友。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-P10",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I need help.",
|
||||||
|
"zh": "我需要帮助。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"need help"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I need help, please.",
|
||||||
|
"zh": "我需要帮助,请帮帮我。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你需要帮助。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-P11",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "It's an emergency.",
|
||||||
|
"zh": "这是紧急情况。",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "emergency 为 A2,求助时要让对方知道情况紧急",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"emergency"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Please help. It's an emergency!",
|
||||||
|
"zh": "请帮帮忙,这是急事!"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉别人情况紧急。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "quickly",
|
||||||
|
"zh": "快点",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"quickly"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Please come quickly!",
|
||||||
|
"zh": "请快点来!"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "请别人快点来。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-W02",
|
||||||
|
"type": "word",
|
||||||
|
"en": "fire",
|
||||||
|
"zh": "火;火灾",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"fire"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "There's a fire in the kitchen!",
|
||||||
|
"zh": "厨房着火了!"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "喊人说着火了。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R01",
|
||||||
|
"en": "thief",
|
||||||
|
"zh": "小偷"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R02",
|
||||||
|
"en": "steal",
|
||||||
|
"zh": "偷"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R03",
|
||||||
|
"en": "danger",
|
||||||
|
"zh": "危险"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R04",
|
||||||
|
"en": "dangerous",
|
||||||
|
"zh": "危险的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R05",
|
||||||
|
"en": "mistake",
|
||||||
|
"zh": "错误"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R06",
|
||||||
|
"en": "trouble",
|
||||||
|
"zh": "麻烦"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R07",
|
||||||
|
"en": "report",
|
||||||
|
"zh": "报告"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R08",
|
||||||
|
"en": "fall",
|
||||||
|
"zh": "摔倒"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R09",
|
||||||
|
"en": "save",
|
||||||
|
"zh": "救;保存"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R10",
|
||||||
|
"en": "believe",
|
||||||
|
"zh": "相信"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R11",
|
||||||
|
"en": "guess",
|
||||||
|
"zh": "猜"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R12",
|
||||||
|
"en": "true",
|
||||||
|
"zh": "真的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R13",
|
||||||
|
"en": "lucky",
|
||||||
|
"zh": "幸运的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R14",
|
||||||
|
"en": "poor",
|
||||||
|
"zh": "可怜的;穷的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R15",
|
||||||
|
"en": "real",
|
||||||
|
"zh": "真实的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R16",
|
||||||
|
"en": "reason",
|
||||||
|
"zh": "原因"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R17",
|
||||||
|
"en": "touch",
|
||||||
|
"zh": "碰"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R18",
|
||||||
|
"en": "throw",
|
||||||
|
"zh": "扔"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R19",
|
||||||
|
"en": "policeman",
|
||||||
|
"zh": "警察"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R20",
|
||||||
|
"en": "somebody",
|
||||||
|
"zh": "某人"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R21",
|
||||||
|
"en": "safe",
|
||||||
|
"zh": "安全的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R22",
|
||||||
|
"en": "everywhere",
|
||||||
|
"zh": "到处"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R23",
|
||||||
|
"en": "tell",
|
||||||
|
"zh": "告诉"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R24",
|
||||||
|
"en": "story",
|
||||||
|
"zh": "故事"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-R25",
|
||||||
|
"en": "thing",
|
||||||
|
"zh": "东西"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U19-S1",
|
||||||
|
"title": "丢了东西",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P01",
|
||||||
|
"A1-U19-P05",
|
||||||
|
"A1-U19-P06",
|
||||||
|
"A1-U19-P07",
|
||||||
|
"A1-U19-P10"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "What happened? I lost my wallet. Where were you? I was on the bus. And I can't find my passport too. I need help.",
|
||||||
|
"question": "说话人丢了什么?",
|
||||||
|
"options": [
|
||||||
|
"钱包,也找不到护照",
|
||||||
|
"手机和包",
|
||||||
|
"酒店钥匙"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "What happened?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I lost my wallet."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I can't find my passport."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I was on the bus."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I need help."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Lost something?\n1. Don't be afraid. Maybe it's your mistake. Look everywhere: in your bag, in your pockets, in the hotel.\n2. Think: where was it? Was it in the taxi or on the bus?\n3. Call the bus or taxi office. Tell them the date and time.\n4. Can't find it? Go to the police station. They can write a report.\n5. You lost your passport? Call your country's office in the city.",
|
||||||
|
"question": "找不到丢失的东西,最后应该去哪里?",
|
||||||
|
"options": [
|
||||||
|
"警察局",
|
||||||
|
"出租车公司",
|
||||||
|
"酒店前台"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:说你钱包丢了,当时在公交车上。",
|
||||||
|
"example": "I lost my wallet. I was on the bus.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P01",
|
||||||
|
"A1-U19-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语告诉酒店前台你丢了什么、当时在哪里。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P01",
|
||||||
|
"A1-U19-P05",
|
||||||
|
"A1-U19-P07",
|
||||||
|
"A1-U19-P10"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-S2",
|
||||||
|
"title": "被偷和报警",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P02",
|
||||||
|
"A1-U19-P03",
|
||||||
|
"A1-U19-P04",
|
||||||
|
"A1-U19-P08",
|
||||||
|
"A1-U19-P11"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Help! Someone took my bag! Call the police! It's an emergency. Does anyone speak Chinese? I do. Don't worry. The police station is next to the bank.",
|
||||||
|
"question": "警察局在哪里?",
|
||||||
|
"options": [
|
||||||
|
"银行旁边",
|
||||||
|
"公交车站旁边",
|
||||||
|
"酒店对面"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Someone took my bag."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Call the police!",
|
||||||
|
"tip": "police 重音在第二个音节:po-LICE"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Where is the police station?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Does anyone speak Chinese?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "It's an emergency."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "At the police station\nPoliceman: What happened?\nMia: Somebody took my bag on the train. I believe it was a thief. Thieves can steal bags on trains.\nPoliceman: What was in it?\nMia: My phone and my wallet. There was nothing else.\nPoliceman: Do you remember the man? Guess his age.\nMia: About thirty. He was tall.\nPoliceman: OK. Here is your report. Who should we call?",
|
||||||
|
"question": "Mia 的包里有什么?",
|
||||||
|
"options": [
|
||||||
|
"手机和钱包",
|
||||||
|
"护照和钥匙",
|
||||||
|
"相机和钱"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:说有人拿走了你的包,请人报警。",
|
||||||
|
"example": "Someone took my bag. Call the police!",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P02",
|
||||||
|
"A1-U19-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "你的手机被偷了,用英语向路人求助并问警察局在哪。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P02",
|
||||||
|
"A1-U19-P11",
|
||||||
|
"A1-U19-P04",
|
||||||
|
"A1-U19-P08"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-S3",
|
||||||
|
"title": "紧急情况",
|
||||||
|
"minutes": 11,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P09",
|
||||||
|
"A1-U19-W01",
|
||||||
|
"A1-U19-W02"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Fire! There's a fire in the kitchen! Come quickly! Don't worry, everybody. Go out of the building. Is anyone hurt? No, we're all safe.",
|
||||||
|
"question": "大家现在怎么样?",
|
||||||
|
"options": [
|
||||||
|
"都很安全",
|
||||||
|
"有人受伤",
|
||||||
|
"还在厨房里"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Don't worry."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Please come quickly!"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "There's a fire!"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Is it true?\nMy friend Ben was lucky. He had a real problem in a big city. He was on a bridge, and a poor old woman was in danger. The road was dangerous. She had a fall. Ben ran to her quickly and helped her. People say he saved her. Now Ben tells this story, and his reason is this: \"Don't touch your phone. Look at the people around you!\" Some people throw things on the road, and some people help.",
|
||||||
|
"question": "Ben 做了什么?",
|
||||||
|
"options": [
|
||||||
|
"帮了摔倒的老人",
|
||||||
|
"报了警",
|
||||||
|
"救了火"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:喊着火了,请人快点来。",
|
||||||
|
"example": "There's a fire! Please come quickly!",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-W02",
|
||||||
|
"A1-U19-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "朋友很害怕,用英语安慰他,并说你们要快点出去。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P09",
|
||||||
|
"A1-U19-W01"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U19-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "在街上包被抢",
|
||||||
|
"learnerRole": "游客",
|
||||||
|
"aiRole": "路人",
|
||||||
|
"setting": "你在街上,有人抢走了你的包,你向路人求助。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Are you OK? Are you in trouble? What happened?",
|
||||||
|
"goal": "说有人拿走了你的包",
|
||||||
|
"model": "Someone took my bag!",
|
||||||
|
"zh": "有人拿走了我的包!",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Oh no! What was in it?",
|
||||||
|
"goal": "说钱包在里面,情况紧急",
|
||||||
|
"model": "My wallet. It's an emergency. I need help.",
|
||||||
|
"zh": "我的钱包在里面。情况紧急,我需要帮助。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P11",
|
||||||
|
"A1-U19-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Don't worry. I can help you.",
|
||||||
|
"goal": "请对方报警",
|
||||||
|
"model": "Please call the police!",
|
||||||
|
"zh": "请报警!",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK. I can call them now.",
|
||||||
|
"goal": "请他们快点来",
|
||||||
|
"model": "Can they come quickly?",
|
||||||
|
"zh": "他们能快点来吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Good idea. Do you know a police station near here?",
|
||||||
|
"goal": "问警察局在哪",
|
||||||
|
"model": "No. Where is the police station?",
|
||||||
|
"zh": "警察局在哪里?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P04"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "在酒店前台说丢了护照",
|
||||||
|
"learnerRole": "客人",
|
||||||
|
"aiRole": "酒店前台",
|
||||||
|
"setting": "你回到酒店,发现护照不见了。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello. You look worried.",
|
||||||
|
"goal": "说你找不到护照",
|
||||||
|
"model": "I can't find my passport.",
|
||||||
|
"zh": "我找不到我的护照了。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Oh no! When was the last time you had it?",
|
||||||
|
"goal": "说当时在出租车上",
|
||||||
|
"model": "I was in a taxi.",
|
||||||
|
"zh": "我当时在出租车上。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Do you remember the taxi?",
|
||||||
|
"goal": "说不记得,钱包也丢了",
|
||||||
|
"model": "No. And I lost my wallet.",
|
||||||
|
"zh": "不记得。而且我的钱包也丢了。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Don't worry. We can call the taxi office.",
|
||||||
|
"goal": "问有没有人会说中文",
|
||||||
|
"model": "Thank you. Does anyone speak Chinese here?",
|
||||||
|
"zh": "谢谢。这里有人会说中文吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Yes, Mr Wang can help you.",
|
||||||
|
"goal": "说你需要帮助",
|
||||||
|
"model": "Great. I need help.",
|
||||||
|
"zh": "太好了。我需要帮助。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P10"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "朋友遇到紧急情况",
|
||||||
|
"learnerRole": "你",
|
||||||
|
"aiRole": "慌张的朋友",
|
||||||
|
"setting": "你和朋友在公寓里,朋友突然跑过来喊你。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Come here! Come here!",
|
||||||
|
"goal": "问发生了什么",
|
||||||
|
"model": "What happened?",
|
||||||
|
"zh": "发生了什么事?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "There's a fire in the kitchen!",
|
||||||
|
"goal": "说着火了,要快点",
|
||||||
|
"model": "A fire? Quickly!",
|
||||||
|
"zh": "着火了?快!",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-W02",
|
||||||
|
"A1-U19-W01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "What can we do?",
|
||||||
|
"goal": "叫朋友别担心,报警",
|
||||||
|
"model": "Don't worry. Call the police.",
|
||||||
|
"zh": "别担心。报警。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P09",
|
||||||
|
"A1-U19-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "The number is 110?",
|
||||||
|
"goal": "说这是紧急情况,要叫他们快点来",
|
||||||
|
"model": "Yes. Tell them it's an emergency.",
|
||||||
|
"zh": "对。告诉他们这是紧急情况。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P11"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK! Are you OK?",
|
||||||
|
"goal": "说你需要帮助,不会英语的邻居有人会说中文吗",
|
||||||
|
"model": "I need help. Does anyone speak Chinese?",
|
||||||
|
"zh": "我需要帮助。有人会说中文吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P10",
|
||||||
|
"A1-U19-P08"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U19-T1",
|
||||||
|
"sceneId": "A1-U19-C1",
|
||||||
|
"goal": "包被抢后向路人求助并找警察",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P02",
|
||||||
|
"A1-U19-P11",
|
||||||
|
"A1-U19-P10",
|
||||||
|
"A1-U19-P03",
|
||||||
|
"A1-U19-W01",
|
||||||
|
"A1-U19-P04"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"发生了什么",
|
||||||
|
"报警",
|
||||||
|
"警察局"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-T2",
|
||||||
|
"sceneId": "A1-U19-C2",
|
||||||
|
"goal": "向酒店说明护照和钱包丢失的经过",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P05",
|
||||||
|
"A1-U19-P07",
|
||||||
|
"A1-U19-P01",
|
||||||
|
"A1-U19-P08",
|
||||||
|
"A1-U19-P10"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"丢了什么",
|
||||||
|
"在哪里丢的",
|
||||||
|
"求助"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-T3",
|
||||||
|
"sceneId": "A1-U19-C3",
|
||||||
|
"goal": "家里着火时和朋友应对",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U19-P06",
|
||||||
|
"A1-U19-W02",
|
||||||
|
"A1-U19-W01",
|
||||||
|
"A1-U19-P09",
|
||||||
|
"A1-U19-P03",
|
||||||
|
"A1-U19-P11",
|
||||||
|
"A1-U19-P10",
|
||||||
|
"A1-U19-P08"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"情况",
|
||||||
|
"报警",
|
||||||
|
"求助"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U19-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "有人在求助",
|
||||||
|
"text": "Excuse me! I need help — it's an emergency! A thief took my bag on the bus and ran away. I think somebody wanted to steal my money. My passport and my wallet are in the bag! This is real trouble. Please call the police and report it. Where is the police station? Is it safe here? I was on the bus from the airport. I looked everywhere, but I can't find my phone. I made a big mistake — I didn't hold my bag. It's dangerous here! Does anyone speak Chinese? Please help me quickly. Thank you very much.",
|
||||||
|
"glosses": {
|
||||||
|
"ran": "跑(过去式)",
|
||||||
|
"anyone": "任何人",
|
||||||
|
"made": "make 的过去式;made a mistake 犯了错"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "这个人为什么求助?",
|
||||||
|
"options": [
|
||||||
|
"包被小偷拿走了",
|
||||||
|
"找不到酒店",
|
||||||
|
"想问路"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "他的护照在哪里?",
|
||||||
|
"options": [
|
||||||
|
"在被拿走的包里",
|
||||||
|
"在酒店",
|
||||||
|
"在口袋里"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:丢了钱包",
|
||||||
|
"text": "Anna: What happened? You look worried. Are you in trouble?\nBen: I lost my wallet! I can't find it anywhere. I think a thief took it.\nAnna: Don't worry. Where were you? Try to remember.\nBen: I was in the cafe near the station. I guess I left it on the table. It's a silly mistake.\nAnna: Maybe nobody took it. Was there money in it?\nBen: Yes, and my ID card. Do you believe it's still there?\nAnna: Maybe. It's not a dangerous place; people are kind and honest there. Let's go back and look.\nBen: You're right. I'm lucky you're here. If we can't find it, we'll report it at the police station.\nAnna: Good plan. That's the true way to be safe.\nBen: Thank you so much. You saved me!",
|
||||||
|
"glosses": {
|
||||||
|
"anywhere": "任何地方",
|
||||||
|
"silly": "傻的",
|
||||||
|
"nobody": "没有人",
|
||||||
|
"honest": "诚实的"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "Ben 觉得钱包丢在哪里了?",
|
||||||
|
"options": [
|
||||||
|
"车站旁边的咖啡店",
|
||||||
|
"公交车上",
|
||||||
|
"酒店房间"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "如果找不到,他们打算怎么办?",
|
||||||
|
"options": [
|
||||||
|
"去派出所报案",
|
||||||
|
"回家",
|
||||||
|
"给妈妈打电话"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "ambulance",
|
||||||
|
"reason": "B1;A1 用 call the police / It's an emergency 求助"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "embassy",
|
||||||
|
"reason": "B2;A1 用 your country's office 解释"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,857 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U20",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "打电话与留言",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "留下姓名、号码和简短信息",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "123",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "141",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "只用 I'll call again later 表示马上决定的事"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "237",
|
||||||
|
"use": "receptive"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "117",
|
||||||
|
"use": "active"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U20-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Hello, this is Chen.",
|
||||||
|
"zh": "你好,我是陈。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"this is"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Hello, this is Anna from room 305.",
|
||||||
|
"zh": "你好,我是 305 房间的安娜。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "打电话时先说你是谁。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Can I speak to Mr Brown?",
|
||||||
|
"zh": "我能和布朗先生通话吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"speak to"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Can I speak to Lucy, please?",
|
||||||
|
"zh": "请问露西在吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "打电话找你的朋友汤姆。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Who's calling, please?",
|
||||||
|
"zh": "请问您是哪位?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"who's calling",
|
||||||
|
"who is calling"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Hello. Who's calling?",
|
||||||
|
"zh": "你好,请问是哪位?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "接电话时问对方是谁。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Hold on, please.",
|
||||||
|
"zh": "请稍等。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"hold on"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Hold on. I can get him.",
|
||||||
|
"zh": "稍等,我去叫他。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "请对方在电话里稍等。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "He's not here right now.",
|
||||||
|
"zh": "他现在不在。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"not here right now"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Sorry, she's not here right now.",
|
||||||
|
"zh": "抱歉,她现在不在。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "告诉打电话的人你妈妈不在。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Can I leave a message?",
|
||||||
|
"zh": "我可以留个言吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"leave a message"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Do you want to leave a message?",
|
||||||
|
"zh": "您要留言吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "要找的人不在,问能不能留言。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-P07",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Can you call me back?",
|
||||||
|
"zh": "你能给我回电话吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"call me back",
|
||||||
|
"call you back"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I can call you back later.",
|
||||||
|
"zh": "我晚点给你回电话。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "请对方给你回电话。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-P08",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "What's your mobile number?",
|
||||||
|
"zh": "你的手机号是多少?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"mobile number",
|
||||||
|
"phone number"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "My mobile number is 138 2046 7751.",
|
||||||
|
"zh": "我的手机号是 138 2046 7751。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问对方的手机号。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-P09",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Sorry, I can't hear you.",
|
||||||
|
"zh": "抱歉,我听不见你说话。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"can't hear"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I can't hear you. Can you speak slowly?",
|
||||||
|
"zh": "我听不见,你能慢点说吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "电话信号不好,说你听不见。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-P10",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Sorry, wrong number.",
|
||||||
|
"zh": "抱歉,打错了。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"wrong number"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I think you have the wrong number.",
|
||||||
|
"zh": "我想你打错了。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "有人打错电话,告诉他打错了。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-P11",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I'll call again later.",
|
||||||
|
"zh": "我晚点再打。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"call again",
|
||||||
|
"call later"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "OK, I'll call later.",
|
||||||
|
"zh": "好,我晚点再打。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "对方忙,说你晚点再打。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-P12",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Please text me.",
|
||||||
|
"zh": "请给我发短信。",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "text 为 A2 动词,旅行中发短信确认地址很常用",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"text me"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Text me the address, please.",
|
||||||
|
"zh": "请把地址发短信给我。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "请朋友把时间发短信给你。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R01",
|
||||||
|
"en": "telephone",
|
||||||
|
"zh": "电话"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R02",
|
||||||
|
"en": "mail",
|
||||||
|
"zh": "邮件"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R03",
|
||||||
|
"en": "ring",
|
||||||
|
"zh": "(电话)响"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R04",
|
||||||
|
"en": "voice",
|
||||||
|
"zh": "声音"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R05",
|
||||||
|
"en": "conversation",
|
||||||
|
"zh": "对话"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R06",
|
||||||
|
"en": "talk",
|
||||||
|
"zh": "说话"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R07",
|
||||||
|
"en": "mind",
|
||||||
|
"zh": "介意(Never mind.)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R08",
|
||||||
|
"en": "grandma",
|
||||||
|
"zh": "奶奶;外婆"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R09",
|
||||||
|
"en": "grandpa",
|
||||||
|
"zh": "爷爷;外公"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R10",
|
||||||
|
"en": "mum",
|
||||||
|
"zh": "妈妈"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R11",
|
||||||
|
"en": "haircut",
|
||||||
|
"zh": "理发"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R12",
|
||||||
|
"en": "class",
|
||||||
|
"zh": "课;班"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R13",
|
||||||
|
"en": "lesson",
|
||||||
|
"zh": "课"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R14",
|
||||||
|
"en": "course",
|
||||||
|
"zh": "课程"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R15",
|
||||||
|
"en": "test",
|
||||||
|
"zh": "考试"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R16",
|
||||||
|
"en": "college",
|
||||||
|
"zh": "学院"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R17",
|
||||||
|
"en": "club",
|
||||||
|
"zh": "俱乐部"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R18",
|
||||||
|
"en": "group",
|
||||||
|
"zh": "小组"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R19",
|
||||||
|
"en": "owner",
|
||||||
|
"zh": "老板;主人"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-R20",
|
||||||
|
"en": "worker",
|
||||||
|
"zh": "工作人员"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U20-S1",
|
||||||
|
"title": "打电话找人",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P01",
|
||||||
|
"A1-U20-P02",
|
||||||
|
"A1-U20-P03",
|
||||||
|
"A1-U20-P04",
|
||||||
|
"A1-U20-P05"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Hello? Hello, this is Chen. Can I speak to Mr Brown? Who's calling, please? Chen, from London. Hold on, please. ... Sorry, he's not here right now.",
|
||||||
|
"question": "布朗先生现在怎么样?",
|
||||||
|
"options": [
|
||||||
|
"不在",
|
||||||
|
"在开会",
|
||||||
|
"马上来接电话"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Hello, this is Chen."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Can I speak to Mr Brown?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Who's calling, please?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Hold on, please.",
|
||||||
|
"tip": "hold on 连读成 /həʊl dɒn/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "He's not here right now."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Phone talk\nThe phone rings. Grandma answers.\nGrandma: Hello?\nLeo: Hi Grandma, this is Leo. Can I speak to Mum?\nGrandma: Hold on... Sorry, she's not here right now. She's at her dance class. Do you want to talk to Grandpa?\nLeo: Yes, please!\nIt's a short conversation, but Grandma loves Leo's voice.",
|
||||||
|
"question": "妈妈现在在哪里?",
|
||||||
|
"options": [
|
||||||
|
"在舞蹈课上",
|
||||||
|
"在上班",
|
||||||
|
"在家里"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:说你是谁,再问能不能和汤姆通话。",
|
||||||
|
"example": "Hello, this is Chen. Can I speak to Tom?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P01",
|
||||||
|
"A1-U20-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "你接到电话,要找的人不在,用英语问对方是谁并说那人不在。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P03",
|
||||||
|
"A1-U20-P04",
|
||||||
|
"A1-U20-P05"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-S2",
|
||||||
|
"title": "留言和回电",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P06",
|
||||||
|
"A1-U20-P07",
|
||||||
|
"A1-U20-P08",
|
||||||
|
"A1-U20-P11",
|
||||||
|
"A1-U20-P12"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Can I leave a message? Sure. Can you ask Lucy to call me back? What's your mobile number? It's 139 5520 8864. OK. Or I'll call again later.",
|
||||||
|
"question": "打电话的人希望露西做什么?",
|
||||||
|
"options": [
|
||||||
|
"给他回电话",
|
||||||
|
"发邮件",
|
||||||
|
"去找他"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Can I leave a message?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Can you call me back?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "What's your mobile number?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'll call again later."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Please text me."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Phone messages\nFor: Mr Brown\nFrom: Sara, the owner of Sun Hair\nMessage: Your haircut is on Friday at 3 pm. Please call her back.\n-\nFor: Ella\nFrom: Kate, the College English Club\nMessage: The group lesson is on Monday. Your test is next week. Please text her or send an email or mail. Her number is 136 2210 5547.",
|
||||||
|
"question": "艾拉的考试在什么时候?",
|
||||||
|
"options": [
|
||||||
|
"下周",
|
||||||
|
"周一",
|
||||||
|
"周五"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:问能不能留言,请对方回电话。",
|
||||||
|
"example": "Can I leave a message? Can you call me back?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P06",
|
||||||
|
"A1-U20-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语给不在的朋友留言:说你是谁,请他回电话,并留下手机号。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P01",
|
||||||
|
"A1-U20-P06",
|
||||||
|
"A1-U20-P07",
|
||||||
|
"A1-U20-P08"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-S3",
|
||||||
|
"title": "电话里的问题",
|
||||||
|
"minutes": 11,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P09",
|
||||||
|
"A1-U20-P10"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Hello? Is that Max? Sorry, wrong number. Oh, sorry! ... Hello, Max? Sorry, I can't hear you. Can you speak slowly?",
|
||||||
|
"question": "第一个电话出了什么问题?",
|
||||||
|
"options": [
|
||||||
|
"打错了",
|
||||||
|
"听不见",
|
||||||
|
"没人接"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Sorry, I can't hear you."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Sorry, wrong number."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Can you spell your name, please?"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "Phone help for your trip\nCan't hear the worker on the telephone? Say \"Sorry, I can't hear you.\" Ask them to speak slowly or to spell a word.\nWrong number? Say sorry. Never mind!\nA course or a class on the phone is not easy. Text or email is OK too.",
|
||||||
|
"question": "电话里听不清时可以怎么做?",
|
||||||
|
"options": [
|
||||||
|
"请对方慢点说或拼出来",
|
||||||
|
"马上挂电话",
|
||||||
|
"大声喊"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:说你听不见,请对方慢点说。",
|
||||||
|
"example": "Sorry, I can't hear you. Can you speak slowly?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P09"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "有人打错电话找“Max”,用英语礼貌地告诉他打错了。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P10",
|
||||||
|
"A1-U20-P03"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U20-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "打电话到朋友家",
|
||||||
|
"learnerRole": "你",
|
||||||
|
"aiRole": "朋友的家人",
|
||||||
|
"setting": "你打电话找朋友汤姆,接电话的是他的家人。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello?",
|
||||||
|
"goal": "说你是谁",
|
||||||
|
"model": "Hello, this is Chen.",
|
||||||
|
"zh": "你好,我是陈。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Hi, Chen.",
|
||||||
|
"goal": "问能不能和汤姆通话",
|
||||||
|
"model": "Can I speak to Tom, please?",
|
||||||
|
"zh": "请问汤姆在吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sorry, he's not here right now.",
|
||||||
|
"goal": "问能不能留言",
|
||||||
|
"model": "Can I leave a message?",
|
||||||
|
"zh": "我可以留个言吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure.",
|
||||||
|
"goal": "请他回电话",
|
||||||
|
"model": "Can you ask him to call me back?",
|
||||||
|
"zh": "你能让他给我回电话吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK. What's your mobile number?",
|
||||||
|
"goal": "留下号码,说晚点再打",
|
||||||
|
"model": "It's 138 2046 7751. Or I'll call again later.",
|
||||||
|
"zh": "138 2046 7751。或者我晚点再打。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P11"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "接电话",
|
||||||
|
"learnerRole": "接电话的人",
|
||||||
|
"aiRole": "打电话来的人",
|
||||||
|
"setting": "你在朋友家,电话响了,你帮忙接电话。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello, can I speak to Lily?",
|
||||||
|
"goal": "问对方是谁",
|
||||||
|
"model": "Who's calling, please?",
|
||||||
|
"zh": "请问您是哪位?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "This is Ben, from her English class.",
|
||||||
|
"goal": "请对方稍等",
|
||||||
|
"model": "Hold on, please.",
|
||||||
|
"zh": "请稍等。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P04"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK.",
|
||||||
|
"goal": "说她现在不在",
|
||||||
|
"model": "Sorry, she's not here right now.",
|
||||||
|
"zh": "抱歉,她现在不在。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P05"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Oh. Can she call me back?",
|
||||||
|
"goal": "问对方的手机号",
|
||||||
|
"model": "Sure. What's your mobile number?",
|
||||||
|
"zh": "好的。你的手机号是多少?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "It's 136... hello?",
|
||||||
|
"goal": "说听不见",
|
||||||
|
"model": "Sorry, I can't hear you.",
|
||||||
|
"zh": "抱歉,我听不见你说话。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P09"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "打错电话和发短信",
|
||||||
|
"learnerRole": "你",
|
||||||
|
"aiRole": "陌生人/朋友",
|
||||||
|
"setting": "你打给酒店想确认地址,结果先打错,再打给朋友。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hello?",
|
||||||
|
"goal": "说你是谁,问能不能和 Sam 通话",
|
||||||
|
"model": "Hello, this is Chen. Can I speak to Sam?",
|
||||||
|
"zh": "你好,我是陈。能和 Sam 通话吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P01",
|
||||||
|
"A1-U20-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sam? There's no Sam here.",
|
||||||
|
"goal": "说抱歉,打错了",
|
||||||
|
"model": "Oh, sorry. Wrong number.",
|
||||||
|
"zh": "哦,抱歉,打错了。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "No problem. Bye.",
|
||||||
|
"goal": "说你晚点再打",
|
||||||
|
"model": "OK, I'll call again later.",
|
||||||
|
"zh": "好,我晚点再打。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P11"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "(Sam) Hi Chen! Sorry, I'm busy right now.",
|
||||||
|
"goal": "请他发短信给你地址",
|
||||||
|
"model": "Please text me the address.",
|
||||||
|
"zh": "请把地址发短信给我。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P12"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Sure. I can text you in five minutes.",
|
||||||
|
"goal": "请他之后给你回电话",
|
||||||
|
"model": "Thanks. Can you call me back tonight?",
|
||||||
|
"zh": "谢谢。你今晚能给我回电话吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P07"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U20-T1",
|
||||||
|
"sceneId": "A1-U20-C1",
|
||||||
|
"goal": "打电话找人,对方不在时留言",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P01",
|
||||||
|
"A1-U20-P02",
|
||||||
|
"A1-U20-P06",
|
||||||
|
"A1-U20-P07",
|
||||||
|
"A1-U20-P11"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"你是谁",
|
||||||
|
"找谁",
|
||||||
|
"留言内容"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-T2",
|
||||||
|
"sceneId": "A1-U20-C2",
|
||||||
|
"goal": "帮别人接电话并记下对方信息",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P03",
|
||||||
|
"A1-U20-P04",
|
||||||
|
"A1-U20-P05",
|
||||||
|
"A1-U20-P08",
|
||||||
|
"A1-U20-P09"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"对方是谁",
|
||||||
|
"手机号"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-T3",
|
||||||
|
"sceneId": "A1-U20-C3",
|
||||||
|
"goal": "处理打错电话,并请朋友发短信",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U20-P01",
|
||||||
|
"A1-U20-P02",
|
||||||
|
"A1-U20-P10",
|
||||||
|
"A1-U20-P11",
|
||||||
|
"A1-U20-P12",
|
||||||
|
"A1-U20-P07"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"打错",
|
||||||
|
"短信",
|
||||||
|
"回电"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U20-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "一条电话留言",
|
||||||
|
"text": "Hello, this is a telephone message for Mr Brown. This is Chen from the hotel. Your phone rang, but I couldn't reach you, so I'll leave a short message. Sorry if my voice is not clear. I'm calling about your reservation for next week. My grandma and grandpa will visit, so I moved your room. Please call me back for a short conversation, or text me. My mobile number is 138 — let me repeat, one, three, eight. I have an English class and a haircut this afternoon, so if I don't answer, call again later. Never mind if it's late. Thank you. Bye.",
|
||||||
|
"glosses": {
|
||||||
|
"reach": "联系到",
|
||||||
|
"moved": "换了",
|
||||||
|
"couldn't": "不能(过去式)",
|
||||||
|
"clear": "清楚的"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "这条留言是谁留给谁的?",
|
||||||
|
"options": [
|
||||||
|
"Chen 留给 Mr Brown",
|
||||||
|
"Mr Brown 留给 Chen",
|
||||||
|
"Anna 留给 Ben"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "留言的人希望对方做什么?",
|
||||||
|
"options": [
|
||||||
|
"给他回电话",
|
||||||
|
"来酒店",
|
||||||
|
"发邮件"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:打电话留言",
|
||||||
|
"text": "Chen: Hello, this is Chen. Can I speak to Mr Brown?\nWorker: Hold on, please... Sorry, he's not here right now. This is his co-worker.\nChen: Can I leave a message? I couldn't reach him by mail.\nWorker: Of course. I'm the office worker today.\nChen: Please ask him to call me back. It's about a college course and a club test next week.\nWorker: Sorry, I can't hear you. Your voice is not clear. Can you say the number again?\nChen: Sure. My mobile is 139... I'll text you too. Is Mr Brown the owner?\nWorker: Yes, he owns the group. Never mind, I'll tell him after his class.\nChen: Thank you. When is he back?\nWorker: Maybe this afternoon, after his lesson.\nChen: OK, I'll call again later. Goodbye.",
|
||||||
|
"glosses": {
|
||||||
|
"staff": "员工,服务员",
|
||||||
|
"goodbye": "再见",
|
||||||
|
"co-worker": "同事",
|
||||||
|
"owns": "拥有",
|
||||||
|
"office": "办公室",
|
||||||
|
"reach": "联系到",
|
||||||
|
"clear": "清楚的"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "Mr Brown 在吗?",
|
||||||
|
"options": [
|
||||||
|
"不在",
|
||||||
|
"在,正在开会",
|
||||||
|
"在,马上来"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "Chen 希望 Mr Brown 做什么?",
|
||||||
|
"options": [
|
||||||
|
"给他回电话",
|
||||||
|
"来酒店",
|
||||||
|
"发邮件给他"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "voicemail",
|
||||||
|
"reason": "不在 CEFR-J 表中;A1 用 leave a message 表达"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,952 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"id": "A1-U21",
|
||||||
|
"revision": 1,
|
||||||
|
"level": "A1",
|
||||||
|
"title": "周末计划",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "说将要做的事、邀请朋友",
|
||||||
|
"status": "draft",
|
||||||
|
"meta": {
|
||||||
|
"draftedBy": "claude-opus-5",
|
||||||
|
"draftedAt": "2026-09-17",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5",
|
||||||
|
"CEFR-J Grammar Profile 20180315"
|
||||||
|
],
|
||||||
|
"reviews": [],
|
||||||
|
"frozenAt": null
|
||||||
|
},
|
||||||
|
"names": [],
|
||||||
|
"grammar": [
|
||||||
|
{
|
||||||
|
"id": "61",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "用 What are you doing this weekend? 说已经定好的安排"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "142",
|
||||||
|
"use": "active",
|
||||||
|
"reason": "Would you like to ...? 是邀请别人时的固定句型"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "120",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "123",
|
||||||
|
"use": "active"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "150",
|
||||||
|
"use": "active"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"coreItems": [
|
||||||
|
{
|
||||||
|
"id": "A1-U21-P01",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "What are you doing this weekend?",
|
||||||
|
"zh": "你这个周末做什么?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"what are you doing"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "What are you doing on Saturday?",
|
||||||
|
"zh": "你周六做什么?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问朋友这个周末做什么。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-P02",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I'm going to the beach.",
|
||||||
|
"zh": "我要去海滩。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"going to the"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'm going to the mountains with my family.",
|
||||||
|
"zh": "我要和家人去山里。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说你周六要去海滩。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-P03",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Do you want to come?",
|
||||||
|
"zh": "你想一起来吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"want to come"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "We're going to a concert. Do you want to come?",
|
||||||
|
"zh": "我们要去听音乐会,你想来吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "问朋友想不想一起来。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-P04",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Would you like to join us?",
|
||||||
|
"zh": "你愿意和我们一起吗?",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"would you like to"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Would you like to play tennis?",
|
||||||
|
"zh": "你想打网球吗?"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "礼貌地邀请朋友加入你们。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-P05",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "That sounds great!",
|
||||||
|
"zh": "听起来很棒!",
|
||||||
|
"sceneWord": true,
|
||||||
|
"sceneReason": "sound 为 A2 动词,但回应邀请时最自然的说法就是它",
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"sounds great",
|
||||||
|
"sounds good",
|
||||||
|
"sounds fun"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "A picnic? That sounds good!",
|
||||||
|
"zh": "野餐?听起来不错!"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "朋友邀请你,你很高兴地回应。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-P06",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "I'd love to.",
|
||||||
|
"zh": "我很乐意。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"i'd love to"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I'd love to come!",
|
||||||
|
"zh": "我很想来!"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "接受朋友的邀请。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-P07",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Sorry, I can't.",
|
||||||
|
"zh": "抱歉,我去不了。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"sorry, i can't"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Sorry, I can't. I'm busy on Sunday.",
|
||||||
|
"zh": "抱歉,我去不了,我周日没空。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "礼貌地拒绝邀请。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-P08",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Maybe next time.",
|
||||||
|
"zh": "下次吧。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"next time"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "OK, maybe next time.",
|
||||||
|
"zh": "好吧,下次吧。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "拒绝邀请后说下次吧。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-P09",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Let's go together.",
|
||||||
|
"zh": "我们一起去吧。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"go together"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Let's go together on Sunday.",
|
||||||
|
"zh": "我们周日一起去吧。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "提议和朋友一起去。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-P10",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "Let's play tennis.",
|
||||||
|
"zh": "我们打网球吧。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"play tennis",
|
||||||
|
"play football",
|
||||||
|
"play basketball",
|
||||||
|
"play the guitar",
|
||||||
|
"play the piano"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "I play football on Sundays.",
|
||||||
|
"zh": "我周日踢足球。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "约朋友打篮球。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-P11",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "We can have a picnic.",
|
||||||
|
"zh": "我们可以去野餐。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"have a picnic"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "We can have a picnic in the park.",
|
||||||
|
"zh": "我们可以在公园野餐。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "提议去野餐。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-P12",
|
||||||
|
"type": "phrase",
|
||||||
|
"en": "It's fun.",
|
||||||
|
"zh": "很好玩。",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"fun"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "Dancing is really fun.",
|
||||||
|
"zh": "跳舞真的很好玩。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说爬山很好玩。"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-W01",
|
||||||
|
"type": "word",
|
||||||
|
"en": "hobby",
|
||||||
|
"zh": "爱好",
|
||||||
|
"sceneWord": false,
|
||||||
|
"match": [
|
||||||
|
[
|
||||||
|
"hobby",
|
||||||
|
"hobbies"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"example": {
|
||||||
|
"en": "My hobby is taking photos.",
|
||||||
|
"zh": "我的爱好是拍照。"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"prompt": "说说你的爱好。"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"receptiveWords": [
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R01",
|
||||||
|
"en": "concert",
|
||||||
|
"zh": "音乐会"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R02",
|
||||||
|
"en": "football",
|
||||||
|
"zh": "足球"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R03",
|
||||||
|
"en": "basketball",
|
||||||
|
"zh": "篮球"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R04",
|
||||||
|
"en": "soccer",
|
||||||
|
"zh": "足球(美式说法)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R05",
|
||||||
|
"en": "sport",
|
||||||
|
"zh": "运动"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R06",
|
||||||
|
"en": "game",
|
||||||
|
"zh": "比赛;游戏"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R07",
|
||||||
|
"en": "team",
|
||||||
|
"zh": "队"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R08",
|
||||||
|
"en": "player",
|
||||||
|
"zh": "选手"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R09",
|
||||||
|
"en": "ball",
|
||||||
|
"zh": "球"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R10",
|
||||||
|
"en": "fan",
|
||||||
|
"zh": "迷;粉丝"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R11",
|
||||||
|
"en": "activity",
|
||||||
|
"zh": "活动"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R12",
|
||||||
|
"en": "art",
|
||||||
|
"zh": "艺术"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R13",
|
||||||
|
"en": "drama",
|
||||||
|
"zh": "戏剧"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R14",
|
||||||
|
"en": "theater",
|
||||||
|
"zh": "剧院"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R15",
|
||||||
|
"en": "event",
|
||||||
|
"zh": "活动;项目"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R16",
|
||||||
|
"en": "painting",
|
||||||
|
"zh": "画;绘画"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R17",
|
||||||
|
"en": "photo",
|
||||||
|
"zh": "照片"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R18",
|
||||||
|
"en": "piano",
|
||||||
|
"zh": "钢琴"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R19",
|
||||||
|
"en": "guitar",
|
||||||
|
"zh": "吉他"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R20",
|
||||||
|
"en": "singer",
|
||||||
|
"zh": "歌手"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R21",
|
||||||
|
"en": "musician",
|
||||||
|
"zh": "音乐家"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R22",
|
||||||
|
"en": "actor",
|
||||||
|
"zh": "演员"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R23",
|
||||||
|
"en": "band",
|
||||||
|
"zh": "乐队"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R24",
|
||||||
|
"en": "camp",
|
||||||
|
"zh": "营地;露营"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R25",
|
||||||
|
"en": "magazine",
|
||||||
|
"zh": "杂志"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R26",
|
||||||
|
"en": "mountain",
|
||||||
|
"zh": "山"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R27",
|
||||||
|
"en": "climb",
|
||||||
|
"zh": "爬"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R28",
|
||||||
|
"en": "exciting",
|
||||||
|
"zh": "令人兴奋的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R29",
|
||||||
|
"en": "excellent",
|
||||||
|
"zh": "极好的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R30",
|
||||||
|
"en": "win",
|
||||||
|
"zh": "赢"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R31",
|
||||||
|
"en": "spend",
|
||||||
|
"zh": "度过;花"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-R32",
|
||||||
|
"en": "choose",
|
||||||
|
"zh": "选择"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"id": "A1-U21-S1",
|
||||||
|
"title": "问周末安排",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P01",
|
||||||
|
"A1-U21-P02",
|
||||||
|
"A1-U21-P12",
|
||||||
|
"A1-U21-W01"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "What are you doing this weekend? I'm going to the beach on Saturday. And on Sunday? I'm going to the mountains. I love climbing. It's fun!",
|
||||||
|
"question": "说话人周日去哪里?",
|
||||||
|
"options": [
|
||||||
|
"山里",
|
||||||
|
"海滩",
|
||||||
|
"公园"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "What are you doing this weekend?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'm going to the beach."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "It's fun."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "My hobby is taking photos.",
|
||||||
|
"tip": "hobby 读 /ˈhɒbi/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "My hobbies\nMia: I play the piano and the guitar. I'm in a band, and I love music. My favorite singer is from London.\nLeo: I like sports. I play football and basketball. My team wins most games! I'm a big fan of soccer too.\nNina: I'm interested in art. I go to the theater and look at paintings. I read an art magazine every month.\nBen: Fishing and taking photos. I spend both days of the weekend at the river.",
|
||||||
|
"question": "谁对艺术感兴趣?",
|
||||||
|
"options": [
|
||||||
|
"Nina",
|
||||||
|
"Mia",
|
||||||
|
"Leo"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:问朋友周末做什么,再说你要去海滩。",
|
||||||
|
"example": "What are you doing this weekend? I'm going to the beach.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P01",
|
||||||
|
"A1-U21-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语说说你这个周末的安排和你的爱好。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P02",
|
||||||
|
"A1-U21-W01",
|
||||||
|
"A1-U21-P12"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-S2",
|
||||||
|
"title": "邀请和回应",
|
||||||
|
"minutes": 13,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P03",
|
||||||
|
"A1-U21-P04",
|
||||||
|
"A1-U21-P05",
|
||||||
|
"A1-U21-P06",
|
||||||
|
"A1-U21-P07",
|
||||||
|
"A1-U21-P08"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "We're going to a concert on Friday. Would you like to join us? That sounds great! I'd love to. And you, Sam? Do you want to come? Sorry, I can't. I'm busy. Maybe next time.",
|
||||||
|
"question": "Sam 为什么不去?",
|
||||||
|
"options": [
|
||||||
|
"他没空",
|
||||||
|
"他不喜欢音乐会",
|
||||||
|
"他生病了"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Do you want to come?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Would you like to join us?",
|
||||||
|
"tip": "Would you 连读成 /wʊdʒu/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "That sounds great!"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "I'd love to."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Sorry, I can't."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Maybe next time."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "City events this weekend\nSaturday\n· Excellent music: a band and musicians from ten countries. 7 pm, City Park.\n· Kids' drama: a play by young actors. 3 pm, the theater.\nSunday\n· Football game: our city team and the Tokyo team. Come and watch the players! 2 pm.\n· Camp by the river: fishing and dancing activities. Choose one or do both!\nAn exciting weekend for everyone. Which event would you like to go to?",
|
||||||
|
"question": "周六下午有什么活动?",
|
||||||
|
"options": [
|
||||||
|
"儿童戏剧",
|
||||||
|
"足球比赛",
|
||||||
|
"音乐会"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:邀请朋友一起来,再替他说“我很乐意”。",
|
||||||
|
"example": "Would you like to join us? I'd love to.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P04",
|
||||||
|
"A1-U21-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "朋友邀请你周日去看足球,你没空,用英语礼貌拒绝。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P07",
|
||||||
|
"A1-U21-P08"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-S3",
|
||||||
|
"title": "一起去吧",
|
||||||
|
"minutes": 12,
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P09",
|
||||||
|
"A1-U21-P10",
|
||||||
|
"A1-U21-P11"
|
||||||
|
],
|
||||||
|
"listening": {
|
||||||
|
"text": "Let's play tennis on Saturday. Hmm, it's going to be sunny. We can have a picnic too. Great idea! Let's go together.",
|
||||||
|
"question": "他们周六要做什么?",
|
||||||
|
"options": [
|
||||||
|
"打网球和野餐",
|
||||||
|
"去海滩",
|
||||||
|
"看音乐会"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speaking": [
|
||||||
|
{
|
||||||
|
"text": "Let's go together."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Let's play tennis."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "We can have a picnic."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Let's play the piano."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"reading": {
|
||||||
|
"text": "A note from Kate\nHi Lucy,\nAre you free on Sunday? Let's go to the river together. We can have a picnic and play ball. Bring your camera: you can take photos for your hobby. My brother is coming, and he's bringing his guitar. We can play the guitar and sing.\nIt's going to be fun! Text me.\nKate",
|
||||||
|
"question": "Kate 的哥哥要带什么?",
|
||||||
|
"options": [
|
||||||
|
"吉他",
|
||||||
|
"相机",
|
||||||
|
"球"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writing": {
|
||||||
|
"prompt": "写两句话:提议一起去,并说可以去野餐。",
|
||||||
|
"example": "Let's go together. We can have a picnic.",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P09",
|
||||||
|
"A1-U21-P11"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"independent": {
|
||||||
|
"prompt": "用英语约朋友周末做一项运动,并说一起去。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P10",
|
||||||
|
"A1-U21-P09"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"scenes": [
|
||||||
|
{
|
||||||
|
"id": "A1-U21-C1",
|
||||||
|
"kind": "main",
|
||||||
|
"title": "约朋友周末出去玩",
|
||||||
|
"learnerRole": "你",
|
||||||
|
"aiRole": "朋友",
|
||||||
|
"setting": "周五下班后,你和朋友聊周末的计划。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "So, what are you doing this weekend?",
|
||||||
|
"goal": "说你要去海滩",
|
||||||
|
"model": "I'm going to the beach.",
|
||||||
|
"zh": "我要去海滩。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P02"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "The beach? That's nice.",
|
||||||
|
"goal": "邀请朋友一起来",
|
||||||
|
"model": "Do you want to come?",
|
||||||
|
"zh": "你想一起来吗?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P03"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "That sounds great! What can we do there?",
|
||||||
|
"goal": "说可以野餐,很好玩",
|
||||||
|
"model": "We can have a picnic. It's fun.",
|
||||||
|
"zh": "我们可以野餐,很好玩。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P11",
|
||||||
|
"A1-U21-P12"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Can my sister come too?",
|
||||||
|
"goal": "说当然,一起去吧",
|
||||||
|
"model": "Sure. Let's go together.",
|
||||||
|
"zh": "当然。我们一起去吧。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P09"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Great. And after the picnic?",
|
||||||
|
"goal": "提议打网球",
|
||||||
|
"model": "Let's play tennis.",
|
||||||
|
"zh": "我们打网球吧。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P10"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-C2",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "接受和拒绝邀请",
|
||||||
|
"learnerRole": "你",
|
||||||
|
"aiRole": "同事",
|
||||||
|
"setting": "同事邀请你参加周末的活动。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi! What are you doing this weekend?",
|
||||||
|
"goal": "反问对方周末做什么",
|
||||||
|
"model": "Nothing. What are you doing this weekend?",
|
||||||
|
"zh": "没什么安排。你这个周末做什么?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "We're going to a concert on Saturday. Would you like to join us?",
|
||||||
|
"goal": "高兴地接受",
|
||||||
|
"model": "That sounds great! I'd love to.",
|
||||||
|
"zh": "听起来很棒!我很乐意。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P05",
|
||||||
|
"A1-U21-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "And on Sunday, we're going to play football.",
|
||||||
|
"goal": "说抱歉周日去不了",
|
||||||
|
"model": "Sorry, I can't. I'm busy on Sunday.",
|
||||||
|
"zh": "抱歉,我周日去不了,我没空。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P07"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Oh, OK.",
|
||||||
|
"goal": "说下次吧",
|
||||||
|
"model": "Maybe next time.",
|
||||||
|
"zh": "下次吧。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P08"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "What's your hobby, then?",
|
||||||
|
"goal": "说你的爱好",
|
||||||
|
"model": "My hobby is dancing.",
|
||||||
|
"zh": "我的爱好是跳舞。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-W01"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-C3",
|
||||||
|
"kind": "variant",
|
||||||
|
"title": "在青年旅舍认识新朋友",
|
||||||
|
"learnerRole": "游客",
|
||||||
|
"aiRole": "旅舍里的新朋友",
|
||||||
|
"setting": "你住在青年旅舍,和另一位游客聊明天的安排。",
|
||||||
|
"turns": [
|
||||||
|
{
|
||||||
|
"ai": "Hi! Are you here on holiday too?",
|
||||||
|
"goal": "说是的,问对方周末做什么",
|
||||||
|
"model": "Yes. What are you doing this weekend?",
|
||||||
|
"zh": "是的。你这个周末做什么?",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P01"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "I'm going to the mountains. Would you like to join us?",
|
||||||
|
"goal": "高兴地接受",
|
||||||
|
"model": "I'd love to!",
|
||||||
|
"zh": "我很乐意!",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "We can climb and have a picnic.",
|
||||||
|
"goal": "说听起来很好玩",
|
||||||
|
"model": "That sounds great! It's fun.",
|
||||||
|
"zh": "听起来很棒!很好玩。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P05",
|
||||||
|
"A1-U21-P12"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "Do you like sports?",
|
||||||
|
"goal": "说你的爱好是打网球",
|
||||||
|
"model": "Yes. My hobby is tennis. Let's play tennis later.",
|
||||||
|
"zh": "喜欢。我的爱好是网球。之后我们打网球吧。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-W01",
|
||||||
|
"A1-U21-P10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ai": "OK! See you tomorrow at seven.",
|
||||||
|
"goal": "邀请对方晚上和你们吃饭,并说一起去",
|
||||||
|
"model": "Great. Would you like to join us for dinner too? Let's go together.",
|
||||||
|
"zh": "太好了。你也愿意和我们一起吃晚饭吗?我们一起去吧。",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P04",
|
||||||
|
"A1-U21-P09"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"id": "A1-U21-T1",
|
||||||
|
"sceneId": "A1-U21-C1",
|
||||||
|
"goal": "和朋友定下周末去海滩的计划",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P02",
|
||||||
|
"A1-U21-P03",
|
||||||
|
"A1-U21-P11",
|
||||||
|
"A1-U21-P12",
|
||||||
|
"A1-U21-P09",
|
||||||
|
"A1-U21-P10"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"去哪里",
|
||||||
|
"做什么",
|
||||||
|
"谁一起"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-T2",
|
||||||
|
"sceneId": "A1-U21-C2",
|
||||||
|
"goal": "接受一个邀请,礼貌拒绝另一个邀请",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P01",
|
||||||
|
"A1-U21-P05",
|
||||||
|
"A1-U21-P06",
|
||||||
|
"A1-U21-P07",
|
||||||
|
"A1-U21-P08",
|
||||||
|
"A1-U21-W01"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"接受",
|
||||||
|
"拒绝",
|
||||||
|
"爱好"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-T3",
|
||||||
|
"sceneId": "A1-U21-C3",
|
||||||
|
"goal": "和新朋友约好一起去山里",
|
||||||
|
"itemIds": [
|
||||||
|
"A1-U21-P01",
|
||||||
|
"A1-U21-P06",
|
||||||
|
"A1-U21-P05",
|
||||||
|
"A1-U21-P12",
|
||||||
|
"A1-U21-W01",
|
||||||
|
"A1-U21-P10",
|
||||||
|
"A1-U21-P09",
|
||||||
|
"A1-U21-P04"
|
||||||
|
],
|
||||||
|
"slots": [
|
||||||
|
"安排",
|
||||||
|
"爱好",
|
||||||
|
"约定"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "A1-U21-M1",
|
||||||
|
"mode": "listening",
|
||||||
|
"title": "朋友发来周末邀请",
|
||||||
|
"text": "Hi everyone! What are you doing this weekend? There is a big sports event on Saturday. My favorite basketball team has a game, and their best player is excellent. I'm a big fan! We can watch the ball game, and it will be exciting. Do you want to come? On Sunday there is a concert with a band, a singer, a guitar and a piano — a real music activity. Or we can go to the theater for a drama, see some art and paintings, or climb a mountain and camp. Let's choose one and spend the day together. It's fun! Tell me if you'd like to join us.",
|
||||||
|
"glosses": {},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "gist",
|
||||||
|
"question": "这段话主要在做什么?",
|
||||||
|
"options": [
|
||||||
|
"邀请朋友周末一起活动",
|
||||||
|
"问路",
|
||||||
|
"报告问题"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "星期六有什么活动?",
|
||||||
|
"options": [
|
||||||
|
"篮球比赛",
|
||||||
|
"看电影",
|
||||||
|
"在家学习"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21-M2",
|
||||||
|
"mode": "reading",
|
||||||
|
"title": "读一段对话:约周末踢球",
|
||||||
|
"text": "Ben: What are you doing this weekend?\nMia: Nothing special. Why?\nBen: We're going to play soccer on Sunday. Our team needs one more player. Do you want to come?\nMia: That sounds great! I'd love to. I'm a big football fan. What time?\nBen: At two in the afternoon, in the park near the mountain.\nMia: I hope we win the game! Can I bring a friend? He plays the guitar in a band.\nBen: Sure! After the game, there's a concert and a drama at the theater. It's an exciting event.\nMia: Perfect. Let's spend the whole day together. I'll bring my camera for some photos.\nBen: Great idea. Choose good shoes — we can climb the hill too. It's an excellent activity!\nMia: Sounds fun. See you on Sunday!\nBen: See you!",
|
||||||
|
"glosses": {
|
||||||
|
"perfect": "完美的",
|
||||||
|
"needs": "需要",
|
||||||
|
"whole": "整个的"
|
||||||
|
},
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"type": "detail",
|
||||||
|
"question": "他们周末打算做什么?",
|
||||||
|
"options": [
|
||||||
|
"踢足球",
|
||||||
|
"打网球",
|
||||||
|
"去海边"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "inference",
|
||||||
|
"question": "从对话看,Mia 想不想去?",
|
||||||
|
"options": [
|
||||||
|
"想去,还想带朋友",
|
||||||
|
"不想去",
|
||||||
|
"还没决定"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"excluded": [
|
||||||
|
{
|
||||||
|
"en": "hiking",
|
||||||
|
"reason": "A2;A1 用 go to the mountains / climb 表达"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"en": "camping",
|
||||||
|
"reason": "A2;A1 只作为 camp 理解"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,653 @@
|
|||||||
|
{
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"goal": "日常生活与旅行",
|
||||||
|
"sources": [
|
||||||
|
"CEFR-J Vocabulary Profile 1.5(東京外国語大学投野由紀夫研究室)",
|
||||||
|
"CEFR-J Grammar Profile 20180315(東京外国語大学投野由紀夫研究室)"
|
||||||
|
],
|
||||||
|
"minimumPoolCoverage": 0.85,
|
||||||
|
"alwaysAllowedWords": [
|
||||||
|
"oh",
|
||||||
|
"um",
|
||||||
|
"ok",
|
||||||
|
"okay",
|
||||||
|
"wow",
|
||||||
|
"mm",
|
||||||
|
"hmm",
|
||||||
|
"ah",
|
||||||
|
"uh",
|
||||||
|
"a",
|
||||||
|
"b",
|
||||||
|
"c",
|
||||||
|
"d",
|
||||||
|
"e",
|
||||||
|
"f",
|
||||||
|
"g",
|
||||||
|
"h",
|
||||||
|
"i",
|
||||||
|
"j",
|
||||||
|
"k",
|
||||||
|
"l",
|
||||||
|
"m",
|
||||||
|
"n",
|
||||||
|
"o",
|
||||||
|
"p",
|
||||||
|
"q",
|
||||||
|
"r",
|
||||||
|
"s",
|
||||||
|
"t",
|
||||||
|
"u",
|
||||||
|
"v",
|
||||||
|
"w",
|
||||||
|
"x",
|
||||||
|
"y",
|
||||||
|
"z"
|
||||||
|
],
|
||||||
|
"names": [
|
||||||
|
"tom",
|
||||||
|
"mia",
|
||||||
|
"alex",
|
||||||
|
"shen",
|
||||||
|
"anna",
|
||||||
|
"ben",
|
||||||
|
"lily",
|
||||||
|
"sam",
|
||||||
|
"emma",
|
||||||
|
"leo",
|
||||||
|
"nina",
|
||||||
|
"david",
|
||||||
|
"lucy",
|
||||||
|
"mark",
|
||||||
|
"sara",
|
||||||
|
"jack",
|
||||||
|
"kate",
|
||||||
|
"max",
|
||||||
|
"ella",
|
||||||
|
"chen",
|
||||||
|
"wang",
|
||||||
|
"li",
|
||||||
|
"zhang",
|
||||||
|
"liu",
|
||||||
|
"london",
|
||||||
|
"paris",
|
||||||
|
"tokyo",
|
||||||
|
"sydney",
|
||||||
|
"beijing",
|
||||||
|
"shanghai",
|
||||||
|
"china",
|
||||||
|
"chinese",
|
||||||
|
"english",
|
||||||
|
"america",
|
||||||
|
"american",
|
||||||
|
"japan",
|
||||||
|
"british",
|
||||||
|
"rome",
|
||||||
|
"bangkok",
|
||||||
|
"singapore",
|
||||||
|
"seoul",
|
||||||
|
"berlin",
|
||||||
|
"mr",
|
||||||
|
"mrs",
|
||||||
|
"ms",
|
||||||
|
"dr",
|
||||||
|
"usd",
|
||||||
|
"cm",
|
||||||
|
"km",
|
||||||
|
"wi-fi",
|
||||||
|
"wifi",
|
||||||
|
"atm"
|
||||||
|
],
|
||||||
|
"levels": [
|
||||||
|
{
|
||||||
|
"id": "A1",
|
||||||
|
"title": "固定的生活与旅行互动",
|
||||||
|
"coreRange": [
|
||||||
|
10,
|
||||||
|
15
|
||||||
|
],
|
||||||
|
"receptiveRange": [
|
||||||
|
20,
|
||||||
|
35
|
||||||
|
],
|
||||||
|
"units": [
|
||||||
|
{
|
||||||
|
"id": "A1-U01",
|
||||||
|
"file": "A1/A1-U01.json",
|
||||||
|
"title": "开口求助与数字",
|
||||||
|
"categories": [
|
||||||
|
"旅行",
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "没听懂时礼貌求助,说 11–100 的数字,拼读字母"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U02",
|
||||||
|
"file": "A1/A1-U02.json",
|
||||||
|
"title": "价格与付款",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "问价、说 100 以内的金额、选择现金或刷卡"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U03",
|
||||||
|
"file": "A1/A1-U03.json",
|
||||||
|
"title": "在咖啡店点单",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "点饮料、说大小杯、礼貌确认"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U04",
|
||||||
|
"file": "A1/A1-U04.json",
|
||||||
|
"title": "问路",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "问地点、听懂左右和距离"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U05",
|
||||||
|
"file": "A1/A1-U05.json",
|
||||||
|
"title": "在餐厅点餐",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "点餐、问推荐、要账单"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U06",
|
||||||
|
"file": "A1/A1-U06.json",
|
||||||
|
"title": "家人与住处",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "介绍家人,说住在哪里和家里有什么"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U07",
|
||||||
|
"file": "A1/A1-U07.json",
|
||||||
|
"title": "公交与地铁",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "买票、问站点、确认下车"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U08",
|
||||||
|
"file": "A1/A1-U08.json",
|
||||||
|
"title": "超市与便利店",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "找商品、说数量"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U09",
|
||||||
|
"file": "A1/A1-U09.json",
|
||||||
|
"title": "描述人和感受",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "说一个人的外貌和性格,说自己的心情"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U10",
|
||||||
|
"file": "A1/A1-U10.json",
|
||||||
|
"title": "打车",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "说目的地、确认价格或路线"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U11",
|
||||||
|
"file": "A1/A1-U11.json",
|
||||||
|
"title": "我的一天",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "说作息和常做的事"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U12",
|
||||||
|
"file": "A1/A1-U12.json",
|
||||||
|
"title": "买衣服",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "问尺码和颜色、试穿"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U13",
|
||||||
|
"file": "A1/A1-U13.json",
|
||||||
|
"title": "日期与约时间",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "说日期、约见面、改时间"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U14",
|
||||||
|
"file": "A1/A1-U14.json",
|
||||||
|
"title": "在机场",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "值机、问登机口、回答入境的简单问题"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U15",
|
||||||
|
"file": "A1/A1-U15.json",
|
||||||
|
"title": "入住酒店",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "说明预订信息、办理入住"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U16",
|
||||||
|
"file": "A1/A1-U16.json",
|
||||||
|
"title": "天气与穿着",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "问天气、说该穿什么"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U17",
|
||||||
|
"file": "A1/A1-U17.json",
|
||||||
|
"title": "酒店里的需求",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "要物品、报告简单问题"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U18",
|
||||||
|
"file": "A1/A1-U18.json",
|
||||||
|
"title": "药店与不舒服",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "说一个症状、听懂基本建议"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U19",
|
||||||
|
"file": "A1/A1-U19.json",
|
||||||
|
"title": "遇到麻烦时求助",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "说明遇到的麻烦、请求帮忙、感谢与回应"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U20",
|
||||||
|
"file": "A1/A1-U20.json",
|
||||||
|
"title": "打电话与留言",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "留下姓名、号码和简短信息"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A1-U21",
|
||||||
|
"file": "A1/A1-U21.json",
|
||||||
|
"title": "周末计划",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "说将要做的事、邀请朋友"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": {
|
||||||
|
"count": [
|
||||||
|
2,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
"listeningWords": [
|
||||||
|
60,
|
||||||
|
120
|
||||||
|
],
|
||||||
|
"readingWords": [
|
||||||
|
80,
|
||||||
|
150
|
||||||
|
],
|
||||||
|
"unknownTolerance": 0.08
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A2",
|
||||||
|
"title": "讲经历、做安排、处理小问题",
|
||||||
|
"coreRange": [
|
||||||
|
10,
|
||||||
|
15
|
||||||
|
],
|
||||||
|
"receptiveRange": [
|
||||||
|
40,
|
||||||
|
65
|
||||||
|
],
|
||||||
|
"materials": {
|
||||||
|
"count": [
|
||||||
|
2,
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"listeningWords": [
|
||||||
|
120,
|
||||||
|
280
|
||||||
|
],
|
||||||
|
"readingWords": [
|
||||||
|
150,
|
||||||
|
250
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"units": [
|
||||||
|
{
|
||||||
|
"id": "A2-U01",
|
||||||
|
"file": "A2/A2-U01.json",
|
||||||
|
"title": "上个周末",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "用过去时讲做了什么"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A2-U02",
|
||||||
|
"file": "A2/A2-U02.json",
|
||||||
|
"title": "上一次旅行",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "讲去了哪里、怎么样、感受如何"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A2-U03",
|
||||||
|
"file": "A2/A2-U03.json",
|
||||||
|
"title": "预订酒店与餐厅",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "电话或当面预订:日期、人数、要求"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A2-U04",
|
||||||
|
"file": "A2/A2-U04.json",
|
||||||
|
"title": "改期与取消",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "说明原因、提出新时间"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A2-U05",
|
||||||
|
"file": "A2/A2-U05.json",
|
||||||
|
"title": "餐厅里的问题",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "说明忌口或过敏、菜品有问题、分开结账"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A2-U06",
|
||||||
|
"file": "A2/A2-U06.json",
|
||||||
|
"title": "比较与选择",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "比较商品、房间或路线并做选择"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A2-U07",
|
||||||
|
"file": "A2/A2-U07.json",
|
||||||
|
"title": "退换货",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "说明问题、要求退换"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A2-U08",
|
||||||
|
"file": "A2/A2-U08.json",
|
||||||
|
"title": "行程出问题",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "误车、延误、换乘、改票"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A2-U09",
|
||||||
|
"file": "A2/A2-U09.json",
|
||||||
|
"title": "住宿里的问题",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "报修、换房、提出要求"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A2-U10",
|
||||||
|
"file": "A2/A2-U10.json",
|
||||||
|
"title": "看病",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "说症状和持续时间、听懂用药说明"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A2-U11",
|
||||||
|
"file": "A2/A2-U11.json",
|
||||||
|
"title": "聊兴趣与家乡",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "围绕一个话题连续聊几轮"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A2-U12",
|
||||||
|
"file": "A2/A2-U12.json",
|
||||||
|
"title": "建议与意见",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "给建议、征求意见"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A2-U13",
|
||||||
|
"file": "A2/A2-U13.json",
|
||||||
|
"title": "介绍城市与景点",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "描述地方、推荐去处"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A2-U14",
|
||||||
|
"file": "A2/A2-U14.json",
|
||||||
|
"title": "丢东西与求助",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "在服务台说明丢了什么、在哪里丢的"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "A2-U15",
|
||||||
|
"file": "A2/A2-U15.json",
|
||||||
|
"title": "消息与短邮件",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "写邀请、感谢、说明迟到"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"openTaskRubric": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "B1",
|
||||||
|
"title": "独立应对大多数情况",
|
||||||
|
"coreRange": [
|
||||||
|
10,
|
||||||
|
15
|
||||||
|
],
|
||||||
|
"receptiveRange": [
|
||||||
|
70,
|
||||||
|
110
|
||||||
|
],
|
||||||
|
"materials": {
|
||||||
|
"count": [
|
||||||
|
2,
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"listeningWords": [
|
||||||
|
250,
|
||||||
|
550
|
||||||
|
],
|
||||||
|
"readingWords": [
|
||||||
|
300,
|
||||||
|
500
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"units": [
|
||||||
|
{
|
||||||
|
"id": "B1-U01",
|
||||||
|
"file": "B1/B1-U01.json",
|
||||||
|
"title": "讲一段完整的旅行经历",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "按顺序叙述,加入背景和感受"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "B1-U02",
|
||||||
|
"file": "B1/B1-U02.json",
|
||||||
|
"title": "规划行程",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "比较交通和住宿方案,说明理由和预算"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "B1-U03",
|
||||||
|
"file": "B1/B1-U03.json",
|
||||||
|
"title": "入境与行李",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "回答入境问题,报告行李延误或丢失"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "B1-U04",
|
||||||
|
"file": "B1/B1-U04.json",
|
||||||
|
"title": "听懂广播与讲解",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "抓住车站、机场广播和导览讲解的要点"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "B1-U05",
|
||||||
|
"file": "B1/B1-U05.json",
|
||||||
|
"title": "紧急情况",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "证件或钱包丢失、报警、求助"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "B1-U06",
|
||||||
|
"file": "B1/B1-U06.json",
|
||||||
|
"title": "就医",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "说明症状变化和病史,理解医嘱要点"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "B1-U07",
|
||||||
|
"file": "B1/B1-U07.json",
|
||||||
|
"title": "投诉与协商",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "要求退款或补偿,谈出解决办法"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "B1-U08",
|
||||||
|
"file": "B1/B1-U08.json",
|
||||||
|
"title": "租住与长住",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "沟通租房或短租,理解规则要点"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "B1-U09",
|
||||||
|
"file": "B1/B1-U09.json",
|
||||||
|
"title": "生活服务",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "办银行和手机卡业务、寄收快递、预约维修"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "B1-U10",
|
||||||
|
"file": "B1/B1-U10.json",
|
||||||
|
"title": "观点与理由",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "推荐并说明理由,回应不同意见"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "B1-U11",
|
||||||
|
"file": "B1/B1-U11.json",
|
||||||
|
"title": "习俗与文化",
|
||||||
|
"categories": [
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "谈小费、礼仪和节日,比较不同做法"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "B1-U12",
|
||||||
|
"file": "B1/B1-U12.json",
|
||||||
|
"title": "深入聊天",
|
||||||
|
"categories": [
|
||||||
|
"日常"
|
||||||
|
],
|
||||||
|
"canDo": "聊经历、计划和感受,维持 5 分钟对话"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "B1-U13",
|
||||||
|
"file": "B1/B1-U13.json",
|
||||||
|
"title": "读懂生活文本",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "读懂评价、说明、规则和通知"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "B1-U14",
|
||||||
|
"file": "B1/B1-U14.json",
|
||||||
|
"title": "写说明与投诉",
|
||||||
|
"categories": [
|
||||||
|
"日常",
|
||||||
|
"旅行"
|
||||||
|
],
|
||||||
|
"canDo": "写邮件说明经过并提出要求"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"openTaskRubric": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -178,17 +178,98 @@ CoreReviewTemplate coreReviewTemplate(String id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Rotates an approved offline prompt family without changing the core target
|
/// Rotates an approved offline prompt family without changing the core target
|
||||||
/// ID. These are a safe fallback when a dynamic AI variant is unavailable.
|
/// ID. The rotation changes the skill, not just the wording: recall in
|
||||||
|
/// writing, dictation from audio, then saying it aloud.
|
||||||
CoreReviewTemplate coreReviewVariant(String id, int variantIndex) {
|
CoreReviewTemplate coreReviewVariant(String id, int variantIndex) {
|
||||||
final base = coreReviewTemplate(id);
|
final base = coreReviewTemplate(id);
|
||||||
final lead = switch (variantIndex % 3) {
|
final dictation = a0DictationSentences[id];
|
||||||
0 => '换一个人物或地点,',
|
return switch (variantIndex % 3) {
|
||||||
1 => '在新的生活情境中,',
|
1 when dictation != null => CoreReviewTemplate(
|
||||||
_ => '不看上次答案,',
|
prompt: '听一句话,把听到的整句英文写下来。',
|
||||||
|
hint: dictation.meaning,
|
||||||
|
skill: dictationSkill,
|
||||||
|
),
|
||||||
|
2 => CoreReviewTemplate(
|
||||||
|
prompt: '用英文说出来:${base.prompt}',
|
||||||
|
hint: base.hint,
|
||||||
|
skill: spokenRecallSkill,
|
||||||
|
),
|
||||||
|
_ => base,
|
||||||
};
|
};
|
||||||
return CoreReviewTemplate(
|
|
||||||
prompt: '$lead${base.prompt}',
|
|
||||||
hint: base.hint,
|
|
||||||
skill: base.skill,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const dictationSkill = '听写';
|
||||||
|
const spokenRecallSkill = '口头回忆';
|
||||||
|
|
||||||
|
/// A concrete sentence built only from A0 language, used to play a core item
|
||||||
|
/// in context and to check dictation.
|
||||||
|
typedef DictationSentence = ({String sentence, String meaning});
|
||||||
|
|
||||||
|
const Map<String, DictationSentence> a0DictationSentences = {
|
||||||
|
'A0-W01': (sentence: 'Zero, one, two.', meaning: '零、一、二。'),
|
||||||
|
'A0-W02': (sentence: 'My number is one-two-three.', meaning: '我的号码是一二三。'),
|
||||||
|
'A0-W03': (sentence: 'It’s two o’clock.', meaning: '现在两点。'),
|
||||||
|
'A0-W04': (sentence: 'It’s three o’clock.', meaning: '现在三点。'),
|
||||||
|
'A0-W05': (sentence: 'It’s four o’clock.', meaning: '现在四点。'),
|
||||||
|
'A0-W06': (sentence: 'It’s five o’clock.', meaning: '现在五点。'),
|
||||||
|
'A0-W07': (sentence: 'It’s six o’clock.', meaning: '现在六点。'),
|
||||||
|
'A0-W08': (sentence: 'It’s seven o’clock.', meaning: '现在七点。'),
|
||||||
|
'A0-W09': (sentence: 'It’s eight o’clock.', meaning: '现在八点。'),
|
||||||
|
'A0-W10': (sentence: 'It’s nine o’clock.', meaning: '现在九点。'),
|
||||||
|
'A0-W11': (sentence: 'It’s ten o’clock.', meaning: '现在十点。'),
|
||||||
|
'A0-W12': (sentence: 'It’s Monday.', meaning: '今天星期一。'),
|
||||||
|
'A0-W13': (sentence: 'It’s Tuesday.', meaning: '今天星期二。'),
|
||||||
|
'A0-W14': (sentence: 'It’s Wednesday.', meaning: '今天星期三。'),
|
||||||
|
'A0-W15': (sentence: 'It’s Thursday.', meaning: '今天星期四。'),
|
||||||
|
'A0-W16': (sentence: 'It’s Friday.', meaning: '今天星期五。'),
|
||||||
|
'A0-W17': (sentence: 'It’s Saturday.', meaning: '今天星期六。'),
|
||||||
|
'A0-W18': (sentence: 'It’s Sunday.', meaning: '今天星期日。'),
|
||||||
|
'A0-W19': (sentence: 'It’s a book.', meaning: '这是一本书。'),
|
||||||
|
'A0-W20': (sentence: 'It’s a phone.', meaning: '这是一部电话。'),
|
||||||
|
'A0-W21': (sentence: 'It’s a pen.', meaning: '这是一支笔。'),
|
||||||
|
'A0-W22': (sentence: 'It’s a bag.', meaning: '这是一个包。'),
|
||||||
|
'A0-W23': (sentence: 'It’s a key.', meaning: '这是一把钥匙。'),
|
||||||
|
'A0-W24': (sentence: 'I like water.', meaning: '我喜欢喝水。'),
|
||||||
|
'A0-W25': (sentence: 'This is my mother.', meaning: '这是我妈妈。'),
|
||||||
|
'A0-W26': (sentence: 'This is my father.', meaning: '这是我爸爸。'),
|
||||||
|
'A0-W27': (sentence: 'This is my sister.', meaning: '这是我的姐妹。'),
|
||||||
|
'A0-W28': (sentence: 'This is my brother.', meaning: '这是我的兄弟。'),
|
||||||
|
'A0-W29': (sentence: 'I like coffee.', meaning: '我喜欢咖啡。'),
|
||||||
|
'A0-W30': (sentence: 'Do you like tea?', meaning: '你喜欢茶吗?'),
|
||||||
|
'A0-W31': (sentence: 'I like music.', meaning: '我喜欢音乐。'),
|
||||||
|
'A0-W32': (sentence: 'Do you like movies?', meaning: '你喜欢电影吗?'),
|
||||||
|
'A0-W33': (sentence: 'I’m good.', meaning: '我很好。'),
|
||||||
|
'A0-W34': (sentence: 'I’m okay.', meaning: '我还可以。'),
|
||||||
|
'A0-W35': (sentence: 'I’m tired.', meaning: '我累了。'),
|
||||||
|
'A0-W36': (sentence: 'Hello, how are you?', meaning: '你好,你怎么样?'),
|
||||||
|
'A0-W37': (sentence: 'Hi, what’s your name?', meaning: '嗨,你叫什么名字?'),
|
||||||
|
'A0-W38': (sentence: 'Yes, I do.', meaning: '是的,我喜欢。'),
|
||||||
|
'A0-W39': (sentence: 'No, I don’t.', meaning: '不,我不喜欢。'),
|
||||||
|
'A0-W40': (sentence: 'I’m okay, thanks.', meaning: '我还可以,谢谢。'),
|
||||||
|
'A0-P01': (sentence: 'I’m Tom.', meaning: '我是 Tom。'),
|
||||||
|
'A0-P02': (sentence: 'What’s your name?', meaning: '你叫什么名字?'),
|
||||||
|
'A0-P03': (sentence: 'Nice to meet you.', meaning: '很高兴认识你。'),
|
||||||
|
'A0-P04': (sentence: 'How do you spell that?', meaning: '那个怎么拼写?'),
|
||||||
|
'A0-P05': (sentence: 'How are you?', meaning: '你怎么样?'),
|
||||||
|
'A0-P06': (sentence: 'I’m tired today.', meaning: '我今天很累。'),
|
||||||
|
'A0-P07': (sentence: 'What’s your phone number?', meaning: '你的电话号码是多少?'),
|
||||||
|
'A0-P08': (sentence: 'My number is one-three-eight.', meaning: '我的号码是一三八。'),
|
||||||
|
'A0-P09': (sentence: 'What’s this?', meaning: '这是什么?'),
|
||||||
|
'A0-P10': (sentence: 'It’s a pen.', meaning: '这是一支笔。'),
|
||||||
|
'A0-P11': (sentence: 'Where are you from?', meaning: '你来自哪里?'),
|
||||||
|
'A0-P12': (sentence: 'I’m from China.', meaning: '我来自中国。'),
|
||||||
|
'A0-P13': (sentence: 'This is my sister.', meaning: '这是我的姐妹。'),
|
||||||
|
'A0-P14': (sentence: 'What day is it today?', meaning: '今天星期几?'),
|
||||||
|
'A0-P15': (sentence: 'It’s Friday.', meaning: '今天星期五。'),
|
||||||
|
'A0-P16': (sentence: 'What time is it?', meaning: '现在几点?'),
|
||||||
|
'A0-P17': (sentence: 'It’s three o’clock.', meaning: '现在三点。'),
|
||||||
|
'A0-P18': (sentence: 'I like music.', meaning: '我喜欢音乐。'),
|
||||||
|
'A0-P19': (sentence: 'Do you like coffee?', meaning: '你喜欢咖啡吗?'),
|
||||||
|
'A0-P20': (sentence: 'Please say that again.', meaning: '请再说一遍。'),
|
||||||
|
};
|
||||||
|
|
||||||
|
/// What review audio should play for [item]: the dictation sentence for a
|
||||||
|
/// core item, otherwise the target itself when it has no slot to fill.
|
||||||
|
String? reviewAudioText(String id, String target) =>
|
||||||
|
a0DictationSentences[id]?.sentence ??
|
||||||
|
(target.contains('[') ? null : target);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import 'package:shared_preferences/shared_preferences.dart';
|
|||||||
|
|
||||||
import 'models.dart';
|
import 'models.dart';
|
||||||
import 'a0_core.dart';
|
import 'a0_core.dart';
|
||||||
|
import 'app_theme.dart';
|
||||||
import 'generated_content.dart';
|
import 'generated_content.dart';
|
||||||
import 'local_store.dart';
|
import 'local_store.dart';
|
||||||
import 'review_feedback.dart';
|
import 'review_feedback.dart';
|
||||||
@@ -31,6 +32,7 @@ abstract class _AppStateData extends ChangeNotifier {
|
|||||||
bool onboardingComplete = false;
|
bool onboardingComplete = false;
|
||||||
bool showChineseHints = true;
|
bool showChineseHints = true;
|
||||||
bool keepRecordings = false;
|
bool keepRecordings = false;
|
||||||
|
AppThemeMode themeMode = AppThemeMode.system;
|
||||||
int completedLessons = 0;
|
int completedLessons = 0;
|
||||||
String activeLessonId = 'a0-01';
|
String activeLessonId = 'a0-01';
|
||||||
|
|
||||||
@@ -248,6 +250,12 @@ class AppState extends _AppStateData
|
|||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setThemeMode(AppThemeMode value) {
|
||||||
|
if (themeMode == value) return;
|
||||||
|
themeMode = value;
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
void clearProgress() {
|
void clearProgress() {
|
||||||
completedLessons = 0;
|
completedLessons = 0;
|
||||||
activeLessonId = 'a0-01';
|
activeLessonId = 'a0-01';
|
||||||
|
|||||||
@@ -81,6 +81,9 @@ mixin _ReviewAndMastery on _AppStateData {
|
|||||||
ReviewItem item, {
|
ReviewItem item, {
|
||||||
required bool assisted,
|
required bool assisted,
|
||||||
String? rawAnswer,
|
String? rawAnswer,
|
||||||
|
String inputMode = 'text',
|
||||||
|
String? originalTranscript,
|
||||||
|
String? recordingPath,
|
||||||
}) {
|
}) {
|
||||||
final index = reviewQueue.indexWhere(
|
final index = reviewQueue.indexWhere(
|
||||||
(candidate) => candidate.id == item.id,
|
(candidate) => candidate.id == item.id,
|
||||||
@@ -142,6 +145,9 @@ mixin _ReviewAndMastery on _AppStateData {
|
|||||||
: EvidenceKind.independentSuccess,
|
: EvidenceKind.independentSuccess,
|
||||||
assisted: assisted,
|
assisted: assisted,
|
||||||
rawAnswer: rawAnswer,
|
rawAnswer: rawAnswer,
|
||||||
|
inputMode: inputMode,
|
||||||
|
originalTranscript: originalTranscript,
|
||||||
|
recordingPath: recordingPath,
|
||||||
);
|
);
|
||||||
if (assisted) {
|
if (assisted) {
|
||||||
_recordEvidence(current.id, EvidenceKind.assisted);
|
_recordEvidence(current.id, EvidenceKind.assisted);
|
||||||
@@ -207,20 +213,28 @@ mixin _ReviewAndMastery on _AppStateData {
|
|||||||
required EvidenceKind outcome,
|
required EvidenceKind outcome,
|
||||||
bool assisted = false,
|
bool assisted = false,
|
||||||
String? rawAnswer,
|
String? rawAnswer,
|
||||||
|
String inputMode = 'text',
|
||||||
|
String? originalTranscript,
|
||||||
|
String? recordingPath,
|
||||||
}) {
|
}) {
|
||||||
final now = DateTime.now();
|
final now = DateTime.now();
|
||||||
|
final spoken = originalTranscript != null;
|
||||||
attemptEvidence.add(
|
attemptEvidence.add(
|
||||||
AttemptEvidence(
|
AttemptEvidence(
|
||||||
id: 'review-${item.id}-${now.microsecondsSinceEpoch}',
|
id: 'review-${item.id}-${now.microsecondsSinceEpoch}',
|
||||||
itemId: item.id,
|
itemId: item.id,
|
||||||
taskId: 'review-${item.id}',
|
taskId: 'review-${item.id}',
|
||||||
skill: item.skill,
|
skill: item.skill,
|
||||||
inputMode: 'text',
|
inputMode: inputMode,
|
||||||
outcome: outcome,
|
outcome: outcome,
|
||||||
createdAt: now,
|
createdAt: now,
|
||||||
rawAnswer: rawAnswer,
|
rawAnswer: rawAnswer,
|
||||||
|
recordingPath: recordingPath,
|
||||||
assisted: assisted,
|
assisted: assisted,
|
||||||
variantIndex: item.variantIndex,
|
variantIndex: item.variantIndex,
|
||||||
|
originalTranscript: originalTranscript,
|
||||||
|
transcriptConfirmed: spoken && originalTranscript == rawAnswer,
|
||||||
|
transcriptEdited: spoken && originalTranscript != rawAnswer,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -315,6 +329,10 @@ mixin _ReviewAndMastery on _AppStateData {
|
|||||||
reviewQueue[index] = current.copyWith(
|
reviewQueue[index] = current.copyWith(
|
||||||
prompt: variant.prompt,
|
prompt: variant.prompt,
|
||||||
hint: variant.expectedAnswer,
|
hint: variant.expectedAnswer,
|
||||||
|
// An AI prompt is a written/spoken recall task, never dictation.
|
||||||
|
skill: a0CoreItems.containsKey(current.id)
|
||||||
|
? coreReviewTemplate(current.id).skill
|
||||||
|
: null,
|
||||||
variantIndex: current.variantIndex + 1,
|
variantIndex: current.variantIndex + 1,
|
||||||
isAiGenerated: true,
|
isAiGenerated: true,
|
||||||
);
|
);
|
||||||
@@ -461,7 +479,13 @@ mixin _ReviewAndMastery on _AppStateData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Skills whose success only shows the learner recognises the item.
|
/// Skills whose success only shows the learner recognises the item.
|
||||||
static const _recognitionSkills = {'听辨识别', '阅读识别', '听力理解', '阅读理解'};
|
static const _recognitionSkills = {
|
||||||
|
'听辨识别',
|
||||||
|
'阅读识别',
|
||||||
|
'听力理解',
|
||||||
|
'阅读理解',
|
||||||
|
dictationSkill,
|
||||||
|
};
|
||||||
|
|
||||||
/// Controlled lesson steps (follow-reading, scripted dialogue) are practice,
|
/// Controlled lesson steps (follow-reading, scripted dialogue) are practice,
|
||||||
/// not attempts to recall, so they never count as a valid answer.
|
/// not attempts to recall, so they never count as a valid answer.
|
||||||
@@ -470,12 +494,12 @@ mixin _ReviewAndMastery on _AppStateData {
|
|||||||
(entry.taskId.endsWith('-speaking') ||
|
(entry.taskId.endsWith('-speaking') ||
|
||||||
entry.taskId.endsWith('-dialogue'));
|
entry.taskId.endsWith('-dialogue'));
|
||||||
|
|
||||||
/// Use outside the lesson it was taught in: a free scene dialogue, an AI
|
/// Use outside the lesson it was taught in: a free scene dialogue or an AI
|
||||||
/// adaptive task, or a review answered in a changed situation.
|
/// adaptive task. A review only re-asks the item on its own, so however its
|
||||||
|
/// prompt is worded it is recall, not use in a situation.
|
||||||
static bool _isContextUse(AttemptEvidence entry) =>
|
static bool _isContextUse(AttemptEvidence entry) =>
|
||||||
entry.taskId.startsWith('dialogue-scene-') ||
|
entry.taskId.startsWith('dialogue-scene-') ||
|
||||||
entry.id.startsWith('adaptive-') ||
|
entry.id.startsWith('adaptive-');
|
||||||
(entry.taskId == 'review-${entry.itemId}' && entry.variantIndex >= 1);
|
|
||||||
|
|
||||||
/// Learning engine 3.1: recognise = a recognition success; recall = an
|
/// Learning engine 3.1: recognise = a recognition success; recall = an
|
||||||
/// unaided spoken or written success; use = unaided use in a different
|
/// unaided spoken or written success; use = unaided use in a different
|
||||||
|
|||||||
@@ -15,6 +15,9 @@ extension _AppStateSnapshot on AppState {
|
|||||||
dailyMinutes = data['dailyMinutes'] as int? ?? dailyMinutes;
|
dailyMinutes = data['dailyMinutes'] as int? ?? dailyMinutes;
|
||||||
showChineseHints = data['showChineseHints'] as bool? ?? showChineseHints;
|
showChineseHints = data['showChineseHints'] as bool? ?? showChineseHints;
|
||||||
keepRecordings = data['keepRecordings'] as bool? ?? keepRecordings;
|
keepRecordings = data['keepRecordings'] as bool? ?? keepRecordings;
|
||||||
|
themeMode =
|
||||||
|
AppThemeMode.values.asNameMap()[data['themeMode'] as String?] ??
|
||||||
|
themeMode;
|
||||||
aiEndpoint = data['aiEndpoint'] as String? ?? aiEndpoint;
|
aiEndpoint = data['aiEndpoint'] as String? ?? aiEndpoint;
|
||||||
aiModel = data['aiModel'] as String? ?? aiModel;
|
aiModel = data['aiModel'] as String? ?? aiModel;
|
||||||
cachedAdaptiveLessonRaw = data['cachedAdaptiveLessonRaw'] as String?;
|
cachedAdaptiveLessonRaw = data['cachedAdaptiveLessonRaw'] as String?;
|
||||||
@@ -284,6 +287,7 @@ extension _AppStateSnapshot on AppState {
|
|||||||
'dailyMinutes': dailyMinutes,
|
'dailyMinutes': dailyMinutes,
|
||||||
'showChineseHints': showChineseHints,
|
'showChineseHints': showChineseHints,
|
||||||
'keepRecordings': keepRecordings,
|
'keepRecordings': keepRecordings,
|
||||||
|
'themeMode': themeMode.name,
|
||||||
'aiEndpoint': aiEndpoint,
|
'aiEndpoint': aiEndpoint,
|
||||||
'aiModel': aiModel,
|
'aiModel': aiModel,
|
||||||
'cachedAdaptiveLessonRaw': cachedAdaptiveLessonRaw,
|
'cachedAdaptiveLessonRaw': cachedAdaptiveLessonRaw,
|
||||||
|
|||||||
@@ -1,57 +1,136 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
abstract final class AppColors {
|
/// User's theme preference, persisted in the learning snapshot.
|
||||||
static const paper = Color(0xFFF5F7F3);
|
enum AppThemeMode { system, light, dark }
|
||||||
static const surface = Colors.white;
|
|
||||||
static const surfaceMuted = Color(0xFFF1F5F0);
|
/// One brightness worth of brand colours. Two const instances below hold the
|
||||||
static const ink = Color(0xFF19211B);
|
/// light and dark values; [AppColors] mirrors the active one so the many
|
||||||
static const muted = Color(0xFF647268);
|
/// widgets that read `AppColors.x` directly recolour when the theme changes.
|
||||||
static const line = Color(0xFFD8E1D9);
|
class _Palette {
|
||||||
static const green = Color(0xFF176B46);
|
const _Palette({
|
||||||
static const softGreen = Color(0xFFE2F3E8);
|
required this.paper,
|
||||||
static const warm = Color(0xFFFFF0E3);
|
required this.surface,
|
||||||
static const warmInk = Color(0xFF9E4C18);
|
required this.surfaceMuted,
|
||||||
|
required this.ink,
|
||||||
|
required this.muted,
|
||||||
|
required this.line,
|
||||||
|
required this.green,
|
||||||
|
required this.softGreen,
|
||||||
|
required this.warm,
|
||||||
|
required this.warmInk,
|
||||||
|
});
|
||||||
|
|
||||||
|
final Color paper;
|
||||||
|
final Color surface;
|
||||||
|
final Color surfaceMuted;
|
||||||
|
final Color ink;
|
||||||
|
final Color muted;
|
||||||
|
final Color line;
|
||||||
|
final Color green;
|
||||||
|
final Color softGreen;
|
||||||
|
final Color warm;
|
||||||
|
final Color warmInk;
|
||||||
}
|
}
|
||||||
|
|
||||||
ThemeData buildAppTheme() {
|
const _light = _Palette(
|
||||||
|
paper: Color(0xFFF5F7F3),
|
||||||
|
surface: Colors.white,
|
||||||
|
surfaceMuted: Color(0xFFF1F5F0),
|
||||||
|
ink: Color(0xFF19211B),
|
||||||
|
muted: Color(0xFF647268),
|
||||||
|
line: Color(0xFFD8E1D9),
|
||||||
|
green: Color(0xFF176B46),
|
||||||
|
softGreen: Color(0xFFE2F3E8),
|
||||||
|
warm: Color(0xFFFFF0E3),
|
||||||
|
warmInk: Color(0xFF9E4C18),
|
||||||
|
);
|
||||||
|
|
||||||
|
const _dark = _Palette(
|
||||||
|
paper: Color(0xFF11150F),
|
||||||
|
surface: Color(0xFF1B211A),
|
||||||
|
surfaceMuted: Color(0xFF232B22),
|
||||||
|
ink: Color(0xFFE8EEE6),
|
||||||
|
muted: Color(0xFF9CA99D),
|
||||||
|
line: Color(0xFF33402F),
|
||||||
|
green: Color(0xFF2FA36B),
|
||||||
|
softGreen: Color(0xFF17311F),
|
||||||
|
warm: Color(0xFF352618),
|
||||||
|
warmInk: Color(0xFFEBAA78),
|
||||||
|
);
|
||||||
|
|
||||||
|
/// Brand colours for the active brightness. Values are reassigned by
|
||||||
|
/// [AppColors.applyBrightness]; call it before building the widget tree.
|
||||||
|
abstract final class AppColors {
|
||||||
|
static Color paper = _light.paper;
|
||||||
|
static Color surface = _light.surface;
|
||||||
|
static Color surfaceMuted = _light.surfaceMuted;
|
||||||
|
static Color ink = _light.ink;
|
||||||
|
static Color muted = _light.muted;
|
||||||
|
static Color line = _light.line;
|
||||||
|
static Color green = _light.green;
|
||||||
|
static Color softGreen = _light.softGreen;
|
||||||
|
static Color warm = _light.warm;
|
||||||
|
static Color warmInk = _light.warmInk;
|
||||||
|
|
||||||
|
static Brightness brightness = Brightness.light;
|
||||||
|
|
||||||
|
static void applyBrightness(Brightness value) {
|
||||||
|
final p = value == Brightness.dark ? _dark : _light;
|
||||||
|
brightness = value;
|
||||||
|
paper = p.paper;
|
||||||
|
surface = p.surface;
|
||||||
|
surfaceMuted = p.surfaceMuted;
|
||||||
|
ink = p.ink;
|
||||||
|
muted = p.muted;
|
||||||
|
line = p.line;
|
||||||
|
green = p.green;
|
||||||
|
softGreen = p.softGreen;
|
||||||
|
warm = p.warm;
|
||||||
|
warmInk = p.warmInk;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ThemeData buildAppTheme(Brightness brightness) {
|
||||||
|
final p = brightness == Brightness.dark ? _dark : _light;
|
||||||
final scheme =
|
final scheme =
|
||||||
ColorScheme.fromSeed(
|
ColorScheme.fromSeed(
|
||||||
seedColor: AppColors.green,
|
seedColor: p.green,
|
||||||
brightness: Brightness.light,
|
brightness: brightness,
|
||||||
).copyWith(
|
).copyWith(
|
||||||
surface: AppColors.surface,
|
surface: p.surface,
|
||||||
onSurface: AppColors.ink,
|
onSurface: p.ink,
|
||||||
primary: AppColors.green,
|
primary: p.green,
|
||||||
onPrimary: Colors.white,
|
onPrimary: Colors.white,
|
||||||
outline: AppColors.line,
|
outline: p.line,
|
||||||
);
|
);
|
||||||
|
|
||||||
return ThemeData(
|
return ThemeData(
|
||||||
useMaterial3: true,
|
useMaterial3: true,
|
||||||
|
brightness: brightness,
|
||||||
colorScheme: scheme,
|
colorScheme: scheme,
|
||||||
scaffoldBackgroundColor: AppColors.paper,
|
scaffoldBackgroundColor: p.paper,
|
||||||
fontFamily: 'PingFang SC',
|
fontFamily: 'PingFang SC',
|
||||||
appBarTheme: const AppBarTheme(
|
appBarTheme: AppBarTheme(
|
||||||
backgroundColor: AppColors.surface,
|
backgroundColor: p.surface,
|
||||||
foregroundColor: AppColors.ink,
|
foregroundColor: p.ink,
|
||||||
elevation: 0,
|
elevation: 0,
|
||||||
centerTitle: false,
|
centerTitle: false,
|
||||||
),
|
),
|
||||||
textTheme: const TextTheme(
|
textTheme: TextTheme(
|
||||||
headlineMedium: TextStyle(
|
headlineMedium: TextStyle(
|
||||||
color: AppColors.ink,
|
color: p.ink,
|
||||||
fontSize: 26,
|
fontSize: 26,
|
||||||
height: 1.25,
|
height: 1.25,
|
||||||
fontWeight: FontWeight.w600,
|
fontWeight: FontWeight.w600,
|
||||||
letterSpacing: -0.6,
|
letterSpacing: -0.6,
|
||||||
),
|
),
|
||||||
titleLarge: TextStyle(
|
titleLarge: TextStyle(
|
||||||
color: AppColors.ink,
|
color: p.ink,
|
||||||
fontSize: 18,
|
fontSize: 18,
|
||||||
fontWeight: FontWeight.w600,
|
fontWeight: FontWeight.w600,
|
||||||
),
|
),
|
||||||
bodyLarge: TextStyle(color: AppColors.ink, fontSize: 16, height: 1.5),
|
bodyLarge: TextStyle(color: p.ink, fontSize: 16, height: 1.5),
|
||||||
bodyMedium: TextStyle(color: AppColors.muted, fontSize: 14, height: 1.5),
|
bodyMedium: TextStyle(color: p.muted, fontSize: 14, height: 1.5),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'a0_core.dart';
|
import 'a0_core.dart';
|
||||||
import 'models.dart';
|
import 'models.dart';
|
||||||
|
import 'speech_compare.dart';
|
||||||
|
|
||||||
class ReviewCheckResult {
|
class ReviewCheckResult {
|
||||||
const ReviewCheckResult({required this.complete, required this.message});
|
const ReviewCheckResult({required this.complete, required this.message});
|
||||||
@@ -22,6 +23,20 @@ class ReviewFeedback {
|
|||||||
.trim();
|
.trim();
|
||||||
|
|
||||||
static ReviewCheckResult check(ReviewItem item, String input) {
|
static ReviewCheckResult check(ReviewItem item, String input) {
|
||||||
|
final dictation = item.skill == dictationSkill
|
||||||
|
? a0DictationSentences[item.id]
|
||||||
|
: null;
|
||||||
|
if (dictation != null) {
|
||||||
|
final comparison = compareSpoken(dictation.sentence, input);
|
||||||
|
final missing = comparison.total - comparison.heardCount;
|
||||||
|
final wrong = missing + comparison.extraWords.length;
|
||||||
|
return ReviewCheckResult(
|
||||||
|
complete: comparison.matches,
|
||||||
|
message: comparison.matches
|
||||||
|
? '听写正确。'
|
||||||
|
: '有 $wrong 处和听到的句子不一致。再听一次,检查拼写和漏掉的词。',
|
||||||
|
);
|
||||||
|
}
|
||||||
final complete = a0CoreItems.containsKey(item.id)
|
final complete = a0CoreItems.containsKey(item.id)
|
||||||
// A word review checks the word it actually shows.
|
// A word review checks the word it actually shows.
|
||||||
? coreItemUsedIn(item.id, input, word: item.target)
|
? coreItemUsedIn(item.id, input, word: item.target)
|
||||||
@@ -102,7 +117,7 @@ bool coreItemUsedIn(String id, String input, {String? word}) {
|
|||||||
has("o'clock") ||
|
has("o'clock") ||
|
||||||
has('oclock') ||
|
has('oclock') ||
|
||||||
phrase("o'clock")),
|
phrase("o'clock")),
|
||||||
'A0-P18' => introduction && has('like') && tokens.length >= 3,
|
'A0-P18' => (phrase('i like') || phrase('i love')) && tokens.length >= 3,
|
||||||
'A0-P19' => phrase('do you like'),
|
'A0-P19' => phrase('do you like'),
|
||||||
'A0-P20' =>
|
'A0-P20' =>
|
||||||
phrase('please say that again') || phrase('please speak slowly'),
|
phrase('please say that again') || phrase('please speak slowly'),
|
||||||
|
|||||||
@@ -281,6 +281,14 @@ const a0SeedLessons = [
|
|||||||
example: 'Nice to meet you, too.',
|
example: 'Nice to meet you, too.',
|
||||||
exampleMeaning: '我也很高兴认识你。',
|
exampleMeaning: '我也很高兴认识你。',
|
||||||
),
|
),
|
||||||
|
VocabularyItem(
|
||||||
|
id: 'a0-01-thanks',
|
||||||
|
word: 'thanks',
|
||||||
|
meaning: '谢谢',
|
||||||
|
example: 'Thanks. Nice to meet you, too.',
|
||||||
|
exampleMeaning: '谢谢。我也很高兴认识你。',
|
||||||
|
ipa: '/θæŋks/',
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
SeedLesson(
|
SeedLesson(
|
||||||
@@ -405,6 +413,14 @@ const a0SeedLessons = [
|
|||||||
example: 'What’s this? It’s a key.',
|
example: 'What’s this? It’s a key.',
|
||||||
exampleMeaning: '这是什么?这是钥匙。',
|
exampleMeaning: '这是什么?这是钥匙。',
|
||||||
),
|
),
|
||||||
|
VocabularyItem(
|
||||||
|
id: 'a0-05-bag',
|
||||||
|
word: 'bag',
|
||||||
|
meaning: '包',
|
||||||
|
example: 'It’s a bag.',
|
||||||
|
exampleMeaning: '这是一个包。',
|
||||||
|
ipa: '/bæɡ/',
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
SeedLesson(
|
SeedLesson(
|
||||||
@@ -451,6 +467,22 @@ const a0SeedLessons = [
|
|||||||
example: 'This is my mother.',
|
example: 'This is my mother.',
|
||||||
exampleMeaning: '这是我的妈妈。',
|
exampleMeaning: '这是我的妈妈。',
|
||||||
),
|
),
|
||||||
|
VocabularyItem(
|
||||||
|
id: 'a0-07-sister',
|
||||||
|
word: 'sister',
|
||||||
|
meaning: '姐妹',
|
||||||
|
example: 'This is my sister.',
|
||||||
|
exampleMeaning: '这是我的姐姐(或妹妹)。',
|
||||||
|
ipa: '/ˈsɪstə(r)/',
|
||||||
|
),
|
||||||
|
VocabularyItem(
|
||||||
|
id: 'a0-07-brother',
|
||||||
|
word: 'brother',
|
||||||
|
meaning: '兄弟',
|
||||||
|
example: 'This is my brother.',
|
||||||
|
exampleMeaning: '这是我的哥哥(或弟弟)。',
|
||||||
|
ipa: '/ˈbrʌðə(r)/',
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
SeedLesson(
|
SeedLesson(
|
||||||
@@ -496,14 +528,38 @@ const a0SeedLessons = [
|
|||||||
example: 'Do you like tea?',
|
example: 'Do you like tea?',
|
||||||
exampleMeaning: '你喜欢茶吗?',
|
exampleMeaning: '你喜欢茶吗?',
|
||||||
),
|
),
|
||||||
|
VocabularyItem(
|
||||||
|
id: 'a0-09-music',
|
||||||
|
word: 'music',
|
||||||
|
meaning: '音乐',
|
||||||
|
example: 'I like music.',
|
||||||
|
exampleMeaning: '我喜欢音乐。',
|
||||||
|
ipa: '/ˈmjuːzɪk/',
|
||||||
|
),
|
||||||
|
VocabularyItem(
|
||||||
|
id: 'a0-09-movies',
|
||||||
|
word: 'movies',
|
||||||
|
meaning: '电影',
|
||||||
|
example: 'Do you like movies?',
|
||||||
|
exampleMeaning: '你喜欢看电影吗?',
|
||||||
|
ipa: '/ˈmuːviz/',
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
SeedLesson(
|
SeedLesson(
|
||||||
id: 'a0-10',
|
id: 'a0-10',
|
||||||
number: 10,
|
number: 10,
|
||||||
title: 'A0 综合任务',
|
title: 'A0 综合任务',
|
||||||
outcome: '完成自我介绍、喜好和反问',
|
outcome: '没听清时请对方重复,并完成自我介绍、喜好和反问',
|
||||||
vocabulary: [
|
vocabulary: [
|
||||||
|
VocabularyItem(
|
||||||
|
id: 'a0-10-water',
|
||||||
|
word: 'water',
|
||||||
|
meaning: '水',
|
||||||
|
example: 'I like water.',
|
||||||
|
exampleMeaning: '我喜欢喝水。',
|
||||||
|
ipa: '/ˈwɔːtər/',
|
||||||
|
),
|
||||||
VocabularyItem(
|
VocabularyItem(
|
||||||
id: 'a0-10-again',
|
id: 'a0-10-again',
|
||||||
word: 'Please say that again.',
|
word: 'Please say that again.',
|
||||||
@@ -531,6 +587,7 @@ class LessonActivity {
|
|||||||
required this.listeningQuestion,
|
required this.listeningQuestion,
|
||||||
required this.answers,
|
required this.answers,
|
||||||
required this.speaking,
|
required this.speaking,
|
||||||
|
this.speakingTip = '',
|
||||||
required this.reading,
|
required this.reading,
|
||||||
required this.readingQuestion,
|
required this.readingQuestion,
|
||||||
required this.readingAnswer,
|
required this.readingAnswer,
|
||||||
@@ -544,6 +601,9 @@ class LessonActivity {
|
|||||||
final String listeningQuestion;
|
final String listeningQuestion;
|
||||||
final List<String> answers;
|
final List<String> answers;
|
||||||
final String speaking;
|
final String speaking;
|
||||||
|
|
||||||
|
/// 这句跟读的发音提示;为空时不显示,避免给每一句套用同一条提示。
|
||||||
|
final String speakingTip;
|
||||||
final String reading;
|
final String reading;
|
||||||
final String readingQuestion;
|
final String readingQuestion;
|
||||||
final String readingAnswer;
|
final String readingAnswer;
|
||||||
@@ -587,7 +647,7 @@ const a0Activities = <String, LessonActivity>{
|
|||||||
answers: ['自我介绍', '买东西', '问时间'],
|
answers: ['自我介绍', '买东西', '问时间'],
|
||||||
speaking: 'Hello. I’m Shen. Nice to meet you.',
|
speaking: 'Hello. I’m Shen. Nice to meet you.',
|
||||||
reading:
|
reading:
|
||||||
'Mia: Hello. I’m Mia. What’s your name?\nShen: Hi. I’m Shen.\nMia: Nice to meet you.\nShen: Nice to meet you, too.',
|
'Mia: Hello. I’m Mia. What’s your name?\nShen: Hi. I’m Shen.\nMia: Nice to meet you.\nShen: Thanks. Nice to meet you, too.',
|
||||||
readingQuestion: 'Shen 说的最后一句是什么?',
|
readingQuestion: 'Shen 说的最后一句是什么?',
|
||||||
readingAnswer: 'Nice to meet you, too.',
|
readingAnswer: 'Nice to meet you, too.',
|
||||||
readingOptions: [
|
readingOptions: [
|
||||||
@@ -605,6 +665,7 @@ const a0Activities = <String, LessonActivity>{
|
|||||||
listeningQuestion: '这句话是什么意思?',
|
listeningQuestion: '这句话是什么意思?',
|
||||||
answers: ['你的名字怎么拼?', '你的名字是什么?', '你来自哪里?'],
|
answers: ['你的名字怎么拼?', '你的名字是什么?', '你来自哪里?'],
|
||||||
speaking: 'S H E N',
|
speaking: 'S H E N',
|
||||||
|
speakingTip: '字母之间留一个短停顿:S /es/ - H /eɪtʃ/ - E /iː/ - N /en/。先清楚,不必快。',
|
||||||
reading:
|
reading:
|
||||||
'Mia: I’m Mia. M-I-A.\nShen: Hi, Mia. I’m Shen. S-H-E-N.\nMia: How do you spell Sam?\nShen: S-A-M.',
|
'Mia: I’m Mia. M-I-A.\nShen: Hi, Mia. I’m Shen. S-H-E-N.\nMia: How do you spell Sam?\nShen: S-A-M.',
|
||||||
readingQuestion: 'Shen 自己的名字怎么拼写?',
|
readingQuestion: 'Shen 自己的名字怎么拼写?',
|
||||||
@@ -635,6 +696,7 @@ const a0Activities = <String, LessonActivity>{
|
|||||||
listeningQuestion: '你听到的是哪个号码?',
|
listeningQuestion: '你听到的是哪个号码?',
|
||||||
answers: ['138', '183', '318'],
|
answers: ['138', '183', '318'],
|
||||||
speaking: 'My number is one-three-eight.',
|
speaking: 'My number is one-three-eight.',
|
||||||
|
speakingTip: '号码一个数字一个数字地读,数字之间稍停:one - three - eight。',
|
||||||
reading:
|
reading:
|
||||||
'Mia: What’s your phone number?\nShen: My number is one-three-eight.\nMia: One-eight-three?\nShen: No. One-three-eight.',
|
'Mia: What’s your phone number?\nShen: My number is one-three-eight.\nMia: One-eight-three?\nShen: No. One-three-eight.',
|
||||||
readingQuestion: 'Shen 的号码到底是哪一个?',
|
readingQuestion: 'Shen 的号码到底是哪一个?',
|
||||||
@@ -650,10 +712,11 @@ const a0Activities = <String, LessonActivity>{
|
|||||||
listeningQuestion: '这是什么?',
|
listeningQuestion: '这是什么?',
|
||||||
answers: ['钥匙', '书', '水'],
|
answers: ['钥匙', '书', '水'],
|
||||||
speaking: 'What’s this? It’s a pen.',
|
speaking: 'What’s this? It’s a pen.',
|
||||||
reading: 'Mia: What’s this? Is it a pen?\nShen: No. It’s a book.',
|
reading:
|
||||||
readingQuestion: 'Shen 说那件东西是什么?',
|
'Mia: What’s this? Is it a pen?\nShen: No. It’s a book.\nMia: And what’s this?\nShen: It’s a bag.',
|
||||||
|
readingQuestion: 'Shen 说第一件东西是什么?',
|
||||||
readingAnswer: 'A book',
|
readingAnswer: 'A book',
|
||||||
readingOptions: ['A book', 'A pen', 'A phone'],
|
readingOptions: ['A book', 'A pen', 'A bag'],
|
||||||
writingPrompt: '写一句“这是一支笔”。',
|
writingPrompt: '写一句“这是一支笔”。',
|
||||||
writingExample: 'It’s a pen.',
|
writingExample: 'It’s a pen.',
|
||||||
independentPrompt: '不看句框,说出一个身边物品。',
|
independentPrompt: '不看句框,说出一个身边物品。',
|
||||||
@@ -680,10 +743,10 @@ const a0Activities = <String, LessonActivity>{
|
|||||||
answers: ['妈妈', '朋友', '老师'],
|
answers: ['妈妈', '朋友', '老师'],
|
||||||
speaking: 'This is my family.',
|
speaking: 'This is my family.',
|
||||||
reading:
|
reading:
|
||||||
'Mia: Who is this? Is this your father?\nShen: No. This is my mother.',
|
'Mia: Who is this? Is this your father?\nShen: No. This is my mother.\nMia: And who is this? Your sister?\nShen: No. This is my brother.',
|
||||||
readingQuestion: 'Shen 介绍的是哪一位家人?',
|
readingQuestion: 'Shen 先介绍的是哪一位家人?',
|
||||||
readingAnswer: 'My mother',
|
readingAnswer: 'My mother',
|
||||||
readingOptions: ['My mother', 'My father', 'My sister'],
|
readingOptions: ['My mother', 'My brother', 'My father'],
|
||||||
writingPrompt: '介绍一位家人或朋友。',
|
writingPrompt: '介绍一位家人或朋友。',
|
||||||
writingExample: 'This is my mother.',
|
writingExample: 'This is my mother.',
|
||||||
independentPrompt: '不看句框,介绍一位家人或朋友。',
|
independentPrompt: '不看句框,介绍一位家人或朋友。',
|
||||||
@@ -694,6 +757,7 @@ const a0Activities = <String, LessonActivity>{
|
|||||||
listeningQuestion: '是什么时间?',
|
listeningQuestion: '是什么时间?',
|
||||||
answers: ['星期一三点', '星期三一点', '星期一一点'],
|
answers: ['星期一三点', '星期三一点', '星期一一点'],
|
||||||
speaking: 'It’s three o’clock.',
|
speaking: 'It’s three o’clock.',
|
||||||
|
speakingTip: 'o’clock 读作 /əˈklɒk/,前面的 o 很轻。',
|
||||||
reading:
|
reading:
|
||||||
'Mia: What day is it today? Is it Tuesday?\nShen: No. It’s Monday.',
|
'Mia: What day is it today? Is it Tuesday?\nShen: No. It’s Monday.',
|
||||||
readingQuestion: '对话中今天到底是星期几?',
|
readingQuestion: '对话中今天到底是星期几?',
|
||||||
@@ -710,7 +774,7 @@ const a0Activities = <String, LessonActivity>{
|
|||||||
answers: ['喜欢', '不喜欢', '不知道'],
|
answers: ['喜欢', '不喜欢', '不知道'],
|
||||||
speaking: 'I like tea. Do you like tea?',
|
speaking: 'I like tea. Do you like tea?',
|
||||||
reading:
|
reading:
|
||||||
'Mia: I like tea. Do you like tea?\nShen: No, I don’t. I like coffee.',
|
'Mia: I like tea. Do you like tea?\nShen: No, I don’t. I like coffee and music.\nMia: Do you like movies?\nShen: Yes, I do.',
|
||||||
readingQuestion: 'Shen 喜欢喝什么?',
|
readingQuestion: 'Shen 喜欢喝什么?',
|
||||||
readingAnswer: 'Coffee',
|
readingAnswer: 'Coffee',
|
||||||
readingOptions: ['Coffee', 'Tea', 'Music'],
|
readingOptions: ['Coffee', 'Tea', 'Music'],
|
||||||
@@ -720,19 +784,21 @@ const a0Activities = <String, LessonActivity>{
|
|||||||
independentHelp: 'I like … / Do you like …?',
|
independentHelp: 'I like … / Do you like …?',
|
||||||
),
|
),
|
||||||
'a0-10': LessonActivity(
|
'a0-10': LessonActivity(
|
||||||
listening: 'Please say that again.',
|
listening: 'Do you like water? Sorry, please say that again.',
|
||||||
listeningQuestion: '对方希望什么?',
|
listeningQuestion: '第二个人希望对方做什么?',
|
||||||
answers: ['再说一遍', '说慢一点', '写下来'],
|
answers: ['再说一遍', '说慢一点', '给他一杯水'],
|
||||||
speaking: 'Please speak slowly.',
|
speaking: 'Sorry, please say that again. I like water.',
|
||||||
|
speakingTip: 'water 的 t 常读得很轻,像轻轻的 d。先清楚,不必快。',
|
||||||
reading:
|
reading:
|
||||||
'Alex: Hi! I’m Alex. What’s your name?\nShen: Hi! I’m Shen. Nice to meet you.\nAlex: Nice to meet you, too. Where are you from?\nShen: I’m from Hong Kong. Where are you from?\nAlex: I’m from London. Do you like coffee?\nShen: No, I don’t. I like tea.',
|
'Alex: Hi! I’m Alex. Where are you from?\nShen: Sorry? Please say that again.\nAlex: Where are you from?\nShen: I’m from Hong Kong. Do you like coffee?\nAlex: No, I don’t. I like water.',
|
||||||
readingQuestion: 'Shen 来自哪里、喜欢喝什么?',
|
readingQuestion: 'Alex 喜欢喝什么?',
|
||||||
readingAnswer: 'Hong Kong, tea',
|
readingAnswer: 'Water',
|
||||||
readingOptions: ['Hong Kong, tea', 'London, coffee', 'Hong Kong, coffee'],
|
readingOptions: ['Water', 'Coffee', 'Tea'],
|
||||||
writingPrompt: '写姓名、地点和喜好三句。',
|
writingPrompt: '写姓名、地点和喜好三句,喜好用 water。',
|
||||||
writingExample: 'I’m Shen.\nI’m from Hong Kong.\nI like tea.',
|
writingExample: 'I’m Shen.\nI’m from Hong Kong.\nI like water.',
|
||||||
independentPrompt: '不看帮助,完成姓名、地点、喜好和反问。',
|
independentPrompt: '不看帮助:先请对方再说一遍,再说姓名、喜欢喝什么,并反问对方。',
|
||||||
independentHelp: 'I’m … / I’m from … / I like …',
|
independentHelp:
|
||||||
|
'Please say that again. / I’m … / I like water. / Do you like …?',
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -774,6 +840,7 @@ const a0SegmentActivities = <String, LessonActivity>{
|
|||||||
listeningQuestion: '号码是多少?',
|
listeningQuestion: '号码是多少?',
|
||||||
answers: ['138', '183', '318'],
|
answers: ['138', '183', '318'],
|
||||||
speaking: 'My number is one-three-eight.',
|
speaking: 'My number is one-three-eight.',
|
||||||
|
speakingTip: '号码一个数字一个数字地读,数字之间稍停:one - three - eight。',
|
||||||
reading:
|
reading:
|
||||||
'Mia: What’s your phone number?\nShen: My number is five-zero-two.\nMia: Five-two-zero?\nShen: No. Five-zero-two.',
|
'Mia: What’s your phone number?\nShen: My number is five-zero-two.\nMia: Five-two-zero?\nShen: No. Five-zero-two.',
|
||||||
readingQuestion: 'Shen 最后确认的号码是哪一个?',
|
readingQuestion: 'Shen 最后确认的号码是哪一个?',
|
||||||
@@ -1187,10 +1254,10 @@ const a0IndependentRequiredTerms = <String, List<List<String>>>{
|
|||||||
['i like', 'i love'],
|
['i like', 'i love'],
|
||||||
['do you like', '#question'],
|
['do you like', '#question'],
|
||||||
],
|
],
|
||||||
// 完成姓名、地点、喜好和反问
|
// 请对方重复,完成姓名、喜好和反问
|
||||||
'a0-10': [
|
'a0-10': [
|
||||||
|
['say that again', 'speak slowly', 'pardon'],
|
||||||
_introductionTerms,
|
_introductionTerms,
|
||||||
["i'm from", 'i am from', 'from + #word'],
|
|
||||||
['i like', 'i love'],
|
['i like', 'i love'],
|
||||||
['#question'],
|
['#question'],
|
||||||
],
|
],
|
||||||
@@ -1690,19 +1757,19 @@ const a0Dialogues = <String, LessonDialogue>{
|
|||||||
'Say: Please say that again.',
|
'Say: Please say that again.',
|
||||||
'Say: Please speak slowly.',
|
'Say: Please speak slowly.',
|
||||||
'Now ask me your name or where I am from.',
|
'Now ask me your name or where I am from.',
|
||||||
'Say one thing you like.',
|
'Tell me what you like to drink.',
|
||||||
],
|
],
|
||||||
hints: [
|
hints: [
|
||||||
'Please say that again.',
|
'Please say that again.',
|
||||||
'Please speak slowly.',
|
'Please speak slowly.',
|
||||||
'What’s your name?',
|
'What’s your name?',
|
||||||
'I like tea.',
|
'I like water.',
|
||||||
],
|
],
|
||||||
translations: [
|
translations: [
|
||||||
'请说:Please say that again(请再说一遍)。',
|
'请说:Please say that again(请再说一遍)。',
|
||||||
'请说:Please speak slowly(请说慢一点)。',
|
'请说:Please speak slowly(请说慢一点)。',
|
||||||
'现在请问我的名字或我来自哪里。',
|
'现在请问我的名字或我来自哪里。',
|
||||||
'请说一件你喜欢的事物。',
|
'告诉我你喜欢喝什么。',
|
||||||
],
|
],
|
||||||
requiredTerms: [
|
requiredTerms: [
|
||||||
['say that again', 'again', 'pardon'],
|
['say that again', 'again', 'pardon'],
|
||||||
@@ -1716,7 +1783,7 @@ const a0Dialogues = <String, LessonDialogue>{
|
|||||||
],
|
],
|
||||||
['i like', 'i love'],
|
['i like', 'i love'],
|
||||||
],
|
],
|
||||||
taskLabels: ['请求对方重复', '请求对方放慢语速', '反问名字或来自哪里', '说出一件你喜欢的事物'],
|
taskLabels: ['请求对方重复', '请求对方放慢语速', '反问名字或来自哪里', '说出你喜欢喝什么'],
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,149 @@
|
|||||||
|
/// 把设备转写和示范句逐词对照。这不是发音评分:转写只说明“机器听成了什么”,
|
||||||
|
/// 用来提示学习者哪些词没被听出来,值得再听示范、再说一次。
|
||||||
|
class SpokenWord {
|
||||||
|
const SpokenWord(this.text, {required this.heard});
|
||||||
|
|
||||||
|
/// 示范句中的原词(保留大小写和标点,便于直接显示)。
|
||||||
|
final String text;
|
||||||
|
final bool heard;
|
||||||
|
}
|
||||||
|
|
||||||
|
class SpokenComparison {
|
||||||
|
const SpokenComparison({required this.words, required this.extraWords});
|
||||||
|
|
||||||
|
final List<SpokenWord> words;
|
||||||
|
|
||||||
|
/// 转写里出现、但示范句没有的词。
|
||||||
|
final List<String> extraWords;
|
||||||
|
|
||||||
|
int get heardCount => words.where((word) => word.heard).length;
|
||||||
|
int get total => words.length;
|
||||||
|
List<String> get missedWords => [
|
||||||
|
for (final word in words)
|
||||||
|
if (!word.heard) word.text,
|
||||||
|
];
|
||||||
|
|
||||||
|
/// 全部听出且没有多余词。
|
||||||
|
bool get matches => total > 0 && heardCount == total && extraWords.isEmpty;
|
||||||
|
|
||||||
|
/// 大部分词被听出(≥ 80%)。
|
||||||
|
bool get close => total > 0 && heardCount / total >= 0.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
const _digitWords = [
|
||||||
|
'zero',
|
||||||
|
'one',
|
||||||
|
'two',
|
||||||
|
'three',
|
||||||
|
'four',
|
||||||
|
'five',
|
||||||
|
'six',
|
||||||
|
'seven',
|
||||||
|
'eight',
|
||||||
|
'nine',
|
||||||
|
];
|
||||||
|
|
||||||
|
const _contractions = {
|
||||||
|
"i'm": ['i', 'am'],
|
||||||
|
"it's": ['it', 'is'],
|
||||||
|
"what's": ['what', 'is'],
|
||||||
|
"that's": ['that', 'is'],
|
||||||
|
"he's": ['he', 'is'],
|
||||||
|
"she's": ['she', 'is'],
|
||||||
|
"name's": ['name', 'is'],
|
||||||
|
"don't": ['do', 'not'],
|
||||||
|
"you're": ['you', 'are'],
|
||||||
|
};
|
||||||
|
|
||||||
|
/// 一个显示词对应的比较单位。例如 "I’m" 展开为 i/am,"138" 展开为
|
||||||
|
/// one/three/eight,"o’clock" 统一为 oclock。
|
||||||
|
List<String> _unitsOf(String raw) {
|
||||||
|
var word = raw
|
||||||
|
.toLowerCase()
|
||||||
|
.replaceAll(RegExp(r'[‘’`´]'), "'")
|
||||||
|
.replaceAll(RegExp(r"[^a-z0-9']"), '');
|
||||||
|
word = word.replaceAll(RegExp(r"^'+|'+$"), '');
|
||||||
|
if (word.isEmpty) return const [];
|
||||||
|
if (word == "o'clock") return const ['oclock'];
|
||||||
|
final expanded = _contractions[word];
|
||||||
|
if (expanded != null) return expanded;
|
||||||
|
if (RegExp(r'^\d+$').hasMatch(word)) {
|
||||||
|
return [for (final digit in word.split('')) _digitWords[int.parse(digit)]];
|
||||||
|
}
|
||||||
|
return [word.replaceAll("'", '')];
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> _displayWords(String text) => text
|
||||||
|
.replaceAll(RegExp(r'[-–—/]'), ' ')
|
||||||
|
.split(RegExp(r'\s+'))
|
||||||
|
.where((word) => _unitsOf(word).isNotEmpty)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
List<String> _heardUnits(String transcript) => [
|
||||||
|
for (final word in _displayWords(transcript)) ..._unitsOf(word),
|
||||||
|
];
|
||||||
|
|
||||||
|
SpokenComparison compareSpoken(String expected, String transcript) {
|
||||||
|
final display = _displayWords(expected);
|
||||||
|
final expectedUnits = <String>[];
|
||||||
|
final owner = <int>[];
|
||||||
|
for (var index = 0; index < display.length; index++) {
|
||||||
|
for (final unit in _unitsOf(display[index])) {
|
||||||
|
expectedUnits.add(unit);
|
||||||
|
owner.add(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var heard = _heardUnits(transcript);
|
||||||
|
// 拼读时转写常把字母连成一个词(S H E N → Shen),拆回单个字母。
|
||||||
|
final spellsLetters =
|
||||||
|
expectedUnits.isNotEmpty &&
|
||||||
|
expectedUnits.every((unit) => RegExp(r'^[a-z]$').hasMatch(unit));
|
||||||
|
if (spellsLetters) {
|
||||||
|
heard = [for (final unit in heard) ...unit.split('')];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 最长公共子序列:保持词序,重复词也能正确对齐。
|
||||||
|
final n = expectedUnits.length;
|
||||||
|
final m = heard.length;
|
||||||
|
final table = List.generate(n + 1, (_) => List.filled(m + 1, 0));
|
||||||
|
for (var i = n - 1; i >= 0; i--) {
|
||||||
|
for (var j = m - 1; j >= 0; j--) {
|
||||||
|
table[i][j] = expectedUnits[i] == heard[j]
|
||||||
|
? table[i + 1][j + 1] + 1
|
||||||
|
: (table[i + 1][j] >= table[i][j + 1]
|
||||||
|
? table[i + 1][j]
|
||||||
|
: table[i][j + 1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
final unitHeard = List.filled(n, false);
|
||||||
|
final heardUsed = List.filled(m, false);
|
||||||
|
var i = 0;
|
||||||
|
var j = 0;
|
||||||
|
while (i < n && j < m) {
|
||||||
|
if (expectedUnits[i] == heard[j]) {
|
||||||
|
unitHeard[i] = true;
|
||||||
|
heardUsed[j] = true;
|
||||||
|
i++;
|
||||||
|
j++;
|
||||||
|
} else if (table[i + 1][j] >= table[i][j + 1]) {
|
||||||
|
i++;
|
||||||
|
} else {
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final wordHeard = List.filled(display.length, true);
|
||||||
|
for (var unit = 0; unit < n; unit++) {
|
||||||
|
if (!unitHeard[unit]) wordHeard[owner[unit]] = false;
|
||||||
|
}
|
||||||
|
return SpokenComparison(
|
||||||
|
words: [
|
||||||
|
for (var index = 0; index < display.length; index++)
|
||||||
|
SpokenWord(display[index], heard: wordHeard[index]),
|
||||||
|
],
|
||||||
|
extraWords: [
|
||||||
|
for (var index = 0; index < m; index++)
|
||||||
|
if (!heardUsed[index]) heard[index],
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -77,7 +77,8 @@ class WritingFeedback {
|
|||||||
]) ||
|
]) ||
|
||||||
has('clock')),
|
has('clock')),
|
||||||
'a0-09' => hasIntroduction && has('like') && words.length >= 3,
|
'a0-09' => hasIntroduction && has('like') && words.length >= 3,
|
||||||
'a0-10' => hasIntroduction && has('from') && has('like'),
|
'a0-10' =>
|
||||||
|
hasIntroduction && has('from') && has('like') && has('water'),
|
||||||
_ => words.length >= 2,
|
_ => words.length >= 2,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -113,7 +114,7 @@ class WritingFeedback {
|
|||||||
'a0-07' => '用 This is my … 介绍一位家人或朋友。',
|
'a0-07' => '用 This is my … 介绍一位家人或朋友。',
|
||||||
'a0-08' => '用 It’s … 写一个星期或整点时间。',
|
'a0-08' => '用 It’s … 写一个星期或整点时间。',
|
||||||
'a0-09' => '用 I like … 写出一种喜好。',
|
'a0-09' => '用 I like … 写出一种喜好。',
|
||||||
'a0-10' => '分别写姓名、来自哪里和一项喜好三部分。',
|
'a0-10' => '分别写姓名、来自哪里和喜好三部分,喜好用 water:I like water.',
|
||||||
_ => '再补充一个完整英文句子。',
|
_ => '再补充一个完整英文句子。',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ class _AssessmentPreparationPageState extends State<AssessmentPreparationPage> {
|
|||||||
'这些数字帮助你判断准备程度,但不会替代本次评估。',
|
'这些数字帮助你判断准备程度,但不会替代本次评估。',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SectionCard(
|
SectionCard(
|
||||||
tint: AppColors.warm,
|
tint: AppColors.warm,
|
||||||
child: Text(
|
child: Text(
|
||||||
'评估规则\n'
|
'评估规则\n'
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ class _OpenScene extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
recommended ? 'A0 · 推荐' : 'A0',
|
recommended ? 'A0 · 推荐' : 'A0',
|
||||||
style: const TextStyle(color: AppColors.green),
|
style: TextStyle(color: AppColors.green),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -111,7 +111,7 @@ class _LockedScene extends StatelessWidget {
|
|||||||
Widget build(BuildContext context) => SectionCard(
|
Widget build(BuildContext context) => SectionCard(
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
const Icon(Icons.lock_outline, color: AppColors.muted),
|
Icon(Icons.lock_outline, color: AppColors.muted),
|
||||||
const SizedBox(width: 10),
|
const SizedBox(width: 10),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Column(
|
child: Column(
|
||||||
@@ -686,7 +686,7 @@ class _DialoguePageState extends State<DialoguePage>
|
|||||||
tint: AppColors.warm,
|
tint: AppColors.warm,
|
||||||
child: Text(
|
child: Text(
|
||||||
hint!,
|
hint!,
|
||||||
style: const TextStyle(color: AppColors.warmInk),
|
style: TextStyle(color: AppColors.warmInk),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (aiNotice != null)
|
if (aiNotice != null)
|
||||||
@@ -694,7 +694,7 @@ class _DialoguePageState extends State<DialoguePage>
|
|||||||
tint: AppColors.warm,
|
tint: AppColors.warm,
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
const Icon(
|
Icon(
|
||||||
Icons.cloud_off_outlined,
|
Icons.cloud_off_outlined,
|
||||||
size: 18,
|
size: 18,
|
||||||
color: AppColors.warmInk,
|
color: AppColors.warmInk,
|
||||||
@@ -703,7 +703,7 @@ class _DialoguePageState extends State<DialoguePage>
|
|||||||
Expanded(
|
Expanded(
|
||||||
child: Text(
|
child: Text(
|
||||||
aiNotice!,
|
aiNotice!,
|
||||||
style: const TextStyle(
|
style: TextStyle(
|
||||||
color: AppColors.warmInk,
|
color: AppColors.warmInk,
|
||||||
fontSize: 13,
|
fontSize: 13,
|
||||||
),
|
),
|
||||||
@@ -715,7 +715,7 @@ class _DialoguePageState extends State<DialoguePage>
|
|||||||
if (validationError != null)
|
if (validationError != null)
|
||||||
Text(
|
Text(
|
||||||
validationError!,
|
validationError!,
|
||||||
style: const TextStyle(color: AppColors.warmInk),
|
style: TextStyle(color: AppColors.warmInk),
|
||||||
),
|
),
|
||||||
TextField(
|
TextField(
|
||||||
controller: controller,
|
controller: controller,
|
||||||
@@ -757,7 +757,7 @@ class _DialoguePageState extends State<DialoguePage>
|
|||||||
transcriptEdited
|
transcriptEdited
|
||||||
? '你修改了设备转写:这轮按文字作答保存。'
|
? '你修改了设备转写:这轮按文字作答保存。'
|
||||||
: '这是设备转写;未修改提交后会作为语音尝试保存。',
|
: '这是设备转写;未修改提交后会作为语音尝试保存。',
|
||||||
style: const TextStyle(color: AppColors.muted, fontSize: 12),
|
style: TextStyle(color: AppColors.muted, fontSize: 12),
|
||||||
),
|
),
|
||||||
RecordingControls(
|
RecordingControls(
|
||||||
recording: recording,
|
recording: recording,
|
||||||
@@ -771,9 +771,9 @@ class _DialoguePageState extends State<DialoguePage>
|
|||||||
widget.state.keepRecordings
|
widget.state.keepRecordings
|
||||||
? '录音只保存在本机,不会发送给 AI。'
|
? '录音只保存在本机,不会发送给 AI。'
|
||||||
: '录音仅供本次回听,离开后自动删除。',
|
: '录音仅供本次回听,离开后自动删除。',
|
||||||
style: const TextStyle(color: AppColors.muted, fontSize: 12),
|
style: TextStyle(color: AppColors.muted, fontSize: 12),
|
||||||
),
|
),
|
||||||
const Text(
|
Text(
|
||||||
'文字输入可完成教学对话;即使使用语音输入,本受控教学对话也不会单独记为独立口语证据。',
|
'文字输入可完成教学对话;即使使用语音输入,本受控教学对话也不会单独记为独立口语证据。',
|
||||||
style: TextStyle(color: AppColors.muted, fontSize: 12),
|
style: TextStyle(color: AppColors.muted, fontSize: 12),
|
||||||
),
|
),
|
||||||
@@ -792,7 +792,7 @@ class _DialoguePageState extends State<DialoguePage>
|
|||||||
tint: AppColors.warm,
|
tint: AppColors.warm,
|
||||||
child: Text(
|
child: Text(
|
||||||
'下次可以注意:${latestFeedback!}',
|
'下次可以注意:${latestFeedback!}',
|
||||||
style: const TextStyle(color: AppColors.warmInk),
|
style: TextStyle(color: AppColors.warmInk),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
PrimaryButton(
|
PrimaryButton(
|
||||||
@@ -916,7 +916,7 @@ class _TurnAction extends StatelessWidget {
|
|||||||
const SizedBox(width: 4),
|
const SizedBox(width: 4),
|
||||||
Text(
|
Text(
|
||||||
label,
|
label,
|
||||||
style: const TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
color: AppColors.green,
|
color: AppColors.green,
|
||||||
fontWeight: FontWeight.w500,
|
fontWeight: FontWeight.w500,
|
||||||
@@ -935,7 +935,7 @@ class _AssistChip extends StatelessWidget {
|
|||||||
Widget build(BuildContext context) => ActionChip(
|
Widget build(BuildContext context) => ActionChip(
|
||||||
label: Text(label),
|
label: Text(label),
|
||||||
backgroundColor: AppColors.surface,
|
backgroundColor: AppColors.surface,
|
||||||
side: const BorderSide(color: AppColors.line),
|
side: BorderSide(color: AppColors.line),
|
||||||
onPressed: onTap,
|
onPressed: onTap,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ class HomePage extends StatelessWidget {
|
|||||||
SectionCard(
|
SectionCard(
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
const Icon(Icons.psychology_outlined, color: AppColors.green),
|
Icon(Icons.psychology_outlined, color: AppColors.green),
|
||||||
const SizedBox(width: 10),
|
const SizedBox(width: 10),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Text(
|
child: Text(
|
||||||
@@ -92,7 +92,7 @@ class HomePage extends StatelessWidget {
|
|||||||
isReview
|
isReview
|
||||||
? '${(count * 2).clamp(2, 10)} 分钟'
|
? '${(count * 2).clamp(2, 10)} 分钟'
|
||||||
: stageStep?.minutes ?? '12 分钟',
|
: stageStep?.minutes ?? '12 分钟',
|
||||||
style: const TextStyle(color: AppColors.green),
|
style: TextStyle(color: AppColors.green),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -195,7 +195,7 @@ class _FrameworkNote extends StatelessWidget {
|
|||||||
color: AppColors.warm,
|
color: AppColors.warm,
|
||||||
borderRadius: BorderRadius.circular(14),
|
borderRadius: BorderRadius.circular(14),
|
||||||
),
|
),
|
||||||
child: const Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
Icon(Icons.info_outline, color: AppColors.warmInk),
|
Icon(Icons.info_outline, color: AppColors.warmInk),
|
||||||
SizedBox(width: 8),
|
SizedBox(width: 8),
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import '../../core/ai_service.dart';
|
|||||||
import '../../core/app_theme.dart';
|
import '../../core/app_theme.dart';
|
||||||
import '../../core/models.dart';
|
import '../../core/models.dart';
|
||||||
import '../../core/seed_courses.dart';
|
import '../../core/seed_courses.dart';
|
||||||
|
import '../../core/speech_compare.dart';
|
||||||
import '../../core/voice_service.dart';
|
import '../../core/voice_service.dart';
|
||||||
import '../../core/writing_feedback.dart';
|
import '../../core/writing_feedback.dart';
|
||||||
import '../../widgets/app_widgets.dart';
|
import '../../widgets/app_widgets.dart';
|
||||||
@@ -112,6 +113,7 @@ class _LessonFlowState extends State<LessonFlow> {
|
|||||||
correctAnswer: activity.answers.first,
|
correctAnswer: activity.answers.first,
|
||||||
selectedAnswer: selectedAnswer,
|
selectedAnswer: selectedAnswer,
|
||||||
audioPlayed: listeningAudioPlayed,
|
audioPlayed: listeningAudioPlayed,
|
||||||
|
missed: listeningMissed,
|
||||||
onSelected: (value) => setState(() {
|
onSelected: (value) => setState(() {
|
||||||
selectedAnswer = value;
|
selectedAnswer = value;
|
||||||
if (listeningOptions[value] != activity.answers.first) {
|
if (listeningOptions[value] != activity.answers.first) {
|
||||||
@@ -119,11 +121,14 @@ class _LessonFlowState extends State<LessonFlow> {
|
|||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
onPlayed: () => setState(() => listeningAudioPlayed = true),
|
onPlayed: () => setState(() => listeningAudioPlayed = true),
|
||||||
onLookup: () => showLexiconLookup(
|
onLookup: () {
|
||||||
context,
|
setState(() => listeningMissed = true);
|
||||||
state: widget.state,
|
showLexiconLookup(
|
||||||
initialText: activity.listening,
|
context,
|
||||||
),
|
state: widget.state,
|
||||||
|
initialText: activity.listening,
|
||||||
|
);
|
||||||
|
},
|
||||||
onContinue:
|
onContinue:
|
||||||
selectedAnswer >= 0 &&
|
selectedAnswer >= 0 &&
|
||||||
listeningOptions[selectedAnswer] == activity.answers.first
|
listeningOptions[selectedAnswer] == activity.answers.first
|
||||||
@@ -135,6 +140,7 @@ class _LessonFlowState extends State<LessonFlow> {
|
|||||||
content = _SpeakingStep(
|
content = _SpeakingStep(
|
||||||
state: widget.state,
|
state: widget.state,
|
||||||
text: activity.speaking,
|
text: activity.speaking,
|
||||||
|
tip: activity.speakingTip,
|
||||||
keepRecording: widget.state.keepRecordings,
|
keepRecording: widget.state.keepRecordings,
|
||||||
onContinue: widget.state.completeSpeaking,
|
onContinue: widget.state.completeSpeaking,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -190,7 +190,7 @@ class _IndependentStepState extends State<_IndependentStep>
|
|||||||
tint: AppColors.warm,
|
tint: AppColors.warm,
|
||||||
child: Text(
|
child: Text(
|
||||||
validationError!,
|
validationError!,
|
||||||
style: const TextStyle(color: AppColors.warmInk),
|
style: TextStyle(color: AppColors.warmInk),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (!widget.showHelp)
|
if (!widget.showHelp)
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ class _ListeningStep extends StatelessWidget {
|
|||||||
required this.correctAnswer,
|
required this.correctAnswer,
|
||||||
required this.selectedAnswer,
|
required this.selectedAnswer,
|
||||||
required this.audioPlayed,
|
required this.audioPlayed,
|
||||||
|
required this.missed,
|
||||||
required this.onSelected,
|
required this.onSelected,
|
||||||
required this.onPlayed,
|
required this.onPlayed,
|
||||||
required this.onLookup,
|
required this.onLookup,
|
||||||
@@ -21,6 +22,9 @@ class _ListeningStep extends StatelessWidget {
|
|||||||
|
|
||||||
final int selectedAnswer;
|
final int selectedAnswer;
|
||||||
final bool audioPlayed;
|
final bool audioPlayed;
|
||||||
|
|
||||||
|
/// 选错过或查看过原文;此后可以看原文,但本题不再算独立听辨。
|
||||||
|
final bool missed;
|
||||||
final ValueChanged<int> onSelected;
|
final ValueChanged<int> onSelected;
|
||||||
final VoidCallback onPlayed;
|
final VoidCallback onPlayed;
|
||||||
final VoidCallback onLookup;
|
final VoidCallback onLookup;
|
||||||
@@ -29,6 +33,9 @@ class _ListeningStep extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final answers = options;
|
final answers = options;
|
||||||
|
final answeredCorrectly =
|
||||||
|
selectedAnswer >= 0 && answers[selectedAnswer] == correctAnswer;
|
||||||
|
final revealText = answeredCorrectly || missed;
|
||||||
return _LessonScaffold(
|
return _LessonScaffold(
|
||||||
step: 2,
|
step: 2,
|
||||||
child: SpacedColumn(
|
child: SpacedColumn(
|
||||||
@@ -47,22 +54,23 @@ class _ListeningStep extends StatelessWidget {
|
|||||||
onPlayed: onPlayed,
|
onPlayed: onPlayed,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
TextButton.icon(
|
if (!audioPlayed)
|
||||||
onPressed: onLookup,
|
Text(
|
||||||
icon: const Icon(Icons.menu_book_outlined),
|
'先播放音频,听完再选择。原文会在作答后显示。',
|
||||||
label: const Text('查看词或短语'),
|
style: TextStyle(color: AppColors.muted),
|
||||||
),
|
),
|
||||||
if (audioPlayed)
|
if (revealText)
|
||||||
SectionCard(child: LexiconText(activity.listening, state: state)),
|
SectionCard(child: LexiconText(activity.listening, state: state))
|
||||||
|
else if (audioPlayed)
|
||||||
|
TextButton.icon(
|
||||||
|
onPressed: onLookup,
|
||||||
|
icon: const Icon(Icons.menu_book_outlined),
|
||||||
|
label: const Text('听不懂,查看原文和词义(本题不计入听辨)'),
|
||||||
|
),
|
||||||
for (var index = 0; index < answers.length; index++)
|
for (var index = 0; index < answers.length; index++)
|
||||||
SectionCard(
|
SectionCard(
|
||||||
tint: selectedAnswer == index ? AppColors.softGreen : null,
|
tint: selectedAnswer == index ? AppColors.softGreen : null,
|
||||||
onTap: () {
|
onTap: audioPlayed ? () => onSelected(index) : null,
|
||||||
onSelected(index);
|
|
||||||
if (!audioPlayed) {
|
|
||||||
onPlayed();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
@@ -74,18 +82,23 @@ class _ListeningStep extends StatelessWidget {
|
|||||||
: AppColors.muted,
|
: AppColors.muted,
|
||||||
),
|
),
|
||||||
const SizedBox(width: 10),
|
const SizedBox(width: 10),
|
||||||
Text(answers[index]),
|
Text(
|
||||||
|
answers[index],
|
||||||
|
style: audioPlayed
|
||||||
|
? null
|
||||||
|
: TextStyle(color: AppColors.muted),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
PrimaryButton(
|
PrimaryButton(
|
||||||
label: selectedAnswer >= 0
|
label: selectedAnswer >= 0
|
||||||
? '检查并继续'
|
? '检查并继续'
|
||||||
: (audioPlayed ? '请选择答案' : '先播放音频或选择答案'),
|
: (audioPlayed ? '请选择答案' : '先播放音频'),
|
||||||
onPressed: onContinue,
|
onPressed: onContinue,
|
||||||
),
|
),
|
||||||
if (selectedAnswer >= 0 && answers[selectedAnswer] != correctAnswer)
|
if (selectedAnswer >= 0 && answers[selectedAnswer] != correctAnswer)
|
||||||
const Text(
|
Text(
|
||||||
'再听一次,选择正确答案。',
|
'再听一次,选择正确答案。',
|
||||||
style: TextStyle(color: AppColors.warmInk),
|
style: TextStyle(color: AppColors.warmInk),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ class _ReadingStepState extends State<_ReadingStep> {
|
|||||||
Row(
|
Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
const Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
Icons.chat_bubble_outline,
|
Icons.chat_bubble_outline,
|
||||||
@@ -117,7 +117,7 @@ class _ReadingStepState extends State<_ReadingStep> {
|
|||||||
onTap: () =>
|
onTap: () =>
|
||||||
VoiceService.instance.speak(widget.activity.reading),
|
VoiceService.instance.speak(widget.activity.reading),
|
||||||
borderRadius: BorderRadius.circular(16),
|
borderRadius: BorderRadius.circular(16),
|
||||||
child: const Padding(
|
child: Padding(
|
||||||
padding: EdgeInsets.symmetric(
|
padding: EdgeInsets.symmetric(
|
||||||
horizontal: 8,
|
horizontal: 8,
|
||||||
vertical: 4,
|
vertical: 4,
|
||||||
@@ -194,7 +194,7 @@ class _ReadingStepState extends State<_ReadingStep> {
|
|||||||
color: AppColors.green.withValues(alpha: 0.12),
|
color: AppColors.green.withValues(alpha: 0.12),
|
||||||
borderRadius: BorderRadius.circular(6),
|
borderRadius: BorderRadius.circular(6),
|
||||||
),
|
),
|
||||||
child: const Text(
|
child: Text(
|
||||||
'问题',
|
'问题',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: AppColors.green,
|
color: AppColors.green,
|
||||||
@@ -207,7 +207,7 @@ class _ReadingStepState extends State<_ReadingStep> {
|
|||||||
Expanded(
|
Expanded(
|
||||||
child: Text(
|
child: Text(
|
||||||
widget.activity.readingQuestion,
|
widget.activity.readingQuestion,
|
||||||
style: const TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 15,
|
fontSize: 15,
|
||||||
fontWeight: FontWeight.w600,
|
fontWeight: FontWeight.w600,
|
||||||
color: AppColors.ink,
|
color: AppColors.ink,
|
||||||
@@ -279,7 +279,7 @@ class _ReadingStepState extends State<_ReadingStep> {
|
|||||||
color: AppColors.green.withValues(alpha: 0.3),
|
color: AppColors.green.withValues(alpha: 0.3),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
child: const Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
Icon(Icons.check_circle, color: AppColors.green, size: 20),
|
Icon(Icons.check_circle, color: AppColors.green, size: 20),
|
||||||
SizedBox(width: 8),
|
SizedBox(width: 8),
|
||||||
@@ -309,7 +309,7 @@ class _ReadingStepState extends State<_ReadingStep> {
|
|||||||
color: AppColors.warmInk.withValues(alpha: 0.2),
|
color: AppColors.warmInk.withValues(alpha: 0.2),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
child: const Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
Icons.help_outline,
|
Icons.help_outline,
|
||||||
@@ -333,7 +333,7 @@ class _ReadingStepState extends State<_ReadingStep> {
|
|||||||
TextField(
|
TextField(
|
||||||
controller: controller,
|
controller: controller,
|
||||||
onChanged: (_) => setState(() {}),
|
onChanged: (_) => setState(() {}),
|
||||||
decoration: const InputDecoration(
|
decoration: InputDecoration(
|
||||||
hintText: '用英文输入答案',
|
hintText: '用英文输入答案',
|
||||||
filled: true,
|
filled: true,
|
||||||
fillColor: AppColors.surface,
|
fillColor: AppColors.surface,
|
||||||
@@ -346,7 +346,7 @@ class _ReadingStepState extends State<_ReadingStep> {
|
|||||||
tint: AppColors.warm,
|
tint: AppColors.warm,
|
||||||
child: Text(
|
child: Text(
|
||||||
'答案:${widget.activity.readingAnswer}',
|
'答案:${widget.activity.readingAnswer}',
|
||||||
style: const TextStyle(color: AppColors.warmInk),
|
style: TextStyle(color: AppColors.warmInk),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (!showAnswer &&
|
if (!showAnswer &&
|
||||||
|
|||||||
@@ -4,10 +4,12 @@ class _SpeakingStep extends StatefulWidget {
|
|||||||
const _SpeakingStep({
|
const _SpeakingStep({
|
||||||
required this.state,
|
required this.state,
|
||||||
required this.text,
|
required this.text,
|
||||||
|
this.tip = '',
|
||||||
required this.keepRecording,
|
required this.keepRecording,
|
||||||
required this.onContinue,
|
required this.onContinue,
|
||||||
});
|
});
|
||||||
final String text;
|
final String text;
|
||||||
|
final String tip;
|
||||||
final AppState state;
|
final AppState state;
|
||||||
final bool keepRecording;
|
final bool keepRecording;
|
||||||
final VoidCallback onContinue;
|
final VoidCallback onContinue;
|
||||||
@@ -78,21 +80,18 @@ class _SpeakingStepState extends State<_SpeakingStep>
|
|||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: const TextStyle(fontSize: 30, fontWeight: FontWeight.w600),
|
style: const TextStyle(fontSize: 30, fontWeight: FontWeight.w600),
|
||||||
),
|
),
|
||||||
Text(
|
|
||||||
'/es - eɪtʃ - iː - en/',
|
|
||||||
style: Theme.of(context).textTheme.bodyMedium,
|
|
||||||
),
|
|
||||||
SectionCard(
|
SectionCard(
|
||||||
tint: AppColors.surfaceMuted,
|
tint: AppColors.surfaceMuted,
|
||||||
child: _AudioRow(label: '播放示范音', speech: widget.text),
|
child: _AudioRow(label: '播放示范音', speech: widget.text),
|
||||||
),
|
),
|
||||||
const SectionCard(
|
if (widget.tip.isNotEmpty)
|
||||||
tint: AppColors.warm,
|
SectionCard(
|
||||||
child: Text(
|
tint: AppColors.warm,
|
||||||
'字母之间留一个短停顿。先清楚,不必快。',
|
child: Text(
|
||||||
style: TextStyle(color: AppColors.warmInk),
|
widget.tip,
|
||||||
|
style: TextStyle(color: AppColors.warmInk),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
SecondaryButton(
|
SecondaryButton(
|
||||||
label: transcribing
|
label: transcribing
|
||||||
? '正在 AI 识别发音…'
|
? '正在 AI 识别发音…'
|
||||||
@@ -137,9 +136,11 @@ class _SpeakingStepState extends State<_SpeakingStep>
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (transcript.isNotEmpty)
|
if (transcript.isNotEmpty)
|
||||||
SectionCard(child: Text("设备转写:$transcript\n请确认它是否接近你刚才说的内容。")),
|
_SpokenComparisonCard(expected: widget.text, transcript: transcript),
|
||||||
const SectionCard(
|
const SectionCard(
|
||||||
child: Text('转写不确定或与原句不符时,可重说或继续文字练习;这一步只算跟读练习,不作为独立口语证据。'),
|
child: Text(
|
||||||
|
'转写只反映机器听成了什么,不等于发音评分;没听出的词可以再听示范、重说一次。这一步只算跟读练习,不作为独立口语证据。',
|
||||||
|
),
|
||||||
),
|
),
|
||||||
PrimaryButton(
|
PrimaryButton(
|
||||||
label: transcript.isEmpty ? '我已跟读,继续' : '确认并继续',
|
label: transcript.isEmpty ? '我已跟读,继续' : '确认并继续',
|
||||||
@@ -149,3 +150,54 @@ class _SpeakingStepState extends State<_SpeakingStep>
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class _SpokenComparisonCard extends StatelessWidget {
|
||||||
|
const _SpokenComparisonCard({
|
||||||
|
required this.expected,
|
||||||
|
required this.transcript,
|
||||||
|
});
|
||||||
|
|
||||||
|
final String expected;
|
||||||
|
final String transcript;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final result = compareSpoken(expected, transcript);
|
||||||
|
final summary = result.matches
|
||||||
|
? '每个词都被听出来了。'
|
||||||
|
: result.close
|
||||||
|
? '大部分词都被听出来了,橙色的词再练一次。'
|
||||||
|
: '有几个词没被听出来:先听示范,再慢一点说。';
|
||||||
|
return SectionCard(
|
||||||
|
tint: result.close ? AppColors.softGreen : AppColors.warm,
|
||||||
|
child: SpacedColumn(
|
||||||
|
spacing: 8,
|
||||||
|
children: [
|
||||||
|
Text('听出 ${result.heardCount}/${result.total} 个词。$summary'),
|
||||||
|
Wrap(
|
||||||
|
spacing: 6,
|
||||||
|
runSpacing: 6,
|
||||||
|
children: [
|
||||||
|
for (final word in result.words)
|
||||||
|
Text(
|
||||||
|
word.text,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
color: word.heard ? AppColors.green : AppColors.warmInk,
|
||||||
|
decoration: word.heard
|
||||||
|
? TextDecoration.none
|
||||||
|
: TextDecoration.underline,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'设备转写:$transcript',
|
||||||
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ class _WritingStepState extends State<_WritingStep> {
|
|||||||
Text('还可补充:${aiFeedback!.missing.join('、')}'),
|
Text('还可补充:${aiFeedback!.missing.join('、')}'),
|
||||||
if (aiFeedback!.suggestion != null)
|
if (aiFeedback!.suggestion != null)
|
||||||
Text('可参考改写:${aiFeedback!.suggestion}'),
|
Text('可参考改写:${aiFeedback!.suggestion}'),
|
||||||
const Text(
|
Text(
|
||||||
'这是学习帮助;请按自己的意思重写后再检查,系统不会仅凭 AI 建议记为掌握。',
|
'这是学习帮助;请按自己的意思重写后再检查,系统不会仅凭 AI 建议记为掌握。',
|
||||||
style: TextStyle(fontSize: 12, color: AppColors.muted),
|
style: TextStyle(fontSize: 12, color: AppColors.muted),
|
||||||
),
|
),
|
||||||
@@ -164,7 +164,7 @@ class _WritingStepState extends State<_WritingStep> {
|
|||||||
tint: AppColors.warm,
|
tint: AppColors.warm,
|
||||||
child: Text(
|
child: Text(
|
||||||
aiFeedbackError!,
|
aiFeedbackError!,
|
||||||
style: const TextStyle(color: AppColors.warmInk),
|
style: TextStyle(color: AppColors.warmInk),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (result != null)
|
if (result != null)
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class _WelcomePageState extends State<WelcomePage> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(width: 12),
|
const SizedBox(width: 12),
|
||||||
const Column(
|
Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
@@ -312,7 +312,7 @@ class _PlacementPageState extends State<PlacementPage>
|
|||||||
label: '播放示范音',
|
label: '播放示范音',
|
||||||
onPressed: () => VoiceService.instance.speak(_readAloudText),
|
onPressed: () => VoiceService.instance.speak(_readAloudText),
|
||||||
),
|
),
|
||||||
const SectionCard(
|
SectionCard(
|
||||||
tint: AppColors.surfaceMuted,
|
tint: AppColors.surfaceMuted,
|
||||||
child: Text('这一题只是开口热身,不录音、不打分,可以跳过。'),
|
child: Text('这一题只是开口热身,不录音、不打分,可以跳过。'),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -130,14 +130,14 @@ class ProgressPage extends StatelessWidget {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const Icon(Icons.chevron_right, color: AppColors.muted),
|
Icon(Icons.chevron_right, color: AppColors.muted),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
if (state.a0Passed)
|
if (state.a0Passed)
|
||||||
const SectionCard(
|
SectionCard(
|
||||||
tint: AppColors.softGreen,
|
tint: AppColors.softGreen,
|
||||||
child: Text('A0 已通过。A1 主线内容尚未提供,可继续进行 A0 巩固。'),
|
child: Text('A0 已通过。A1 主线内容尚未提供,可继续进行 A0 巩固。'),
|
||||||
),
|
),
|
||||||
@@ -311,6 +311,41 @@ class _SettingsPageState extends State<SettingsPage> {
|
|||||||
activeThumbColor: AppColors.green,
|
activeThumbColor: AppColors.green,
|
||||||
onChanged: widget.state.toggleKeepRecordings,
|
onChanged: widget.state.toggleKeepRecordings,
|
||||||
),
|
),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.fromLTRB(4, 10, 4, 6),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
const Text(
|
||||||
|
'外观主题',
|
||||||
|
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 4),
|
||||||
|
Text(
|
||||||
|
'深色模式适合夜间使用;跟随系统会随手机的深色开关自动切换',
|
||||||
|
style: TextStyle(fontSize: 12, color: AppColors.muted),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 10),
|
||||||
|
SizedBox(
|
||||||
|
width: double.infinity,
|
||||||
|
child: SegmentedButton<AppThemeMode>(
|
||||||
|
segments: const [
|
||||||
|
ButtonSegment(
|
||||||
|
value: AppThemeMode.system,
|
||||||
|
label: Text('跟随系统'),
|
||||||
|
),
|
||||||
|
ButtonSegment(value: AppThemeMode.light, label: Text('浅色')),
|
||||||
|
ButtonSegment(value: AppThemeMode.dark, label: Text('深色')),
|
||||||
|
],
|
||||||
|
selected: {widget.state.themeMode},
|
||||||
|
showSelectedIcon: false,
|
||||||
|
onSelectionChanged: (selection) =>
|
||||||
|
widget.state.setThemeMode(selection.first),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
_SettingTile(
|
_SettingTile(
|
||||||
title: '已保存的录音',
|
title: '已保存的录音',
|
||||||
subtitle: '回听或删除本机英语练习录音',
|
subtitle: '回听或删除本机英语练习录音',
|
||||||
@@ -326,7 +361,7 @@ class _SettingsPageState extends State<SettingsPage> {
|
|||||||
'离线语音识别引擎',
|
'离线语音识别引擎',
|
||||||
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
|
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
|
||||||
),
|
),
|
||||||
const Text(
|
Text(
|
||||||
'已内置 SenseVoice-Small 高精度离线语音识别模型 (INT8)。随 App 安装包直接打包,离线即用,无需额外下载,零网络流量消耗。',
|
'已内置 SenseVoice-Small 高精度离线语音识别模型 (INT8)。随 App 安装包直接打包,离线即用,无需额外下载,零网络流量消耗。',
|
||||||
style: TextStyle(fontSize: 12, color: AppColors.muted),
|
style: TextStyle(fontSize: 12, color: AppColors.muted),
|
||||||
),
|
),
|
||||||
@@ -335,14 +370,14 @@ class _SettingsPageState extends State<SettingsPage> {
|
|||||||
subtitle: SherpaSttService.instance.isReady
|
subtitle: SherpaSttService.instance.isReady
|
||||||
? '已就绪 · 本地离线识别 (16kHz WAV · INT8)'
|
? '已就绪 · 本地离线识别 (16kHz WAV · INT8)'
|
||||||
: '预加载就绪 · 已内置打包',
|
: '预加载就绪 · 已内置打包',
|
||||||
trailing: const Icon(Icons.check_circle, color: AppColors.green, size: 20),
|
trailing: Icon(Icons.check_circle, color: AppColors.green, size: 20),
|
||||||
),
|
),
|
||||||
const Divider(height: 28),
|
const Divider(height: 28),
|
||||||
const Text(
|
const Text(
|
||||||
'云同步与多端备份',
|
'云同步与多端备份',
|
||||||
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
|
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
|
||||||
),
|
),
|
||||||
const Text(
|
Text(
|
||||||
'支持通过自建服务器在 Android / iOS / macOS 之间同步学习进度与复习掌握度。离线自动缓存,联网自动双向合并。',
|
'支持通过自建服务器在 Android / iOS / macOS 之间同步学习进度与复习掌握度。离线自动缓存,联网自动双向合并。',
|
||||||
style: TextStyle(fontSize: 12, color: AppColors.muted),
|
style: TextStyle(fontSize: 12, color: AppColors.muted),
|
||||||
),
|
),
|
||||||
@@ -363,7 +398,7 @@ class _SettingsPageState extends State<SettingsPage> {
|
|||||||
'AI 对话服务',
|
'AI 对话服务',
|
||||||
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
|
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
|
||||||
),
|
),
|
||||||
const Text(
|
Text(
|
||||||
'订阅版 ChatGPT / Gemini 不能直接作为 App API 使用。请使用自己的 API Key,或填写兼容 OpenAI 接口的 CLIProxyAPI 地址。密钥不在此页面保存。',
|
'订阅版 ChatGPT / Gemini 不能直接作为 App API 使用。请使用自己的 API Key,或填写兼容 OpenAI 接口的 CLIProxyAPI 地址。密钥不在此页面保存。',
|
||||||
style: TextStyle(fontSize: 12, color: AppColors.muted),
|
style: TextStyle(fontSize: 12, color: AppColors.muted),
|
||||||
),
|
),
|
||||||
@@ -568,7 +603,7 @@ class _SettingsPageState extends State<SettingsPage> {
|
|||||||
SectionCard(
|
SectionCard(
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
const Icon(Icons.mic_none, color: AppColors.green),
|
Icon(Icons.mic_none, color: AppColors.green),
|
||||||
const SizedBox(width: 10),
|
const SizedBox(width: 10),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Text(
|
child: Text(
|
||||||
|
|||||||
@@ -201,7 +201,7 @@ class _SyncSettingsSheetState extends State<SyncSettingsSheet> {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
const Text(
|
Text(
|
||||||
'本地优先架构:无网络时不影响学习,联网后自动双向合并学习进度与复习掌握度。',
|
'本地优先架构:无网络时不影响学习,联网后自动双向合并学习进度与复习掌握度。',
|
||||||
style: TextStyle(fontSize: 13, color: AppColors.muted),
|
style: TextStyle(fontSize: 13, color: AppColors.muted),
|
||||||
),
|
),
|
||||||
@@ -214,7 +214,7 @@ class _SyncSettingsSheetState extends State<SyncSettingsSheet> {
|
|||||||
children: [
|
children: [
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
const CircleAvatar(
|
CircleAvatar(
|
||||||
radius: 18,
|
radius: 18,
|
||||||
backgroundColor: AppColors.softGreen,
|
backgroundColor: AppColors.softGreen,
|
||||||
child: Icon(Icons.person, color: AppColors.green),
|
child: Icon(Icons.person, color: AppColors.green),
|
||||||
@@ -232,7 +232,7 @@ class _SyncSettingsSheetState extends State<SyncSettingsSheet> {
|
|||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
_coordinator.serverUrl,
|
_coordinator.serverUrl,
|
||||||
style: const TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
color: AppColors.muted,
|
color: AppColors.muted,
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -27,7 +27,8 @@ class ReviewPage extends StatefulWidget {
|
|||||||
State<ReviewPage> createState() => _ReviewPageState();
|
State<ReviewPage> createState() => _ReviewPageState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _ReviewPageState extends State<ReviewPage> {
|
class _ReviewPageState extends State<ReviewPage>
|
||||||
|
with VoiceAnswerMixin<ReviewPage> {
|
||||||
final controller = TextEditingController();
|
final controller = TextEditingController();
|
||||||
bool showHint = false;
|
bool showHint = false;
|
||||||
bool usedHelp = false;
|
bool usedHelp = false;
|
||||||
@@ -35,29 +36,78 @@ class _ReviewPageState extends State<ReviewPage> {
|
|||||||
bool generatingVariant = false;
|
bool generatingVariant = false;
|
||||||
bool generatingLesson = false;
|
bool generatingLesson = false;
|
||||||
|
|
||||||
|
/// The untouched transcript of a spoken answer; null for typed answers.
|
||||||
|
String? transcript;
|
||||||
|
bool dictationPlayed = false;
|
||||||
|
|
||||||
|
@override
|
||||||
|
AppState get voiceState => widget.state;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
|
VoiceService.instance.stopSpeaking();
|
||||||
|
disposeVoiceAnswer(keepRecording: widget.state.keepRecordings);
|
||||||
controller.dispose();
|
controller.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _resetAnswer() {
|
||||||
|
controller.clear();
|
||||||
|
// A recording still held here was never attached to evidence.
|
||||||
|
VoiceService.instance.deleteRecording(recordingPath);
|
||||||
|
showHint = false;
|
||||||
|
usedHelp = false;
|
||||||
|
validationMessage = null;
|
||||||
|
transcript = null;
|
||||||
|
recordingPath = null;
|
||||||
|
dictationPlayed = false;
|
||||||
|
}
|
||||||
|
|
||||||
void _next(ReviewItem item, {required bool assisted}) {
|
void _next(ReviewItem item, {required bool assisted}) {
|
||||||
final result = ReviewFeedback.check(item, controller.text);
|
final result = ReviewFeedback.check(item, controller.text);
|
||||||
if (!result.complete) {
|
if (!result.complete) {
|
||||||
setState(() => validationMessage = result.message);
|
setState(() => validationMessage = result.message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
final answer = controller.text.trim();
|
||||||
|
final spoken = transcript != null;
|
||||||
widget.state.completeReview(
|
widget.state.completeReview(
|
||||||
item,
|
item,
|
||||||
assisted: assisted,
|
assisted: assisted,
|
||||||
rawAnswer: controller.text.trim(),
|
rawAnswer: answer,
|
||||||
|
inputMode: spoken && transcript == answer ? 'speechToText' : 'text',
|
||||||
|
originalTranscript: transcript,
|
||||||
|
recordingPath: spoken && widget.state.keepRecordings
|
||||||
|
? recordingPath
|
||||||
|
: null,
|
||||||
);
|
);
|
||||||
controller.clear();
|
// A kept recording now belongs to the evidence row; don't delete it.
|
||||||
setState(() {
|
if (spoken && widget.state.keepRecordings) recordingPath = null;
|
||||||
showHint = false;
|
setState(_resetAnswer);
|
||||||
usedHelp = false;
|
}
|
||||||
validationMessage = null;
|
|
||||||
});
|
Future<void> _toggleVoice() async {
|
||||||
|
if (aiVoiceRecording) {
|
||||||
|
await finishVoiceInput(
|
||||||
|
keepAudio: widget.state.keepRecordings,
|
||||||
|
onTranscript: (text) {
|
||||||
|
controller.text = text;
|
||||||
|
transcript = text;
|
||||||
|
validationMessage = null;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await VoiceService.instance.stopSpeaking();
|
||||||
|
await startVoiceInput(unavailableMessage: '无法访问麦克风,请检查录音权限。你仍可输入英文作答。');
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _play(String text, {bool slow = false}) async {
|
||||||
|
try {
|
||||||
|
await VoiceService.instance.speak(text, slow: slow);
|
||||||
|
} finally {
|
||||||
|
if (mounted) setState(() => dictationPlayed = true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _generateVariant(ReviewItem item) async {
|
Future<void> _generateVariant(ReviewItem item) async {
|
||||||
@@ -144,6 +194,11 @@ class _ReviewPageState extends State<ReviewPage> {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
final dictation = item.skill == dictationSkill
|
||||||
|
? a0DictationSentences[item.id]
|
||||||
|
: null;
|
||||||
|
final spokenTask = item.skill == spokenRecallSkill;
|
||||||
|
final audioText = reviewAudioText(item.id, item.target);
|
||||||
final checkpoint =
|
final checkpoint =
|
||||||
widget.state.mastery[item.id]?.checkpoint ?? item.successfulReviews;
|
widget.state.mastery[item.id]?.checkpoint ?? item.successfulReviews;
|
||||||
final checkpointLabel = checkpoint >= 4
|
final checkpointLabel = checkpoint >= 4
|
||||||
@@ -153,19 +208,22 @@ class _ReviewPageState extends State<ReviewPage> {
|
|||||||
child: SpacedColumn(
|
child: SpacedColumn(
|
||||||
children: [
|
children: [
|
||||||
Eyebrow('今天复习 · ${widget.state.dueReviewCount} 项待完成'),
|
Eyebrow('今天复习 · ${widget.state.dueReviewCount} 项待完成'),
|
||||||
Text('不看答案,试着回答。', style: Theme.of(context).textTheme.headlineMedium),
|
Text(
|
||||||
|
dictation != null ? '听一听,写下来。' : '不看答案,试着回答。',
|
||||||
|
style: Theme.of(context).textTheme.headlineMedium,
|
||||||
|
),
|
||||||
Text(
|
Text(
|
||||||
'目标技能:${item.skill}',
|
'目标技能:${item.skill}',
|
||||||
style: Theme.of(context).textTheme.bodyMedium,
|
style: Theme.of(context).textTheme.bodyMedium,
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
checkpointLabel,
|
checkpointLabel,
|
||||||
style: const TextStyle(color: AppColors.green, fontSize: 13),
|
style: TextStyle(color: AppColors.green, fontSize: 13),
|
||||||
),
|
),
|
||||||
if (item.isAiGenerated)
|
if (item.isAiGenerated)
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
const Expanded(
|
Expanded(
|
||||||
child: Text(
|
child: Text(
|
||||||
'AI 生成题面 · 已通过客户端结构审核',
|
'AI 生成题面 · 已通过客户端结构审核',
|
||||||
style: TextStyle(color: AppColors.muted, fontSize: 12),
|
style: TextStyle(color: AppColors.muted, fontSize: 12),
|
||||||
@@ -174,12 +232,7 @@ class _ReviewPageState extends State<ReviewPage> {
|
|||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
widget.state.reportGeneratedReviewVariant(item);
|
widget.state.reportGeneratedReviewVariant(item);
|
||||||
controller.clear();
|
setState(_resetAnswer);
|
||||||
setState(() {
|
|
||||||
showHint = false;
|
|
||||||
usedHelp = false;
|
|
||||||
validationMessage = null;
|
|
||||||
});
|
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
const SnackBar(content: Text('已隔离该 AI 题面,并换回本地审核题。')),
|
const SnackBar(content: Text('已隔离该 AI 题面,并换回本地审核题。')),
|
||||||
);
|
);
|
||||||
@@ -192,7 +245,7 @@ class _ReviewPageState extends State<ReviewPage> {
|
|||||||
tint: AppColors.softGreen,
|
tint: AppColors.softGreen,
|
||||||
child: SpacedColumn(
|
child: SpacedColumn(
|
||||||
children: [
|
children: [
|
||||||
const Text(
|
Text(
|
||||||
'情境',
|
'情境',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: AppColors.green,
|
color: AppColors.green,
|
||||||
@@ -200,6 +253,22 @@ class _ReviewPageState extends State<ReviewPage> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
Text(item.prompt, style: const TextStyle(fontSize: 19)),
|
Text(item.prompt, style: const TextStyle(fontSize: 19)),
|
||||||
|
if (dictation != null)
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
IconButton.filled(
|
||||||
|
tooltip: '播放',
|
||||||
|
onPressed: () => _play(dictation.sentence),
|
||||||
|
icon: const Icon(Icons.play_arrow),
|
||||||
|
),
|
||||||
|
const SizedBox(width: 10),
|
||||||
|
Expanded(child: Text(dictationPlayed ? '再听一次' : '播放句子')),
|
||||||
|
TextButton(
|
||||||
|
onPressed: () => _play(dictation.sentence, slow: true),
|
||||||
|
child: const Text('慢速'),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -207,14 +276,34 @@ class _ReviewPageState extends State<ReviewPage> {
|
|||||||
controller: controller,
|
controller: controller,
|
||||||
minLines: 2,
|
minLines: 2,
|
||||||
maxLines: 4,
|
maxLines: 4,
|
||||||
|
enabled: dictation == null || dictationPlayed,
|
||||||
onChanged: (_) => setState(() {}),
|
onChanged: (_) => setState(() {}),
|
||||||
decoration: const InputDecoration(
|
decoration: InputDecoration(
|
||||||
hintText: '输入你会怎么回答',
|
hintText: dictation != null
|
||||||
|
? (dictationPlayed ? '写下你听到的英文' : '先播放句子')
|
||||||
|
: (spokenTask ? '点下方麦克风说出来,或输入英文' : '输入你会怎么回答'),
|
||||||
filled: true,
|
filled: true,
|
||||||
fillColor: AppColors.surface,
|
fillColor: AppColors.surface,
|
||||||
border: OutlineInputBorder(),
|
border: const OutlineInputBorder(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
if (dictation == null)
|
||||||
|
OutlinedButton.icon(
|
||||||
|
onPressed: transcribing ? null : _toggleVoice,
|
||||||
|
icon: Icon(listening ? Icons.stop : Icons.mic_none),
|
||||||
|
label: Text(
|
||||||
|
transcribing
|
||||||
|
? '正在识别…'
|
||||||
|
: listening
|
||||||
|
? '说完了,停止并识别'
|
||||||
|
: '用语音回答',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if (transcript != null && controller.text.trim() != transcript)
|
||||||
|
Text(
|
||||||
|
'你修改了语音转写,本次按文字作答记录。',
|
||||||
|
style: TextStyle(fontSize: 12, color: AppColors.muted),
|
||||||
|
),
|
||||||
Wrap(
|
Wrap(
|
||||||
spacing: 8,
|
spacing: 8,
|
||||||
runSpacing: 8,
|
runSpacing: 8,
|
||||||
@@ -231,19 +320,14 @@ class _ReviewPageState extends State<ReviewPage> {
|
|||||||
label: const Text('稍后复习'),
|
label: const Text('稍后复习'),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
widget.state.postponeReview(item);
|
widget.state.postponeReview(item);
|
||||||
setState(() {});
|
setState(_resetAnswer);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
ActionChip(
|
ActionChip(
|
||||||
label: const Text('暂时想不起来'),
|
label: const Text('暂时想不起来'),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
widget.state.reportReviewFailure(item);
|
widget.state.reportReviewFailure(item);
|
||||||
controller.clear();
|
setState(_resetAnswer);
|
||||||
setState(() {
|
|
||||||
showHint = false;
|
|
||||||
usedHelp = false;
|
|
||||||
validationMessage = null;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
ActionChip(
|
ActionChip(
|
||||||
@@ -262,25 +346,36 @@ class _ReviewPageState extends State<ReviewPage> {
|
|||||||
ActionChip(
|
ActionChip(
|
||||||
avatar: const Icon(Icons.search, size: 16),
|
avatar: const Icon(Icons.search, size: 16),
|
||||||
label: const Text('查词查句'),
|
label: const Text('查词查句'),
|
||||||
onPressed: () => showLexiconLookup(
|
onPressed: () =>
|
||||||
context,
|
showLexiconLookup(context, state: widget.state),
|
||||||
state: widget.state,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
if (showHint)
|
if (showHint)
|
||||||
SectionCard(
|
SectionCard(
|
||||||
tint: AppColors.warm,
|
tint: AppColors.warm,
|
||||||
child: Text(
|
child: SpacedColumn(
|
||||||
'参考:${item.hint}\n目标:${item.target}',
|
spacing: 8,
|
||||||
style: const TextStyle(color: AppColors.warmInk),
|
children: [
|
||||||
|
Text(
|
||||||
|
dictation != null
|
||||||
|
? '句子意思:${item.hint}\n目标词句:${item.target}'
|
||||||
|
: '参考:${item.hint}\n目标:${item.target}',
|
||||||
|
style: TextStyle(color: AppColors.warmInk),
|
||||||
|
),
|
||||||
|
if (audioText != null && dictation == null)
|
||||||
|
TextButton.icon(
|
||||||
|
onPressed: () => _play(audioText),
|
||||||
|
icon: const Icon(Icons.volume_up_outlined),
|
||||||
|
label: Text('听示范:$audioText'),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (validationMessage != null)
|
if (validationMessage != null)
|
||||||
Text(
|
Text(
|
||||||
validationMessage!,
|
validationMessage!,
|
||||||
style: const TextStyle(color: AppColors.warmInk),
|
style: TextStyle(color: AppColors.warmInk),
|
||||||
),
|
),
|
||||||
PrimaryButton(
|
PrimaryButton(
|
||||||
label: usedHelp ? '带提示完成' : '我能独立回答',
|
label: usedHelp ? '带提示完成' : '我能独立回答',
|
||||||
@@ -288,7 +383,7 @@ class _ReviewPageState extends State<ReviewPage> {
|
|||||||
? null
|
? null
|
||||||
: () => _next(item, assisted: usedHelp),
|
: () => _next(item, assisted: usedHelp),
|
||||||
),
|
),
|
||||||
const Text(
|
Text(
|
||||||
'提示后完成会在明天换题复练;第一次想不起来先复核,连续两次才会降低当前检查点。',
|
'提示后完成会在明天换题复练;第一次想不起来先复核,连续两次才会降低当前检查点。',
|
||||||
style: TextStyle(fontSize: 12, color: AppColors.muted),
|
style: TextStyle(fontSize: 12, color: AppColors.muted),
|
||||||
),
|
),
|
||||||
@@ -439,9 +534,7 @@ class _AdaptiveLessonPageState extends State<AdaptiveLessonPage>
|
|||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await startVoiceInput(
|
await startVoiceInput(unavailableMessage: '无法访问麦克风,请检查录音权限。你仍可输入英文完成补练。');
|
||||||
unavailableMessage: '无法访问麦克风,请检查录音权限。你仍可输入英文完成补练。',
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -508,7 +601,7 @@ class _AdaptiveLessonPageState extends State<AdaptiveLessonPage>
|
|||||||
Text(
|
Text(
|
||||||
'审核:${widget.state.cachedAdaptiveLessonAuditor ?? '已配置服务'} · '
|
'审核:${widget.state.cachedAdaptiveLessonAuditor ?? '已配置服务'} · '
|
||||||
'${_formatAuditTime(widget.state.cachedAdaptiveLessonAuditedAt!)}',
|
'${_formatAuditTime(widget.state.cachedAdaptiveLessonAuditedAt!)}',
|
||||||
style: const TextStyle(color: AppColors.muted, fontSize: 12),
|
style: TextStyle(color: AppColors.muted, fontSize: 12),
|
||||||
),
|
),
|
||||||
Text(task.prompt, style: Theme.of(context).textTheme.headlineMedium),
|
Text(task.prompt, style: Theme.of(context).textTheme.headlineMedium),
|
||||||
if (showStimulus)
|
if (showStimulus)
|
||||||
@@ -517,7 +610,7 @@ class _AdaptiveLessonPageState extends State<AdaptiveLessonPage>
|
|||||||
child: Text(task.stimulus, style: const TextStyle(fontSize: 20)),
|
child: Text(task.stimulus, style: const TextStyle(fontSize: 20)),
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
const SectionCard(
|
SectionCard(
|
||||||
tint: AppColors.surfaceMuted,
|
tint: AppColors.surfaceMuted,
|
||||||
child: Text('先播放音频,再输入你听到的答案。'),
|
child: Text('先播放音频,再输入你听到的答案。'),
|
||||||
),
|
),
|
||||||
@@ -579,9 +672,7 @@ class _AdaptiveLessonPageState extends State<AdaptiveLessonPage>
|
|||||||
child: CircularProgressIndicator(strokeWidth: 2),
|
child: CircularProgressIndicator(strokeWidth: 2),
|
||||||
)
|
)
|
||||||
: Icon(
|
: Icon(
|
||||||
listening
|
listening ? Icons.stop_circle_outlined : Icons.mic_none,
|
||||||
? Icons.stop_circle_outlined
|
|
||||||
: Icons.mic_none,
|
|
||||||
color: listening ? AppColors.green : null,
|
color: listening ? AppColors.green : null,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -639,7 +730,7 @@ class _AdaptiveLessonPageState extends State<AdaptiveLessonPage>
|
|||||||
if (answerFeedback != null)
|
if (answerFeedback != null)
|
||||||
Text(
|
Text(
|
||||||
answerFeedback!,
|
answerFeedback!,
|
||||||
style: const TextStyle(color: AppColors.warmInk),
|
style: TextStyle(color: AppColors.warmInk),
|
||||||
),
|
),
|
||||||
if (showReference)
|
if (showReference)
|
||||||
SectionCard(
|
SectionCard(
|
||||||
|
|||||||
@@ -121,6 +121,11 @@ class _LearningShellState extends State<LearningShell> {
|
|||||||
switch (route) {
|
switch (route) {
|
||||||
case _ShellRoute.lesson:
|
case _ShellRoute.lesson:
|
||||||
body = LessonFlow(
|
body = LessonFlow(
|
||||||
|
// 换课或换段时重建,避免上一段的听力选择和播放状态沿用过来。
|
||||||
|
key: ValueKey(
|
||||||
|
'${widget.state.activeLessonId}-'
|
||||||
|
'${widget.state.activeSegmentIndexFor(widget.state.activeLessonId)}',
|
||||||
|
),
|
||||||
state: widget.state,
|
state: widget.state,
|
||||||
onOpenDialogue: () => showDialogue(inLesson: true),
|
onOpenDialogue: () => showDialogue(inLesson: true),
|
||||||
onFinish: () => showTab(tab),
|
onFinish: () => showTab(tab),
|
||||||
@@ -333,7 +338,7 @@ class _LearningMap extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
"复习已有积压,今天先完成 ${state.dueReviewCount} 项到期复习,再开启新课。",
|
"复习已有积压,今天先完成 ${state.dueReviewCount} 项到期复习,再开启新课。",
|
||||||
style: const TextStyle(color: AppColors.warmInk),
|
style: TextStyle(color: AppColors.warmInk),
|
||||||
),
|
),
|
||||||
SecondaryButton(label: "先去复习", onPressed: onOpenReview),
|
SecondaryButton(label: "先去复习", onPressed: onOpenReview),
|
||||||
],
|
],
|
||||||
|
|||||||
+51
-34
@@ -47,43 +47,60 @@ class _KouyuEnglishAppState extends State<KouyuEnglishApp> {
|
|||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ThemeMode _themeMode(AppThemeMode mode) => switch (mode) {
|
||||||
|
AppThemeMode.system => ThemeMode.system,
|
||||||
|
AppThemeMode.light => ThemeMode.light,
|
||||||
|
AppThemeMode.dark => ThemeMode.dark,
|
||||||
|
};
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return MaterialApp(
|
return AnimatedBuilder(
|
||||||
title: '芽说英语 · SpeakSprout',
|
animation: appState,
|
||||||
debugShowCheckedModeBanner: false,
|
builder: (context, _) => MaterialApp(
|
||||||
theme: buildAppTheme(),
|
title: '芽说英语 · SpeakSprout',
|
||||||
home: AnimatedBuilder(
|
debugShowCheckedModeBanner: false,
|
||||||
animation: appState,
|
theme: buildAppTheme(Brightness.light),
|
||||||
builder: (context, _) {
|
darkTheme: buildAppTheme(Brightness.dark),
|
||||||
if (!appState.isLoaded) {
|
themeMode: _themeMode(appState.themeMode),
|
||||||
return const Scaffold(
|
// Mirror the resolved brightness into the global palette that many
|
||||||
body: Center(child: CircularProgressIndicator()),
|
// widgets read directly, so it tracks both the user's choice and any
|
||||||
);
|
// system dark-mode change.
|
||||||
}
|
builder: (context, child) {
|
||||||
if (appState.onboardingComplete) {
|
AppColors.applyBrightness(Theme.of(context).brightness);
|
||||||
return LearningShell(state: appState);
|
return child ?? const SizedBox.shrink();
|
||||||
}
|
|
||||||
if (onboardingStep == 0) {
|
|
||||||
return WelcomePage(
|
|
||||||
state: appState,
|
|
||||||
onContinue: () => setState(() => onboardingStep = 1),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return PopScope(
|
|
||||||
canPop: false,
|
|
||||||
onPopInvokedWithResult: (didPop, _) {
|
|
||||||
if (!didPop) {
|
|
||||||
setState(() => onboardingStep = 0);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
child: PlacementPage(
|
|
||||||
state: appState,
|
|
||||||
onBack: () => setState(() => onboardingStep = 0),
|
|
||||||
onStart: () => appState.finishOnboarding(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
|
home: Builder(
|
||||||
|
builder: (context) {
|
||||||
|
if (!appState.isLoaded) {
|
||||||
|
return const Scaffold(
|
||||||
|
body: Center(child: CircularProgressIndicator()),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (appState.onboardingComplete) {
|
||||||
|
return LearningShell(state: appState);
|
||||||
|
}
|
||||||
|
if (onboardingStep == 0) {
|
||||||
|
return WelcomePage(
|
||||||
|
state: appState,
|
||||||
|
onContinue: () => setState(() => onboardingStep = 1),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return PopScope(
|
||||||
|
canPop: false,
|
||||||
|
onPopInvokedWithResult: (didPop, _) {
|
||||||
|
if (!didPop) {
|
||||||
|
setState(() => onboardingStep = 0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: PlacementPage(
|
||||||
|
state: appState,
|
||||||
|
onBack: () => setState(() => onboardingStep = 0),
|
||||||
|
onStart: () => appState.finishOnboarding(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ class SecondaryButton extends StatelessWidget {
|
|||||||
onPressed: onPressed,
|
onPressed: onPressed,
|
||||||
style: OutlinedButton.styleFrom(
|
style: OutlinedButton.styleFrom(
|
||||||
foregroundColor: AppColors.ink,
|
foregroundColor: AppColors.ink,
|
||||||
side: const BorderSide(color: AppColors.line),
|
side: BorderSide(color: AppColors.line),
|
||||||
shape: RoundedRectangleBorder(
|
shape: RoundedRectangleBorder(
|
||||||
borderRadius: BorderRadius.circular(14),
|
borderRadius: BorderRadius.circular(14),
|
||||||
),
|
),
|
||||||
@@ -139,7 +139,7 @@ class Eyebrow extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) => Text(
|
Widget build(BuildContext context) => Text(
|
||||||
text,
|
text,
|
||||||
style: const TextStyle(
|
style: TextStyle(
|
||||||
color: AppColors.green,
|
color: AppColors.green,
|
||||||
fontWeight: FontWeight.w600,
|
fontWeight: FontWeight.w600,
|
||||||
fontSize: 13,
|
fontSize: 13,
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ class _LexiconTextState extends State<LexiconText> {
|
|||||||
TextSpan(
|
TextSpan(
|
||||||
text: matched,
|
text: matched,
|
||||||
recognizer: recognizer,
|
recognizer: recognizer,
|
||||||
style: const TextStyle(
|
style: TextStyle(
|
||||||
color: AppColors.green,
|
color: AppColors.green,
|
||||||
decoration: TextDecoration.underline,
|
decoration: TextDecoration.underline,
|
||||||
decorationColor: AppColors.green,
|
decorationColor: AppColors.green,
|
||||||
@@ -401,7 +401,7 @@ class _LexiconLookupSheetState extends State<_LexiconLookupSheet> {
|
|||||||
child: SpacedColumn(
|
child: SpacedColumn(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
const Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
Icon(Icons.translate, size: 16, color: AppColors.green),
|
Icon(Icons.translate, size: 16, color: AppColors.green),
|
||||||
SizedBox(width: 6),
|
SizedBox(width: 6),
|
||||||
@@ -464,7 +464,7 @@ class _LexiconLookupSheetState extends State<_LexiconLookupSheet> {
|
|||||||
if (analysis.pronunciationTips != null &&
|
if (analysis.pronunciationTips != null &&
|
||||||
analysis.pronunciationTips!.isNotEmpty) ...[
|
analysis.pronunciationTips!.isNotEmpty) ...[
|
||||||
const SizedBox(height: 6),
|
const SizedBox(height: 6),
|
||||||
const Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Icon(
|
||||||
Icons.record_voice_over_outlined,
|
Icons.record_voice_over_outlined,
|
||||||
@@ -522,7 +522,7 @@ class _LexiconLookupSheetState extends State<_LexiconLookupSheet> {
|
|||||||
const SizedBox(height: 4),
|
const SizedBox(height: 4),
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
const Icon(
|
Icon(
|
||||||
Icons.auto_stories_outlined,
|
Icons.auto_stories_outlined,
|
||||||
size: 18,
|
size: 18,
|
||||||
color: AppColors.green,
|
color: AppColors.green,
|
||||||
@@ -560,7 +560,7 @@ class _LexiconLookupSheetState extends State<_LexiconLookupSheet> {
|
|||||||
if (phrase.ipa != null && phrase.ipa!.isNotEmpty)
|
if (phrase.ipa != null && phrase.ipa!.isNotEmpty)
|
||||||
Text(
|
Text(
|
||||||
phrase.ipa!,
|
phrase.ipa!,
|
||||||
style: const TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 13,
|
fontSize: 13,
|
||||||
color: AppColors.muted,
|
color: AppColors.muted,
|
||||||
),
|
),
|
||||||
@@ -575,7 +575,7 @@ class _LexiconLookupSheetState extends State<_LexiconLookupSheet> {
|
|||||||
),
|
),
|
||||||
const SizedBox(width: 4),
|
const SizedBox(width: 4),
|
||||||
_addedToReview.contains(phrase.phrase.toLowerCase())
|
_addedToReview.contains(phrase.phrase.toLowerCase())
|
||||||
? const Chip(
|
? Chip(
|
||||||
label: Text('已在复习', style: TextStyle(fontSize: 12)),
|
label: Text('已在复习', style: TextStyle(fontSize: 12)),
|
||||||
avatar: Icon(Icons.check, size: 14, color: AppColors.green),
|
avatar: Icon(Icons.check, size: 14, color: AppColors.green),
|
||||||
padding: EdgeInsets.zero,
|
padding: EdgeInsets.zero,
|
||||||
@@ -602,7 +602,7 @@ class _LexiconLookupSheetState extends State<_LexiconLookupSheet> {
|
|||||||
if (phrase.usageNote != null && phrase.usageNote!.isNotEmpty)
|
if (phrase.usageNote != null && phrase.usageNote!.isNotEmpty)
|
||||||
Text(
|
Text(
|
||||||
'用法:${phrase.usageNote}',
|
'用法:${phrase.usageNote}',
|
||||||
style: const TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
color: AppColors.muted,
|
color: AppColors.muted,
|
||||||
),
|
),
|
||||||
@@ -618,7 +618,7 @@ class _LexiconLookupSheetState extends State<_LexiconLookupSheet> {
|
|||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'解析引擎:${analysis.provider} · 本机已缓存',
|
'解析引擎:${analysis.provider} · 本机已缓存',
|
||||||
style: const TextStyle(fontSize: 12, color: AppColors.muted),
|
style: TextStyle(fontSize: 12, color: AppColors.muted),
|
||||||
),
|
),
|
||||||
TextButton.icon(
|
TextButton.icon(
|
||||||
onPressed: requestingSentenceAnalysis ? null : _requestSentenceAnalysis,
|
onPressed: requestingSentenceAnalysis ? null : _requestSentenceAnalysis,
|
||||||
@@ -666,7 +666,7 @@ class _LexiconLookupSheetState extends State<_LexiconLookupSheet> {
|
|||||||
color: AppColors.softGreen,
|
color: AppColors.softGreen,
|
||||||
borderRadius: BorderRadius.circular(10),
|
borderRadius: BorderRadius.circular(10),
|
||||||
),
|
),
|
||||||
child: const Text(
|
child: Text(
|
||||||
'已解析',
|
'已解析',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 11,
|
fontSize: 11,
|
||||||
@@ -769,7 +769,7 @@ class _LexiconLookupSheetState extends State<_LexiconLookupSheet> {
|
|||||||
const SizedBox(height: 4),
|
const SizedBox(height: 4),
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
const Icon(Icons.layers_outlined, size: 18, color: AppColors.green),
|
Icon(Icons.layers_outlined, size: 18, color: AppColors.green),
|
||||||
const SizedBox(width: 6),
|
const SizedBox(width: 6),
|
||||||
Text(
|
Text(
|
||||||
'本地词典匹配到的短语 (${localPhrases.length})',
|
'本地词典匹配到的短语 (${localPhrases.length})',
|
||||||
@@ -804,7 +804,7 @@ class _LexiconLookupSheetState extends State<_LexiconLookupSheet> {
|
|||||||
),
|
),
|
||||||
const SizedBox(width: 4),
|
const SizedBox(width: 4),
|
||||||
_addedToReview.contains(phraseItem.word.toLowerCase())
|
_addedToReview.contains(phraseItem.word.toLowerCase())
|
||||||
? const Icon(Icons.check, size: 18, color: AppColors.green)
|
? Icon(Icons.check, size: 18, color: AppColors.green)
|
||||||
: OutlinedButton(
|
: OutlinedButton(
|
||||||
style: OutlinedButton.styleFrom(
|
style: OutlinedButton.styleFrom(
|
||||||
visualDensity: VisualDensity.compact,
|
visualDensity: VisualDensity.compact,
|
||||||
@@ -823,7 +823,7 @@ class _LexiconLookupSheetState extends State<_LexiconLookupSheet> {
|
|||||||
if (phraseItem.example.isNotEmpty)
|
if (phraseItem.example.isNotEmpty)
|
||||||
Text(
|
Text(
|
||||||
'例:${phraseItem.example} (${phraseItem.exampleMeaning})',
|
'例:${phraseItem.example} (${phraseItem.exampleMeaning})',
|
||||||
style: const TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
color: AppColors.muted,
|
color: AppColors.muted,
|
||||||
),
|
),
|
||||||
@@ -865,7 +865,7 @@ class _LexiconLookupSheetState extends State<_LexiconLookupSheet> {
|
|||||||
if (sentenceAnalysisError != null)
|
if (sentenceAnalysisError != null)
|
||||||
Text(
|
Text(
|
||||||
sentenceAnalysisError!,
|
sentenceAnalysisError!,
|
||||||
style: const TextStyle(color: AppColors.warmInk),
|
style: TextStyle(color: AppColors.warmInk),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -888,7 +888,7 @@ class _LexiconLookupSheetState extends State<_LexiconLookupSheet> {
|
|||||||
if (temporaryError != null)
|
if (temporaryError != null)
|
||||||
Text(
|
Text(
|
||||||
temporaryError!,
|
temporaryError!,
|
||||||
style: const TextStyle(color: AppColors.warmInk),
|
style: TextStyle(color: AppColors.warmInk),
|
||||||
),
|
),
|
||||||
|
|
||||||
if (temporaryDefinition != null)
|
if (temporaryDefinition != null)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import 'package:kouyu_english/core/a0_core.dart';
|
|||||||
import 'package:kouyu_english/core/assessment_bank.dart';
|
import 'package:kouyu_english/core/assessment_bank.dart';
|
||||||
import 'package:kouyu_english/core/generated_content.dart';
|
import 'package:kouyu_english/core/generated_content.dart';
|
||||||
import 'package:kouyu_english/core/models.dart';
|
import 'package:kouyu_english/core/models.dart';
|
||||||
|
import 'package:kouyu_english/core/review_feedback.dart';
|
||||||
import 'package:kouyu_english/core/seed_courses.dart';
|
import 'package:kouyu_english/core/seed_courses.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
@@ -52,13 +53,15 @@ void main() {
|
|||||||
final item = state.dueReviews.single;
|
final item = state.dueReviews.single;
|
||||||
expect(a0CoreItems, contains(item.id));
|
expect(a0CoreItems, contains(item.id));
|
||||||
expect(item.variantIndex, 1);
|
expect(item.variantIndex, 1);
|
||||||
expect(item.prompt, contains('情境'));
|
// The first rotation turns the written recall into dictation.
|
||||||
|
expect(item.skill, dictationSkill);
|
||||||
|
expect(item.prompt, contains('听'));
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
test('an approved AI variant remains tied to its original review item', () {
|
test('an approved AI variant remains tied to its original review item', () {
|
||||||
final state = AppState();
|
final state = AppState();
|
||||||
state.reviewQueue.add(dueItem());
|
state.reviewQueue.add(dueItem().copyWith(skill: dictationSkill));
|
||||||
state.applyGeneratedReviewVariant(
|
state.applyGeneratedReviewVariant(
|
||||||
const GeneratedReviewVariant(
|
const GeneratedReviewVariant(
|
||||||
variantId: 'ai-1',
|
variantId: 'ai-1',
|
||||||
@@ -70,6 +73,7 @@ void main() {
|
|||||||
|
|
||||||
expect(state.reviewQueue.single.id, 'A0-P12');
|
expect(state.reviewQueue.single.id, 'A0-P12');
|
||||||
expect(state.reviewQueue.single.isAiGenerated, isTrue);
|
expect(state.reviewQueue.single.isAiGenerated, isTrue);
|
||||||
|
expect(state.reviewQueue.single.skill, isNot(dictationSkill));
|
||||||
});
|
});
|
||||||
|
|
||||||
test(
|
test(
|
||||||
@@ -134,6 +138,17 @@ void main() {
|
|||||||
createdAt: DateTime.now().subtract(const Duration(days: 20)),
|
createdAt: DateTime.now().subtract(const Duration(days: 20)),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
state.attemptEvidence.add(
|
||||||
|
AttemptEvidence(
|
||||||
|
id: 'scene-use',
|
||||||
|
itemId: item.id,
|
||||||
|
taskId: 'dialogue-scene-a0-meet-0',
|
||||||
|
skill: '情境使用',
|
||||||
|
inputMode: 'text',
|
||||||
|
outcome: EvidenceKind.independentSuccess,
|
||||||
|
createdAt: DateTime.now().subtract(const Duration(days: 19)),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
for (var index = 0; index < 4; index++) {
|
for (var index = 0; index < 4; index++) {
|
||||||
final current = state.reviewQueue.firstWhere(
|
final current = state.reviewQueue.firstWhere(
|
||||||
@@ -197,6 +212,22 @@ void main() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reworded reviews alone only show recall, never use in a situation.
|
||||||
|
state.rebuildMasteryFromEvidence();
|
||||||
|
expect(state.mastery['A0-P12']!.checkpoint, 4);
|
||||||
|
expect(state.mastery['A0-P12']!.status, MasteryStatus.recall);
|
||||||
|
|
||||||
|
state.attemptEvidence.add(
|
||||||
|
AttemptEvidence(
|
||||||
|
id: 'scene-use',
|
||||||
|
itemId: 'A0-P12',
|
||||||
|
taskId: 'dialogue-scene-a0-meet-1',
|
||||||
|
skill: '情境使用',
|
||||||
|
inputMode: 'text',
|
||||||
|
outcome: EvidenceKind.independentSuccess,
|
||||||
|
createdAt: base,
|
||||||
|
),
|
||||||
|
);
|
||||||
state.rebuildMasteryFromEvidence();
|
state.rebuildMasteryFromEvidence();
|
||||||
|
|
||||||
expect(state.mastery['A0-P12']!.checkpoint, 4);
|
expect(state.mastery['A0-P12']!.checkpoint, 4);
|
||||||
@@ -946,10 +977,17 @@ void main() {
|
|||||||
expect(
|
expect(
|
||||||
matchesSegmentIndependent(
|
matchesSegmentIndependent(
|
||||||
'a0-10-a',
|
'a0-10-a',
|
||||||
"I'm Mia. I'm from Guangzhou. I like tea. Do you like tea?",
|
"Please say that again. I'm Mia. I like water. Do you like tea?",
|
||||||
),
|
),
|
||||||
isTrue,
|
isTrue,
|
||||||
);
|
);
|
||||||
|
expect(
|
||||||
|
matchesSegmentIndependent(
|
||||||
|
'a0-10-a',
|
||||||
|
"I'm Mia. I'm from Guangzhou. I like tea. Do you like tea?",
|
||||||
|
),
|
||||||
|
isFalse,
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('each free scene keeps its own daily recap', () {
|
test('each free scene keeps its own daily recap', () {
|
||||||
@@ -1370,4 +1408,54 @@ void main() {
|
|||||||
expect(restored.dialogueDraft!.turns, hasLength(2));
|
expect(restored.dialogueDraft!.turns, hasLength(2));
|
||||||
expect(restored.dialogueDraft!.turns.last.isLearner, isTrue);
|
expect(restored.dialogueDraft!.turns.last.isLearner, isTrue);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('a spoken review answer keeps its transcript and input mode', () {
|
||||||
|
final state = AppState();
|
||||||
|
state.reviewQueue.add(dueItem());
|
||||||
|
state.completeReview(
|
||||||
|
state.reviewQueue.single,
|
||||||
|
assisted: false,
|
||||||
|
rawAnswer: "I'm from Hong Kong.",
|
||||||
|
inputMode: 'speechToText',
|
||||||
|
originalTranscript: "I'm from Hong Kong.",
|
||||||
|
);
|
||||||
|
final spoken = state.attemptEvidence.last;
|
||||||
|
expect(spoken.inputMode, 'speechToText');
|
||||||
|
expect(spoken.transcriptConfirmed, isTrue);
|
||||||
|
expect(spoken.transcriptEdited, isFalse);
|
||||||
|
|
||||||
|
final typed = AppState();
|
||||||
|
typed.reviewQueue.add(dueItem());
|
||||||
|
typed.completeReview(
|
||||||
|
typed.reviewQueue.single,
|
||||||
|
assisted: false,
|
||||||
|
rawAnswer: "I'm from Guangzhou.",
|
||||||
|
originalTranscript: "I'm from one show.",
|
||||||
|
);
|
||||||
|
expect(typed.attemptEvidence.last.inputMode, 'text');
|
||||||
|
expect(typed.attemptEvidence.last.transcriptEdited, isTrue);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('each lesson practises the core items it targets', () {
|
||||||
|
for (final entry in a0TargetItemIdsByLesson.entries) {
|
||||||
|
final segments = lessonById(entry.key).segments;
|
||||||
|
final text = [
|
||||||
|
for (final segment in segments) ...[
|
||||||
|
activityBySegmentId(segment.id, entry.key).listening,
|
||||||
|
activityBySegmentId(segment.id, entry.key).speaking,
|
||||||
|
activityBySegmentId(segment.id, entry.key).reading,
|
||||||
|
activityBySegmentId(segment.id, entry.key).writingExample,
|
||||||
|
for (final item in vocabularyBySegmentId(segment.id, entry.key))
|
||||||
|
'${item.word}\n${item.example}',
|
||||||
|
],
|
||||||
|
].join('\n');
|
||||||
|
for (final id in entry.value) {
|
||||||
|
expect(
|
||||||
|
coreItemUsedIn(id, text, word: a0CoreItems[id]),
|
||||||
|
isTrue,
|
||||||
|
reason: '${entry.key} → $id ${a0CoreItems[id]}',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:kouyu_english/core/a0_core.dart';
|
||||||
|
|
||||||
|
import '../tool/courses/course_validator.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
test('tokenize expands contractions and skips digits', () {
|
||||||
|
expect(tokenize("I'm Tom. Can't pay 15 dollars at 7 a.m.; let's go"), [
|
||||||
|
'i', 'am', 'tom', 'can', 'not', 'pay', 'dollars', 'at', 'am', 'let',
|
||||||
|
'us', 'go',
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('match groups use AND across groups and OR inside a group', () {
|
||||||
|
expect(satisfiesMatch("Sorry, I don't understand.", [
|
||||||
|
['do not understand'],
|
||||||
|
]), isTrue);
|
||||||
|
expect(satisfiesMatch('twelvee', [
|
||||||
|
['twelve'],
|
||||||
|
]), isFalse);
|
||||||
|
expect(satisfiesMatch('What is this word?', [
|
||||||
|
['what does', 'what is'],
|
||||||
|
['mean'],
|
||||||
|
]), isFalse);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('course packs pass validation', () {
|
||||||
|
final report = CourseValidator(
|
||||||
|
projectRoot: Directory.current,
|
||||||
|
a0Texts: [
|
||||||
|
for (final item in a0CoreItems.values)
|
||||||
|
item.replaceAll(RegExp(r'\[[^\]]*\]'), ''),
|
||||||
|
for (final sentence in a0DictationSentences.values) sentence.sentence,
|
||||||
|
],
|
||||||
|
).validate();
|
||||||
|
expect(report.errors.map((issue) => '$issue'), isEmpty);
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:kouyu_english/core/a0_core.dart';
|
||||||
import 'package:kouyu_english/core/models.dart';
|
import 'package:kouyu_english/core/models.dart';
|
||||||
import 'package:kouyu_english/core/review_feedback.dart';
|
import 'package:kouyu_english/core/review_feedback.dart';
|
||||||
|
|
||||||
@@ -99,11 +100,35 @@ void main() {
|
|||||||
);
|
);
|
||||||
// Multi-space on word item
|
// Multi-space on word item
|
||||||
expect(
|
expect(
|
||||||
ReviewFeedback.check(
|
ReviewFeedback.check(review('A0-W08', 'three'), ' THREE ').complete,
|
||||||
review('A0-W08', 'three'),
|
|
||||||
' THREE ',
|
|
||||||
).complete,
|
|
||||||
isTrue,
|
isTrue,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('a dictation review needs the whole sentence that was played', () {
|
||||||
|
final item = review('A0-W24', 'water').copyWith(
|
||||||
|
skill: dictationSkill,
|
||||||
|
prompt: coreReviewVariant('A0-W24', 1).prompt,
|
||||||
|
);
|
||||||
|
expect(ReviewFeedback.check(item, 'water').complete, isFalse);
|
||||||
|
expect(ReviewFeedback.check(item, 'I like watter.').complete, isFalse);
|
||||||
|
expect(ReviewFeedback.check(item, 'i like water').complete, isTrue);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('offline review variants rotate recall, dictation and speaking', () {
|
||||||
|
expect(coreReviewVariant('A0-P12', 0).skill, '回忆表达');
|
||||||
|
expect(coreReviewVariant('A0-P12', 1).skill, dictationSkill);
|
||||||
|
expect(coreReviewVariant('A0-P12', 2).skill, spokenRecallSkill);
|
||||||
|
expect(coreReviewVariant('A0-P12', 3).skill, '回忆表达');
|
||||||
|
for (final id in a0CoreItems.keys) {
|
||||||
|
final sentence = a0DictationSentences[id];
|
||||||
|
expect(sentence, isNotNull, reason: id);
|
||||||
|
// Each dictation sentence really contains the item it checks.
|
||||||
|
expect(
|
||||||
|
coreItemUsedIn(id, sentence!.sentence, word: a0CoreItems[id]),
|
||||||
|
isTrue,
|
||||||
|
reason: id,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:kouyu_english/core/speech_compare.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
test('a matching transcript ignores case, punctuation and contractions', () {
|
||||||
|
final result = compareSpoken(
|
||||||
|
'Sorry, please say that again. I like water.',
|
||||||
|
'sorry please say that again i like water',
|
||||||
|
);
|
||||||
|
expect(result.matches, isTrue);
|
||||||
|
expect(result.heardCount, result.total);
|
||||||
|
|
||||||
|
expect(
|
||||||
|
compareSpoken('I’m from Hong Kong.', 'I am from Hong Kong').matches,
|
||||||
|
isTrue,
|
||||||
|
);
|
||||||
|
expect(
|
||||||
|
compareSpoken('It’s three o’clock.', "it's three o'clock").matches,
|
||||||
|
isTrue,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('marks the words that were not heard, keeping word order', () {
|
||||||
|
final result = compareSpoken('I like tea. Do you like tea?', 'I like tea');
|
||||||
|
expect(result.matches, isFalse);
|
||||||
|
expect(result.missedWords, ['Do', 'you', 'like', 'tea?']);
|
||||||
|
expect(result.close, isFalse);
|
||||||
|
|
||||||
|
final extra = compareSpoken('I like water.', 'I like water very much');
|
||||||
|
expect(extra.heardCount, extra.total);
|
||||||
|
expect(extra.extraWords, ['very', 'much']);
|
||||||
|
expect(extra.matches, isFalse);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('digits and joined letters line up with the model sentence', () {
|
||||||
|
expect(
|
||||||
|
compareSpoken(
|
||||||
|
'My number is one-three-eight.',
|
||||||
|
'My number is 138',
|
||||||
|
).matches,
|
||||||
|
isTrue,
|
||||||
|
);
|
||||||
|
expect(compareSpoken('S H E N', 'Shen').matches, isTrue);
|
||||||
|
expect(compareSpoken('S H E N', 'S H E M').missedWords, ['N']);
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -28,6 +28,13 @@ void main() {
|
|||||||
'a0-10',
|
'a0-10',
|
||||||
"I'm Alex. I'm from Beijing. I like tea.",
|
"I'm Alex. I'm from Beijing. I like tea.",
|
||||||
).complete,
|
).complete,
|
||||||
|
isFalse,
|
||||||
|
);
|
||||||
|
expect(
|
||||||
|
WritingFeedback.check(
|
||||||
|
'a0-10',
|
||||||
|
"I'm Alex. I'm from Beijing. I like water.",
|
||||||
|
).complete,
|
||||||
isTrue,
|
isTrue,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@@ -39,10 +46,7 @@ void main() {
|
|||||||
isTrue,
|
isTrue,
|
||||||
);
|
);
|
||||||
// a0-01 with curly quote and multiple spaces
|
// a0-01 with curly quote and multiple spaces
|
||||||
expect(
|
expect(WritingFeedback.check('a0-01', 'HI I’M MIA').complete, isTrue);
|
||||||
WritingFeedback.check('a0-01', 'HI I’M MIA').complete,
|
|
||||||
isTrue,
|
|
||||||
);
|
|
||||||
// a0-07 with multiple spaces in phrase
|
// a0-07 with multiple spaces in phrase
|
||||||
expect(
|
expect(
|
||||||
WritingFeedback.check('a0-07', 'THIS IS MY MOTHER').complete,
|
WritingFeedback.check('a0-07', 'THIS IS MY MOTHER').complete,
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,33 @@
|
|||||||
|
# 分级数据来源
|
||||||
|
|
||||||
|
课程内容包(`assets/courses/`)的词汇等级、语法等级和词池都依据这里锁定的两份文件。更换版本须新建等级 stageVersion,并重新运行 `tool/courses/build_word_pools.py` 与 `tool/courses/validate.dart`。
|
||||||
|
|
||||||
|
| 文件 | 数据 | 版本 | SHA-256 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `cefrj-vocabulary-profile-1.5.csv` | CEFR-J Vocabulary Profile | 1.5 | `b0dd3c635f1c9a4fdf1490c7e5b7c48e8bbe55b652ad0c9860a95f98e10ae498` |
|
||||||
|
| `cefrj-grammar-profile-20180315.csv` | CEFR-J Grammar Profile | 20180315 | `94953af376c1336166257e56c78d2139697b40ad8cf6f1235d8f9e89c2efc428` |
|
||||||
|
|
||||||
|
## 下载地址
|
||||||
|
|
||||||
|
- 仓库:<https://github.com/openlanguageprofiles/olp-en-cefrj>,提交 `d4e45b75b38f27b30dfc5c44d8c571aec7e7092f`(2020-03-25),`master` 分支中的同名文件,未做修改。
|
||||||
|
- 下载日期:2026-09-17。
|
||||||
|
- 原始发布页:<http://www.cefr-j.org/download.html>
|
||||||
|
|
||||||
|
同一仓库中的 `octanove-vocabulary-profile-c1c2-1.0.csv`(CC BY-SA 4.0)目前没有导入。
|
||||||
|
|
||||||
|
## 许可(仓库 README 原文)
|
||||||
|
|
||||||
|
> CEFR-J vocabulary and grammar profile datasets can be used for research and commercial purposes with no charge, provided that you cite the dataset properly. The copyright belongs to Tono Laboratory at TUFS (Tokyo University of Foreign Studies). Neither CEFR-J nor Open Language Profiles is responsible or liable for any inaccuracies in the dataset or any damage resulting from using the dataset.
|
||||||
|
|
||||||
|
## 引用方式
|
||||||
|
|
||||||
|
应用内“关于/数据来源”和内容包 `meta.sources` 须注明:
|
||||||
|
|
||||||
|
- The CEFR-J Wordlist Version 1.5. Compiled by Yukio Tono, Tokyo University of Foreign Studies. Retrieved from http://www.cefr-j.org/download.html on 1/20/2020.
|
||||||
|
- The CEFR-J Grammar Profile Version 20180315. Retrieved from http://www.cefr-j.org/download.html on 1/20/2020.
|
||||||
|
|
||||||
|
(上面的检索日期是 Open Language Profiles 仓库从 CEFR-J 官网取得数据的日期。)
|
||||||
|
|
||||||
|
## 派生数据
|
||||||
|
|
||||||
|
- `../pools/{a1,a2,b1}-word-pool.csv`:由 `build_word_pools.py` 按《学习引擎规格》5.4 生成的等级词池。分类(通用/日常/旅行/工作/学校与学术/其他)是离线草稿,尚未经用户抽样审核。
|
||||||
@@ -0,0 +1,501 @@
|
|||||||
|
ID,Shorthand Code,Grammatical Item,Sentence Type,CEFR-J Level,FREQ*DISP,Core Inventory,EGP,GSELO,Notes
|
||||||
|
1,PP.I_am,I am,AFF. DEC.,A1.1,A1,A1,A1,A1,
|
||||||
|
1-1,PP.I_am_not,I am not,NEG. DEC.,A1.1,A1,A1,"A1-A2, C1",A1,
|
||||||
|
1-2,PP.am_I,Am I ...?,AFF. INT.,,,A1,A1-A2,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
1-3,PP.am_I_not,Am I not ...?,NEG. INT.,,,A1,N/A,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
2,PP.you_are,You are,AFF. DEC.,B1.1,A1,A1,A1-A2,A1,文頭(相当)位置に限定
|
||||||
|
2-1,PP.you_are_not,You are not,NEG. DEC.,,,A1,"A1, C2",A1,文頭(相当)位置に限定
|
||||||
|
2-2,PP.are_you,Are you ...?,AFF. INT.,A1.3,A1,A1,A1-A2,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
2-3,PP.aren't_you,Aren't you ...?,NEG. INT.,,,A1,B1,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
3,PP.he.she_is,he/she is,AFF. DEC.,A1.1,A1,A1,A1,A1,
|
||||||
|
3-1,PP.he.she_is_not,he/she is not,NEG. DEC.,,A1,A1,A1,A1,
|
||||||
|
3-2,PP.is_he.she,Is he/she ...?,AFF. INT.,,A1,A1,A1,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
3-3,PP.isn't_he.she,Isn't he/she ...?,NEG. INT.,,,A1,"A2, B1",A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
4,PP.we_are,we are,AFF. DEC.,A1.1,A1,A1,A1,A1,
|
||||||
|
4-1,PP.we_are_not,we are not,NEG. DEC.,,A1,A1,A1,A1,
|
||||||
|
4-2,PP.are_we,Are we ...?,AFF. INT.,,,A1,A1,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
4-3,PP.aren't_we,Aren't we ...?,NEG. INT.,,,A1,B1,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
5,PP.they_are,they are,AFF. DEC.,A1.1,A1,A1,A1,A1,
|
||||||
|
5-1,PP.they_are_not,they are not,NEG. DEC.,,A1,A1,A1,A1,
|
||||||
|
5-2,PP.are_they,Are they ...?,AFF. INT.,,A1,A1,A1,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
5-3,PP.aren't_they,Aren't they ...?,NEG. INT.,,,A1,B1,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
6,PGEN,my/our/your/her/their (except for 'his' and 'its'),,A1.1,A1,A1,A1-C2,A1,his/itsを除く
|
||||||
|
7,PPO,me/us/him/her/them (except for 'you' and 'it'),,A1.1,A1,A1,A1,A1,you/itを除く
|
||||||
|
8,DT.this.that_is,This/That is,AFF. DEC.,A1.1,A1,A1,A2,A1,文頭(相当)または接続詞直後の位置に限定
|
||||||
|
8-1,DT.this.that_is_not,This/That is not,NEG. DEC.,,,A1,A1,A1,文頭(相当)または接続詞直後の位置に限定
|
||||||
|
8-2,DT.is_this.that,Is this/that ...?,AFF. INT.,,A1,A1,A2,A1,文頭(相当)または接続詞直後の位置に限定・疑問符で終わる文に限定;this/thatの後にNNが続かないものに限定
|
||||||
|
8-3,DT.isn't_this.that,Isn't this/that ...?,NEG. INT.,,,A1,A2,A1,文頭(相当)または接続詞直後の位置に限定・疑問符で終わる文に限定;this/thatの後にNNが続かないものに限定
|
||||||
|
9,DT.these.those_are,These/Those are,AFF. DEC.,,A1,A1,B1,A1,文頭(相当)または接続詞直後の位置に限定
|
||||||
|
9-1,DT.these.those_are_not,These/Those are not,NEG. DEC.,,,A1,A1,A1,文頭(相当)または接続詞直後の位置に限定
|
||||||
|
9-2,DT.are_these.those,Are these/those ...?,AFF. INT.,,,A1,A2,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定;these/thoseの後にNNSが続かないものに限定
|
||||||
|
9-3,DT.aren't_these.those,Aren't these/those ...?,NEG. INT.,,,A1,B1,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定;these/thoseの後にNNSが続かないものに限定
|
||||||
|
10,PP.it_is,It is,AFF. DEC.,A1.1,A1,A1,A1,A1,文頭(相当)または接続詞直後の位置に限定
|
||||||
|
10-1,PP.it_is_not,It is not,NEG. DEC.,B2.1,A1,A1,A1,A1,文頭(相当)または接続詞直後の位置に限定
|
||||||
|
10-2,PP.is_it,Is it ...?,AFF. INT.,,B2,A1,A1,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
10-3,PP.isn't_it,Isn't it ...?,NEG. INT.,,,A1,A2,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
11,DT.this.that_N,This/That N,AFF. DEC./NEG. DEC.,A2.1,A1,A1,"A1-B1, C2",A1,文頭(相当)または接続詞直後の位置に限定;名詞はNNに限定
|
||||||
|
12,DT.these.those_N,These/Those N,AFF. DEC./NEG. DEC.,B1.2,A1,A1,A2,,文頭(相当)または接続詞直後の位置に限定;名詞はNNSに限定
|
||||||
|
13,DT.a.an,INDEFINITE ARTICLES,,A1.1,A1,A1-B2,A1,A1,
|
||||||
|
14,DT.the,DEFINITE ARTICLES,,A1.1,A1,A1-B1,A1-A2,A1,
|
||||||
|
15,DT.some.any,DETERMINERS: some/any,,A1.1,A1,A1-A2,A1,A2,代名詞としての用法も含まれる
|
||||||
|
16,DT.no,DETERMINER: no,,A1.2,A1,,A2,A2,
|
||||||
|
17,DT.another,DETERMINER: another,,A2.1,A1,A2,B1,A2,代名詞としての用法も含まれる
|
||||||
|
18,QUANT.much,much UNCOUNTABLE NOUN,,A2.2,A1,A2,A2-B2,A2,
|
||||||
|
19,QUANT.little,little UNCOUNTABLE NOUN,,,B2,A2,B1-B2,A2,
|
||||||
|
20,QUANT.few,few PLURAL NOUN,,,B2,A2,B2,A2,a/another/every/nextが先行しないものに限定
|
||||||
|
21,IN.PREP.GENERAL,PREPOSITIONS,,A1.1,A1,A1-A2,A1-C1,A1-A2,asとtoを除く主要な前置詞; aboard/about/above/across/after/against/along/alongside/amid/amidst/among/amongst/around/at/before/behind/below/beneath/beside/besides/between/beyond/by/despite/down/during/en/ere/except/for/from/in/inside/into/like/minus/near/nearer/nearest/notwithstanding/of/off/on/onto/opposite/out/outside/over/past/per/plus/re/reference/round/sans/save/since/than/through/throughout/till/toward/towards/under/underneath/unlike/until/up/upon/v./versus/via/vs./with/within/without/worthに限定
|
||||||
|
22,PPOS.mine.etc,POSSESSIVE PRONOUNS (except for 'his' and 'its'),,B1.2,A1,A1-A2,A2-C2,A1,hisとitsを除く;mineはNNと誤認識されることも多い
|
||||||
|
23,PREFL.oneself.etc,REFLEXIVE PRONOUNS,,B1.1,A2,,A2-C2,B1,
|
||||||
|
24,PIND.nobody.anything.etc,INDEFINITE PRONOUNS,,A1.2,A1,,A1-C1,A1,some-/every-/any-/no- + -thing/-one/-body
|
||||||
|
25,PIND.ones,INDEFINITE PRONOUN/PROP-WORDS: ones (except for 'one'),,A2.1,A1,,A2-C2,B1-C1,単数形のoneは数詞との区別ができないため除く;不定代名詞・支柱語(prop word)のタグによる区別はできない
|
||||||
|
26,PIND.none,INDEFINITE PRONOUN: none,,B2.2,B2,A2,C1,,
|
||||||
|
27,PREF.each_other,RECIPROCAL PRONOUN: each other,,B1.2,B1,,B1,B1,
|
||||||
|
28,PREF.one_another,RECIPROCAL PRONOUN: one another,,,,,B2,B1,
|
||||||
|
29,P.others,PRONOUN: others (excluding 'the,,B1.1,B1,,C1,,theが先行しないものに限定
|
||||||
|
30,P.the_other.others,PRONOUNS: the other/others,,,B2,,C1-C2,A2,名詞・数詞・形容詞が後続しないものに限定
|
||||||
|
31,NN.thing_JJ,-thing ADJ,,B1.1,A2,,B1,,
|
||||||
|
32,RB.FRQ,ADVERBS OF FREQUENCY: always/usually/often/frequently/occasionally/sometimes/rarely,,A1.2,A1,A1ーB1,A1,A1-A2,always/usually/often/frequently/occasionally/sometimes/rarelyに限定
|
||||||
|
33,RB.INT,ADVERBS: INTENSIFIERS: extremely/greatly/really/so/terribly/too/unbelievably/very,,A1.1,A1,A2-B1,A1-C2,A2,extremely/greatly/really/so/terribly/too/unbelievably/veryに限定;形容詞または副詞が後続するものに限定
|
||||||
|
34,RB.ATT,ADVERBS OF ATTITUDES: apparently/clearly/fortunately/frankly/unfortunately,,B1.2,B1,A2-B2,A2-C1,A2,apparently/clearly/fortunately/frankly/unfortunatelyに限定
|
||||||
|
35,RB.NEG,ADVERBS OF NEGATION: never,,A1.2,A1,,N/A,,neverに限定
|
||||||
|
36,RB.NEG.QU,ADVERBS OF QUASI-NEGATION: hardly/little/scarcely/seldom,,,B2,,"B2, C2",,hardly/little/scarcely/seldomに限定;littleはaが先行しないものに限定
|
||||||
|
37,COMP.EQ.as_as,COMPARISON OF EQUALITY: as ... as,AFF. DEC,B2.1,B1,,"B1, C2",A2,as many asなどの場合あり
|
||||||
|
37-1,COMP.EQ.not_as.so_as,COMPARISON OF EQUALITY: not as/so ... as,NEG. DEC./AFF. INT./NEG. DEC.,,B2,,"B1, C2",A2,
|
||||||
|
38,COMP.JJR.RBR.er,COMPARATIVE OF SUPERIORITY: -er,,A1.3,A1,A1-B1,A2,A1 (adverbs)/A2(adjectives)-B1,moreとlessを除く
|
||||||
|
39,COMP.JJR.RBR.more,COMPARATIVE OF SUPERIORITY: more+ADJ/ADV,,A2.2,A2,A2-B1,A2,A2,比較級を作る副詞のmoreはJJRと誤認識されることも多い
|
||||||
|
40,COMP.JJS.RBS.est,SUPERLATIVE OF SUPERIORITY: -est,,A1.1,A1,A1-B1,A2-C1,A2,moreとlessを除く
|
||||||
|
41,COMP.JJS.RBS.most,SUPERLATIVE OF SUPERIORITY: most+ADJ/ADV,,A2.1,A2,A2-B1,A2,A2,比較級を作る副詞のmostはJJSと誤認識されることも多い
|
||||||
|
42,COMP.INFER,COMPARATIVE/SUPERLATIVE OF INFERIORITY,,B2.1,B2,,A2,A2,比較級を作る副詞のlessはJJRと誤認識されることも多い
|
||||||
|
43,RBDEG.enough,ADJ/ADV enough (except for 'not enough'),,B2.1,B2,,B1-C1,A2,{not} enoughを除く;enoughがJJまたはNNと誤認識されていることもある
|
||||||
|
44,RBDEG.too_to,too ADJ/ADV to+INFINITIVE,,,B1,B1,B1,A2,
|
||||||
|
45,RBDEG.so_JJ.RB_that,so ADJ/ADV (that) CLAUSE,AFF. DEC.,,B1,,B1,B1,be動詞に続くものに限定;節部分は名詞句・代名詞+(助)動詞・副詞に限定;soがINと誤認識されていることもある
|
||||||
|
46,RBDEG.such_JJ,such (a/an) ADJ NOUN,,B2.1,B2,,B1,B1,
|
||||||
|
47,RBDEG.so_JJ_a.an,so ADJ a/an NOUN,,,,,,,
|
||||||
|
48,RBDEG.too_JJ_a.an,too ADJ a/an NOUN,,,,,,,
|
||||||
|
49,COMP.and,COMPARATIVE and COMPARATIVE (the same adjective),,,B2,,B1,B1,
|
||||||
|
50,COMP.the_the,"the COMPARATIVE (...), the COMPARATIVE",,,B2,,B2,,間に入る語句は0~8語に限定
|
||||||
|
51,COMP.even_JJR.RBR,INTENSIFIED COMPARATIVES: a lot/by far/even/far/much/still,,B1.1,B1,,B1,,a lot/by far/even/far/much/still
|
||||||
|
52,COMP.by_far_JJS.RBS,INTENSIFIED SUPERLATIVES: by far/far/far and away/much,,,,,B2,,by far/far/far and away/much
|
||||||
|
53,V.INT.do_does,do/does DO,AFF. DEC.,B2.1,B2,,B1,B1,
|
||||||
|
54,V.INT.did,did DO,AFF. DEC.,,,,C1,B1,
|
||||||
|
55,PHV.V_PART,PHRASAL VERBS (V+PARTICLE),,A1.1,A1,A2-C1,B1-B2,,動詞はbeを除く;パーティクルは主要なもの
|
||||||
|
56,PHV.V_NP_PART,PHRASAL VERBS (V+NP+PARTICLE),,A2.1,A2,A2-C1,A2-C2,B2,動詞はbeを除く;パーティクルは主要なもの
|
||||||
|
57,PHV.V_PART_PREP,PHRASAL VERBS (V+PARTICLE+PREP+NP),,A1.2,A1,B2,B1-B2,,動詞はbeを除く;パーティクルは主要なもの;前置詞はtoを除く主要なもの
|
||||||
|
58,TA.PRESENT.be.AFF,TENSE/ASPECT: PRESENT (BE),AFF. DEC.,A1.1,A1,A1,A1,A1,名詞句・代名詞に続くものに限定;現在進行・受動態も含まれる
|
||||||
|
58-1,TA.PRESENT.be.NEG,TENSE/ASPECT: PRESENT (BE),NEG. DEC.,A1.1,A1,A1,A1,A1,名詞句・代名詞に続くものに限定;現在進行・受動態も含まれる
|
||||||
|
58-2,TA.PRESENT.be.INT.AFF,TENSE/ASPECT: PRESENT (BE),AFF. INT.,A1.1,A1,A1,N/A,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定;現在進行・受動態も含まれる
|
||||||
|
58-3,TA.PRESENT.be.INT.NEG,TENSE/ASPECT: PRESENT (BE),NEG. INT.,,,A1,N/A,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定;現在進行・受動態も含まれる
|
||||||
|
59,TA.PRESENT.do.AFF,TENSE/ASPECT: PRESENT (lexical verbs),AFF. DEC.,A1.1,A1,A1,A1,A1,名詞句・代名詞に続く一般動詞(be/do/have以外)に限定
|
||||||
|
59-1,TA.PRESENT.do.NEG,TENSE/ASPECT: PRESENT (lexical verbs),NEG. DEC.,A1.2,A1,A1,A1,A1,名詞句・代名詞に続くものに限定
|
||||||
|
59-2,TA.PRESENT.do.INT.AFF,TENSE/ASPECT: PRESENT (lexicalverbs),AFF. INT.,A1.2,A1,A1,N/A,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
59-3,TA.PRESENT.do.INT.NEG,TENSE/ASPECT: PRESENT (lexical verbs),NEG. INT.,,,A1,N/A,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
60,TA.PRESENT.does.AFF,TENSE/ASPECT: PRESENT (lexical verbs; third person & singular),AFF. DEC.,A1.1,A1,A1,A1,A1,名詞句・代名詞に続く一般動詞(be/do/have以外)に限定
|
||||||
|
60-1,TA.PRESENT.does.NEG,TENSE/ASPECT: PRESENT (lexical verbs; third person & singular),NEG. DEC.,B1.1,A1,A1,A1,A1,名詞句・代名詞に続くものに限定
|
||||||
|
60-2,TA.PRESENT.does.INT.AFF,TENSE/ASPECT: PRESENT (lexical verbs; third person & singular),AFF. INT.,,A1,A1,N/A,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
60-3,TA.PRESENT.does.INT.NEG,TENSE/ASPECT: PRESENT (lexical verbs; third person & singular),NEG. INT.,,,A1,N/A,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
61,TA.PRPRG.AFF,TENSE/ASPECT: PRESENT PROGRESSIVE,AFF. DEC.,A1.3,A1,A1,A1-C2,A1,be going toを除く
|
||||||
|
61-1,TA.PRPRG.NEG,TENSE/ASPECT: PRESENT PROGRESSIVE,NEG. DEC.,B1.1,A1,A1,A2,A1,be going toを除く
|
||||||
|
61-2,TA.PRPRG.INT.AFF,TENSE/ASPECT: PRESENT PROGRESSIVE,AFF. INT.,,A1,A1,"A2, C1",A1,be going toを除く;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
61-3,TA.PRPRG.INT.NEG,TENSE/ASPECT: PRESENT PROGRESSIVE,NEG. INT.,,,A1,N/A,A1,be going toを除く;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
62,TA.PRPF.AFF,TENSE/ASPECT: PRESENT PERFECT,AFF. DEC.,A2.1,A1,A2-B1,"B1-B2, C2",A1-A2,現在完了進行も含まれる
|
||||||
|
62-1,TA.PRPF.NEG,TENSE/ASPECT: PRESENT PERFECT,NEG. DEC.,B1.1,A2,A2-B1,B2,A2,現在完了進行も含まれる
|
||||||
|
62-2,TA.PRPF.INT.AFF,TENSE/ASPECT: PRESENT PERFECT,AFF. INT.,,A2,A2-B1,N/A,A2,現在完了進行も含まれる;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
62-3,TA.PRPF.INT.NEG,TENSE/ASPECT: PRESENT PERFECT,NEG. INT.,,,A2-B1,N/A,A2,現在完了進行も含まれる;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
63,TA.PRPFPRG.AFF,TENSE/ASPECT: PRESENT PERFECT PROGRESSIVE,AFF. DEC.,B2.1,B2,B1-B2,B1-C2,B2,
|
||||||
|
63-1,TA.PRPFPRG.NEG,TENSE/ASPECT: PRESENT PERFECT PROGRESSIVE,NEG. DEC.,,,B1-B2,B2,B2,
|
||||||
|
63-2,TA.PRPFPRG.INT.AFF,TENSE/ASPECT: PRESENT PERFECT PROGRESSIVE,AFF. INT.,,,B1-B2,B1,B2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
63-3,TA.PRPFPRG.INT.NEG,TENSE/ASPECT: PRESENT PERFECT PROGRESSIVE,NEG. INT.,,,B1-B2,N/A,B2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
64,TA.PAST.be.AFF,TENSE/ASPECT: PAST (BE),AFF. DEC.,A1.3,A1,A1-C1,A1,,現在進行・受動態も含まれる;過去進行・受動態も含まれる
|
||||||
|
64-1,TA.PAST.be.NEG,TENSE/ASPECT: PAST (BE),NEG. DEC.,A2.1,A1,A1-C1,A1,,現在進行・受動態も含まれる;過去進行・受動態も含まれる
|
||||||
|
64-2,TA.PAST.be.INT.AFF,TENSE/ASPECT: PAST (BE),AFF. INT.,,A1,A1-C1,A1,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定;過去進行・受動態も含まれる
|
||||||
|
64-3,TA.PAST.be.INT.NEG,TENSE/ASPECT: PAST (BE),NEG. INT.,,,A1-C1,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定;過去進行・受動態も含まれる
|
||||||
|
65,TA.PAST.do.AFF,TENSE/ASPECT: PRESENT (lexical verbs),AFF. DEC.,A1.3,A1,A1-C1,A1-C1,,名詞句・代名詞に続く一般動詞(be/do/have以外)に限定
|
||||||
|
65-1,TA.PAST.do.NEG,TENSE/ASPECT: PRESENT (lexical verbs),NEG. DEC.,A2.1,A2,A1-C1,A2-B2,,名詞句・代名詞に続くものに限定
|
||||||
|
65-2,TA.PAST.do.INT.AFF,TENSE/ASPECT: PRESENT (lexical verbs),AFF. INT.,A2.1,A2,A1-C1,A2-C1,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
65-3,TA.PAST.do.INT.NEG,TENSE/ASPECT: PRESENT (lexical verbs),NEG. INT.,,,A1-C1,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
66,TA.PASTPRG.AFF,TENSE/ASPECT: PAST PROGRESSIVE,AFF. DEC.,A2.1,A2,A2-C1,A2-C2,,be going toを除く
|
||||||
|
66-1,TA.PASTPRG.NEG,TENSE/ASPECT: PAST PROGRESSIVE,NEG. DEC.,,B1,A2-C1,B1,,be going toを除く
|
||||||
|
66-2,TA.PASTPRG.INT.AFF,TENSE/ASPECT: PAST PROGRESSIVE,AFF. INT.,,,A2-C1,B1,,be going toを除く;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
66-3,TA.PASTPRG.INT.NEG,TENSE/ASPECT: PAST PROGRESSIVE,NEG. INT.,,,A2-C1,N/A,,be going toを除く;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
67,TA.PASTPF.AFF,TENSE/ASPECT: PAST PERFECT,AFF. DEC.,B1.2,B1,B1-C1,B1-C2,,過去完了進行も含まれる
|
||||||
|
67-1,TA.PASTPF.NEG,TENSE/ASPECT: PAST PERFECT,NEG. DEC.,,B2,B1-C1,B1,,過去完了進行も含まれる
|
||||||
|
67-2,TA.PASTPF.INT.AFF,TENSE/ASPECT: PAST PERFECT,AFF. INT.,,,B1-C1,B2,,過去完了進行も含まれる;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定;過去分詞がV.Dと誤認識されていることもある
|
||||||
|
67-3,TA.PASTPF.INT.NEG,TENSE/ASPECT: PAST PERFECT,NEG. INT.,,,B1-C1,N/A,,過去完了進行も含まれる;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定;過去分詞がV.Dと誤認識されていることもある
|
||||||
|
68,TA.PASTPFPRG.AFF,TENSE/ASPECT: PAST PERFECT PROGRESSIVE,AFF. DEC.,,B2,B2,B1-B2,,
|
||||||
|
68-1,TA.PASTPFPRG.NEG,TENSE/ASPECT: PAST PERFECT PROGRESSIVE,NEG. DEC.,,,B2,B2,,
|
||||||
|
68-2,TA.PASTPFPRG.INT.AFF,TENSE/ASPECT: PAST PERFECT PROGRESSIVE,AFF. INT.,,,B2,C2,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
68-3,TA.PASTPFPRG.INT.NEG,TENSE/ASPECT: PAST PERFECT PROGRESSIVE,NEG. INT.,,,B2,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
69,TA.FUT.AFF,TENSE/ASPECT: FUTURE,AFF. DEC.,A2.1,A1,A1-C1,A2-B2,,willとam/is/are going to
|
||||||
|
69-1,TA.FUT.NEG,TENSE/ASPECT: FUTURE,NEG. DEC.,B1.1,A2,A1-C1,"A2, C1",,willとam/is/are going to
|
||||||
|
69-2,TA.FUT.INT.AFF,TENSE/ASPECT: FUTURE,AFF. INT.,,A2,A1-C1,A2,,willとam/is/are going to;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
69-3,TA.FUT.INT.NEG,TENSE/ASPECT: FUTURE,NEG. INT.,,,A1-C1,N/A,,willとam/is/are going to;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
70,TA.FUTPRG.AFF,TENSE/ASPECT: FUTURE,AFF. DEC.,B2.1,B2,B1-C1,A2-C1,,
|
||||||
|
70-1,TA.FUTPRG.NEG,TENSE/ASPECT: FUTURE,NEG. DEC.,,,B1-C1,B1,,
|
||||||
|
70-2,TA.FUTPRG.INT.AFF,TENSE/ASPECT: FUTURE PROGRESSIVE,AFF. INT.,,,B1-C1,B2,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
70-3,TA.FUTPRG.INT.NEG,TENSE/ASPECT: FUTURE PROGRESSIVE,NEG. INT.,,,B1-C1,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
71,TA.FUTPF.AFF,TENSE/ASPECT: FUTURE PERFECT,AFF. DEC.,,B2,B2-C1,B2-C1,,未来完了進行も含まれる
|
||||||
|
71-1,TA.FUTPF.NEG,TENSE/ASPECT: FUTURE PERFECT,NEG. DEC.,,,B2-C1,B2,,未来完了進行も含まれる
|
||||||
|
71-2,TA.FUTPF.INT.AFF,TENSE/ASPECT: FUTURE PERFECT,AFF. INT.,,,B2-C1,C2,,未来完了進行も含まれる;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
71-3,TA.FUTPF.INT.NEG,TENSE/ASPECT: FUTURE PERFECT,NEG. INT.,,,B2-C1,N/A,,未来完了進行も含まれる;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
72,TA.FUTPFPRG.AFF,TENSE/ASPECT: FUTURE PERFECT PROGRESSIVE,AFF. DEC.,,,B2-C1,B2-C2,,
|
||||||
|
72-1,TA.FUTPFPRG.NEG,TENSE/ASPECT: FUTURE PERFECT PROGRESSIVE,NEG. DEC.,,,B2-C1,B2,,
|
||||||
|
72-2,TA.FUTPFPRG.INT.AFF,TENSE/ASPECT: FUTURE PERFECT PROGRESSIVE,AFF. INT.,,,B2-C1,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
72-3,TA.FUTPFPRG.INT.NEG,TENSE/ASPECT: FUTURE PERFECT PROGRESSIVE,NEG. INT.,,,B2-C1,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
73,PASS.PRESENT,PASSIVE: PRESENT,AFF. DEC.,A1.2,A1,,A2-B2,A2-B1,
|
||||||
|
73-1,PASS.PRESENT.NEG,PASSIVE: PRESENT,NEG. DEC.,B2.1,B2,,B1,A2-B1,
|
||||||
|
73-2,PASS.PRESENT.INT.AFF,PASSIVE: PRESENT,AFF. INT.,,,,N/A,A2-B1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
73-3,PASS.PRESENT.INT.NEG,PASSIVE: PRESENT,NEG. INT.,,,,N/A,A2-B1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
74,PASS.PRSPRG.AFF,PASSIVE: PRESENT PROGRESSIVE,AFF. DEC.,,B2,B2-C1,A2-B2,C1,
|
||||||
|
74-1,PASS.PRSPRG.NEG,PASSIVE: PRESENT PROGRESSIVE,NEG. DEC.,,,B2-C1,"B2, C1",C1,
|
||||||
|
74-2,PASS.PRSPRG.INT.AFF,PASSIVE: PRESENT PROGRESSIVE,AFF. INT.,,,B2-C1,N/A,C1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
74-3,PASS.PRSPRG.INT.NEG,PASSIVE: PRESENT PROGRESSIVE,NEG. INT.,,,B2-C1,N/A,C1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
75,PASS.PRSPF.AFF,PASSIVE: PRESENT PERFECT,AFF. DEC.,B2.1,B2,B2-C1,A2-B2,A2,現在完了進行の受動態は省略
|
||||||
|
75-1,PASS.PRSPF.NEG,PASSIVE: PRESENT PERFECT,NEG. DEC.,,,B2-C1,B2,A2,現在完了進行の受動態は省略
|
||||||
|
75-2,PASS.PRSPF.INT.AFF,PASSIVE: PRESENT PERFECT,AFF. INT.,,,B2-C1,N/A,A2,現在完了進行の受動態は省略;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
75-3,PASS.PRSPF.INT.NEG,PASSIVE: PRESENT PERFECT,NEG. INT.,,,B2-C1,N/A,A2,現在完了進行の受動態は省略;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
76,PASS.PAST.AFF,PASSIVE: PAST,AFF. DEC.,A2.1,A2,B1-C1,A2-B2,,
|
||||||
|
76-1,PASS.PAST.NEG,PASSIVE: PAST,NEG. DEC.,,B1,B1-C1,B2,,
|
||||||
|
76-2,PASS.PAST.INT.AFF,PASSIVE: PAST,AFF. INT.,,,B1-C1,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
76-3,PASS.PAST.INT.NEG,PASSIVE: PAST,NEG. INT.,,,B1-C1,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
77,PASS.PASTPRG.AFF,PASSIVE: PAST PROGRESSIVE,AFF. DEC.,,,B2-C1,A2-B2,,
|
||||||
|
77-1,PASS.PASTPRG.NEG,PASSIVE: PAST PROGRESSIVE,NEG. DEC.,,,B2-C1,B2,,
|
||||||
|
77-2,PASS.PASTPRG.INT.AFF,PASSIVE: PAST PROGRESSIVE,AFF. INT.,,,B2-C1,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
77-3,PASS.PASTPRG.INT.NEG,PASSIVE: PAST PROGRESSIVE,NEG. INT.,,,B2-C1,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
78,PASS.PASTPF.AFF,PASSIVE: PAST PERFECT,AFF. DEC.,,B2,B2-C1,A2-B2,B2,過去完了進行の受動態は省略
|
||||||
|
78-1,PASS.PASTPF.NEG,PASSIVE: PAST PERFECT,NEG. DEC.,,,B2-C1,B2,B2,過去完了進行の受動態は省略
|
||||||
|
78-2,PASS.PASTPF.INT.AFF,PASSIVE: PAST PERFECT,AFF. INT.,,,B2-C1,N/A,B2,過去完了進行の受動態は省略;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
78-3,PASS.PASTPF.INT.NEG,PASSIVE: PAST PERFECT,NEG. INT.,,,B2-C1,N/A,B2,過去完了進行の受動態は省略;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
79,PASS.FUT.AFF,PASSIVE: FUTURE,AFF. DEC.,B2.1,B1,C1,B2,,willに限定
|
||||||
|
79-1,PASS.FUT.NEG,PASSIVE: FUTURE,NEG. DEC.,,,C1,N/A,,willに限定
|
||||||
|
79-2,PASS.FUT.INT.AFF,PASSIVE: FUTURE,AFF. INT.,,,C1,N/A,,willに限定;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
79-3,PASS.FUT.INT.NEG,PASSIVE: FUTURE,NEG. INT.,,,C1,N/A,,willに限定;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
80,PASS.FUTPRG.AFF,PASSIVE: FUTURE PROGRESSIVE,AFF. DEC.,,,C1,B1,,
|
||||||
|
80-1,PASS.FUTPRG.NEG,PASSIVE: FUTURE PROGRESSIVE,NEG. DEC.,,,C1,N/A,,
|
||||||
|
80-2,PASS.FUTPRG.INT.AFF,PASSIVE: FUTURE PROGRESSIVE,AFF. INT.,,,C1,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
80-3,PASS.FUTPRG.INT.NEG,PASSIVE: FUTURE PROGRESSIVE,NEG. INT.,,,C1,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
81,PASS.FUTPF.AFF,PASSIVE: FUTURE PERFECT,AFF. DEC.,,,C1,N/A,,未来完了進行の受動態は省略
|
||||||
|
81-1,PASS.FUTPF.NEG,PASSIVE: FUTURE PERFECT,NEG. DEC.,,,C1,N/A,,未来完了進行の受動態は省略
|
||||||
|
81-2,PASS.FUTPF.INT.AFF,PASSIVE: FUTURE PERFECT,AFF. INT.,,,C1,N/A,,未来完了進行の受動態は省略;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
81-3,PASS.FUTPF.INT.NEG,PASSIVE: FUTURE PERFECT,NEG. INT.,,,C1,N/A,,未来完了進行の受動態は省略;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
82,PASS.MD.AFF,PASSIVE: AUX,AFF. DEC.,B1.2,B1,C1,B2,B2,助動詞はMDに限定
|
||||||
|
82-1,PASS.MD.NEG,PASSIVE: AUX,NEG. DEC.,,B2,C1,N/A,B2,助動詞はMDに限定
|
||||||
|
82-2,PASS.MD.INT.AFF,PASSIVE: AUX,AFF. INT.,,,C1,N/A,B2,助動詞はMDに限定;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
82-3,PASS.MD.INT.NEG,PASSIVE: AUX,NEG. INT.,,,C1,N/A,B2,助動詞はMDに限定;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
83,PASS.MDPRG.AFF,PASSIVE: AUX+PROGRESSIVE,AFF. DEC.,,,,N/A,,助動詞はMDに限定
|
||||||
|
83-1,PASS.MDPRG.NEG,PASSIVE: AUX+PROGRESSIVE,NEG. DEC.,,,,N/A,,助動詞はMDに限定
|
||||||
|
83-2,PASS.MDPRG.INT.AFF,PASSIVE: AUX+PROGRESSIVE,AFF. INT.,,,,N/A,,助動詞はMDに限定;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
83-3,PASS.MDPRG.INT.NEG,PASSIVE: AUX+PROGRESSIVE,NEG. INT.,,,,N/A,,助動詞はMDに限定;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
84,PASS.MDPF.AFF,PASSIVE: AUX+PERFECT,AFF. DEC.,,,B2-C1,N/A,,助動詞はMDに限定;助動詞+完了進行の受動態は省略
|
||||||
|
84-1,PASS.MDPF.NEG,PASSIVE: AUX+PERFECT,NEG. DEC.,,,B2-C1,N/A,,助動詞はMDに限定;助動詞+完了進行の受動態は省略
|
||||||
|
84-2,PASS.MDPF.INT.AFF,PASSIVE: AUX+PERFECT,AFF. INT.,,,B2-C1,N/A,,助動詞はMDに限定;助動詞+完了進行の受動態は省略;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
84-3,PASS.MDPF.INT.NEG,PASSIVE: AUX+PERFECT,NEG. INT.,,,B2-C1,N/A,,助動詞はMDに限定;助動詞+完了進行の受動態は省略;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
85,PASS.IO.AFF,PASSIVE: INDIRECT OBJECTS OF GIVE/PASS/SEND/SHOW/TEACH/TELL AS SUBJECTS,AFF. DEC.,B2.1,B2,,B1-B2,B1,
|
||||||
|
85-1,PASS.IO.NEG,PASSIVE: INDIRECT OBJECTS OF GIVE/PASS/SEND/SHOW/TEACH/TELL AS SUBJECTS,NEG. DEC.,,,,N/A,B1,現在・過去の単純相に限定
|
||||||
|
85-2,PASS.IO.INT.AFF,PASSIVE: INDIRECT OBJECTS OF GIVE/PASS/SEND/SHOW/TEACH/TELL AS SUBJECTS,AFF. INT.,,,,N/A,B1,現在・過去の単純相に限定;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
85-3,PASS.IO.INT.NEG,PASSIVE: INDIRECT OBJECTS OF GIVE/PASS/SEND/SHOW/TEACH/TELL AS SUBJECTS,NEG. INT.,,,,N/A,B1,現在・過去の単純相に限定;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
86,PASS.DO.AFF,PASSIVE: DIRECT OBJECTS OF GIVE/PASS/SEND/SHOW/TEACH/TELL AS SUBJECTS,AFF. DEC.,,,,B2,,
|
||||||
|
86-1,PASS.DO.NEG,PASSIVE: DIRECT OBJECTS OF GIVE/PASS/SEND/SHOW/TEACH/TELL AS SUBJECTS,NEG. DEC.,,,,N/A,,現在・過去の単純相に限定
|
||||||
|
86-2,PASS.DO.INT.AFF,PASSIVE: DIRECT OBJECTS OF GIVE/PASS/SEND/SHOW/TEACH/TELL AS SUBJECTS,AFF. INT,,,,N/A,,現在・過去の単純相に限定;文頭(相当)または接続詞直後 の位置・疑問符で終わる文に限定
|
||||||
|
86-3,PASS.DO.INT.NEG,PASSIVE: DIRECT OBJECTS OF GIVE/PASS/SEND/SHOW/TEACH/TELL AS SUBJECTS,NEG. INT.,,,,N/A,,現在・過去の単純相に限定;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
87,PASS.get_VN,GET+PAST PARTICIPLE,,B1.2,A1,,B1,B1,getの時制・相は問わない
|
||||||
|
88,TO.to_do,TO-INFINITIVE: to DO (not preceded by 'not'),,A1.1,A1,A2,A1,A2,
|
||||||
|
89,TO.not_to_do,TO-INFINITIVE: not to DO,,B1.2,B1,,N/A,,
|
||||||
|
90,TO.to_have_done,TO-INFINITIVE: to have DONE,,,B2,,C1-C2,,完了・受動態のto不定詞も含まれる
|
||||||
|
91,TO.to_be_done,TO-INFINITIVE: to be DONE,,B2.1,B2,,B1-B2,,
|
||||||
|
92,TO.to_have_been_done,TO-INFINITIVE: to have been DONE,,,,,N/A,,
|
||||||
|
93,TO.for_NP_to_do,TO-INFINITIVE: WITH NOTIONAL SUBJECT,,B1.1,A2,,B2,,意味上の主語でないものも含まれる
|
||||||
|
94,TO.thing_to_do,-thing to DO,,,,,,,
|
||||||
|
95,TO.in_order_to_do,in order to DO,,B2.2,B2,,N/A,A2,
|
||||||
|
96,TO.in_order_not_to_do,in order not to DO,,,,,N/A,,
|
||||||
|
97,TO.so_as_to_do,so as to DO,,,,,C2,B1,
|
||||||
|
98,TO.so_as_not_to_do,so as not to DO,,,,,N/A,,
|
||||||
|
99,TO.be_to_do,BE to DO,AFF. DEC.,B1.2,B1,,N/A,,単なる主格補語がほとんど
|
||||||
|
99-1,TO.be_not_to_do,BE not to DO,NEG. DEC.,,,,N/A,,単なる主格補語がほとんど
|
||||||
|
100,TO.be_about_to_do,BE about to DO,AFF. DEC.,,,,B2,,
|
||||||
|
100-1,TO.be_not_about_to_do,BE not about to DO,NEG. DEC.,,,,N/A,,
|
||||||
|
101,TO.VV_to_do,VERB to DO,,A1.2,A1,A2,A1-B2,B1,動詞はbe・haveを除く
|
||||||
|
102,TO.VV_not_to_do,VERB not to DO,,,B2,,A1-B2,,動詞はbe・haveを除く
|
||||||
|
103,TO.VV_NP_to_do,VERB OBJECT to DO,,A1.2,A1,,B1,,動詞はbe・haveを除く;単なるSVO+目的/名詞修飾のto不定詞も含まれる
|
||||||
|
104,TO.VV_NP_not_to_do,VERB OBJECT not to DO,,,,,N/A,,動詞はbe・haveを除く
|
||||||
|
105,VG,V-ING (not preceded by 'not'),,A1.1,A1,A2,B1-B2,B1,動名詞と現在分詞の区別はできないため現在分詞も含ま
|
||||||
|
106,VG.not_VG,not+V-ING,,B2.1,B1,,N/A,,動名詞と現在分詞の区別はできないため現在分詞も含ま
|
||||||
|
107,VG.having_VN,having+PAST PARTICIPLE,,,B2,,B2,C1,形容詞的な過去分詞も含まれる
|
||||||
|
108,VG.being_VN,being+PAST PARTICIPLE,,B2.1,B2,,B2,,動名詞と現在分詞の区別はできないため現在分詞のbeingも含まれる;形容詞的な過去分詞も含まれる
|
||||||
|
109,VG.having_been_VN,having been+PAST PARTICIPLE,,,,,C2,,形容詞的な過去分詞も含まれる
|
||||||
|
110,VG.PREP_VG,PREP+V-ING,,A1.3,A1,,"A2, C2",,動名詞と現在分詞の区別はできないため形容詞的な現在分詞も含まれる
|
||||||
|
111,VG.PGEN_VG,V-ING: WITH NOTIONAL SUBJECT (expressed as possessive pronouns),,,,,B2,,動名詞と現在分詞の区別はできないため現在分詞も含まれる;目的格代名詞・名詞句+'s・名詞句は誤認識がほとんどのため除く;mind+人+doingなどは動詞+目的語+動詞-ing
|
||||||
|
112,VG.VV_VG,VERB V-ING,,A1.2,A1,A1-A2,B2,,動詞はbe/haveを除く
|
||||||
|
113,VG.VV_not_VG,VERB not V-ING,,,,,B2,,動詞はbe/haveを除く
|
||||||
|
114,VG.VV_NP_VG,VERB OBJECT V-ING,,A2.2,A2,,B2,,動詞はbe/haveを除く;動名詞と現在分詞の区別はできないため現在分詞が多く含まれる
|
||||||
|
115,VG.VV_NP_not_VG,VERB OBJECT not V-ING,,,,,B2,,動詞はbe/haveを除く;ほとんどが誤認識
|
||||||
|
116,IMP.be.AFF,IMPERATIVE (BE),AFF. IMP.,,,,N/A,,カンマ後を除く文頭(相当)または接続詞直後の位置・途中に句読点なし・終止符または感嘆符で終わる文に限定
|
||||||
|
116-1,IMP.be.NEG,IMPERATIVE (BE),NEG. IMP,,,,N/A,,文頭(相当)または接続詞直後の位置・途中に句読点なし・終止符または感嘆符で終わる文に限定
|
||||||
|
117,IMP.V.AFF,IMPERATIVE: AFFIRMATIVE (lexical verbs),AFF. IMP.,A1.1,A1,A1-A2,A2-C1,A1,カンマ後を除く文頭(相当)または接続詞直後の位置・途中に 句読点なし・終止符または感嘆符で終わる文に限定;do・ haveの場合は否定命令・強調命令・疑問文を除くためnot・ 動詞原形・you・we・theyが後続しないものに限定
|
||||||
|
117-1,IMP.V.NEG,IMPERATIVE: AFFIRMATIVE (lexical verbs),NEG. IMP,B1.1,A1,A1-A2,"A2, B1-C2",A1,文頭(相当)または接続詞直後の位置・途中に句読点なし・終止符または感嘆符で終わる文に限定
|
||||||
|
118,IMP.do_V,Do+IMPERATIVE,AFF. IMP.,,,,B1,A1,文頭(相当)または接続詞直後の位置・途中に句読点なし・終止符または感嘆符で終わる文に限定
|
||||||
|
119,IMP.please_V.AFF,Please+INFINITIVE,AFF. IMP.,,A1,A2,B2,A1,文頭(相当)または接続詞直後の位置・途中に句読点なし・終止符または感嘆符で終わる文に限定;pleaseに付与されるタグは様々
|
||||||
|
119-1,IMP.please_V.NEG,Please+don't/never+INFINITIVE,NEG. IMP,,,A2,N/A,A1,文頭(相当)または接続詞直後の位置・途中に句読点なし・終止符または感嘆符で終わる文に限定;pleaseに付与されるタグは様々
|
||||||
|
120,IMP.let's_V.AFF,let's (not followed by 'not'),AFF. DEC.,A1.3,A1,,A2,A1,letと'sに付与される品詞タグは様々
|
||||||
|
120-1,IMP.let's_V.NEG,let's not,NEG. DEC.,,,,B2,A1,letと'sに付与される品詞タグは様々
|
||||||
|
121,MD.be_able_to.AFF,MODAL/AUX: be able to,AFF. DEC.,B1.1,B1,,A2-B1,,beの時制・相は問わない
|
||||||
|
121-1,MD.be_able_to.NEG,MODAL/AUX: be able to,NEG. DEC.,,,,N/A,,beの時制・相は問わない
|
||||||
|
121-2,MD.be_able_to.INT.AFF,MODAL/AUX: be able to,AFF. INT.,,,,N/A,,beの時制・相は問わない;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
121-3,MD.be_able_to.INT.NEG,MODAL/AUX: be able to,NEG. DEC.,,,,N/A,,beの時制・相は問わない;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
122,MD.be_going_to.AFF,MODAL/AUX: be going to,AFF. DEC.,A2.2,A2,A1-B2,"A2, B1",,beの時制・相は問わない
|
||||||
|
122-1,MD.be_going_to.NEG,MODAL/AUX: be going to,NEG. DEC.,,,A1-B2,B1,,beの時制・相は問わない
|
||||||
|
122-2,MD.be_going_to.INT.AFF,MODAL/AUX: be going to,AFF. INT.,,,A1-B2,A2,,beの時制・相は問わない;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
122-3,MD.be_going_to.INT.NEG,MODAL/AUX: be going to,NEG. DEC.,,,A1-B2,B1,,beの時制・相は問わない;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
123,MD.can.AFF,MODAL/AUX: can,AFF. DEC.,A1.2,A1,A1-A2,A1-C2,A1,
|
||||||
|
123-1,MD.can.NEG,MODAL/AUX: can,NEG. DEC.,,B2,A1-B1,A1-C1,A1,
|
||||||
|
123-2,MD.can.INT.AFF,MODAL/AUX: can,AFF. INT.,A1.2,A1,A1-A2,A1,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
123-3,MD.can.INT.NEG,MODAL/AUX: can,NEG. DEC.,,,A1-A2,A1-B1,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
124,MD.could.AFF,MODAL/AUX: could,AFF. DEC.,B1.1,B1,A2,A2-C2,A2,
|
||||||
|
124-1,MD.could.NEG,MODAL/AUX: could,NEG. DEC.,B1.1,B1,A2,A2,A2,
|
||||||
|
124-2,MD.could.INT.AFF,MODAL/AUX: could,AFF. INT.,,B1,A2,A2,A2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定;動詞がV.Pと誤認識されていることもある
|
||||||
|
124-3,MD.could.INT.NEG,MODAL/AUX: could,NEG. DEC.,,,A2,"B2, C2",A2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定;動詞がV.Pと誤認識されていることもある
|
||||||
|
125,MD.dare.AFF,MODAL/AUX: dare (to),AFF. DEC.,,,,B2-C2,,dare to(dareの時制・相は問わない)を含む
|
||||||
|
125-1,MD.dare.NEG,MODAL/AUX: dare (to),NEG. DEC.,,,,"B2, C2",,dare to(dareの時制・相は問わない)を含む
|
||||||
|
125-2,MD.dare.INT.AFF,MODAL/AUX: dare (to),AFF. INT.,,,,C1,,dare toを含む;文頭(相当)または接続詞直後の位置・疑問 符で終わる文に限定
|
||||||
|
125-3,MD.dare.INT.NEG,MODAL/AUX: dare (to),NEG. INT.,,,,C1,,dare toを含む;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
126,MD.had_better.AFF,MODAL/AUX: had better,AFF. DEC.,,B2,,N/A,,疑問文はなし
|
||||||
|
126-1,MD.had_better.NEG,MODAL/AUX: had better,NEG. DEC.,,,,N/A,,疑問文はなし
|
||||||
|
127,MD.have_to.AFF,MODAL/AUX: have to,AFF. DEC.,A2.2,A2,A2-B1,A2-C2,A2,haveの時制・相は問わない
|
||||||
|
127-1,MD.have_to.NEG,MODAL/AUX: have to,NEG. DEC.,B2.2,B1,A2-B1,A2,B1,
|
||||||
|
127-2,MD.have_to.INT.AFF,MODAL/AUX: have to,AFF. INT.,,,A2-B1,A2,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
127-3,MD.have_to.INT.NEG,MODAL/AUX: have to,NEG. DEC.,,,A2-B1,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
128,MD.have_got_to.AFF,MODAL/AUX: (have) got to,AFF. DEC.,,B2,,A2-C2,,haveの時制・相は問わない(が通常はhave・hasとまれにhadがあるのみ);疑問文を除くため終止符または感嘆符で終わる文に限定
|
||||||
|
128-1,MD.have_got_to.NEG,MODAL/AUX: have got to,NEG. DEC.,,,,A2,,haveの時制・相は問わない(が通常はhave・hasとまれにhadがあるのみ)
|
||||||
|
128-2,MD.have_got_to.INT.AFF,MODAL/AUX: have got to,AFF. INT.,,,,A2,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
128-3,MD.have_got_to.INT.NEG,MODAL/AUX: have got to,NEG. INT.,,,,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
129,MD.may.AFF,MODAL/AUX: may,AFF. DEC.,B1.1,B1,A2-B1,"A2-B1, C2",B2,
|
||||||
|
129-1,MD.may.NEG,MODAL/AUX: may,NEG. DEC.,,B2,A2-B1,"B1, C1",,
|
||||||
|
129-2,MD.may.INT.AFF,MODAL/AUX: may,AFF. INT.,,,A2-B1,B1-B2,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
129-3,MD.may.INT.NEG,MODAL/AUX: may,NEG. INT.,,,A2-B1,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
130,MD.may_as_well.AFF,MODAL/AUX: may as well,AFF. DEC.,,,,C2,,
|
||||||
|
130-1,MD.may_as_well.NEG,MODAL/AUX: may as well,NEG. DEC.,,,,N/A,,
|
||||||
|
130-2,MD.may_as_well.INT.AFF,MODAL/AUX: may as well,AFF. INT.,,,,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
130-3,MD.may_as_well.INT.NEG,MODAL/AUX: may as well,NEG. INT.,,,,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
131,MD.may_well.AFF,MODAL/AUX: may well,AFF. DEC.,,,,C1,,
|
||||||
|
131-1,MD.may_well.NEG,MODAL/AUX: may well,NEG. DEC.,,,,N/A,,
|
||||||
|
131-2,MD.may_well.INT.AFF,MODAL/AUX: may well,AFF. INT.,,,,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
131-3,MD.may_well.INT.NEG,MODAL/AUX: may well,NEG. INT.,,,,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
132,MD.might.AFF,MODAL/AUX: might,B1.1,B1,A2-B1,A2-C2,B2,,
|
||||||
|
132-1,MD.might.NEG,MODAL/AUX: might,,B2,A2-B1,B1-C1,,,
|
||||||
|
132-2,MD.might.INT.AFF,MODAL/AUX: might,,,A2-B1,C1,,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
132-3,MD.might.INT.NEG,MODAL/AUX: might,,,A2-B1,N/A,,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
133,MD.might_as_well.AFF,MODAL/AUX: might as well,,,,C2,,,
|
||||||
|
133-1,MD.might_as_well.NEG,MODAL/AUX: might as well,,,,N/A,,,
|
||||||
|
133-2,MD.might_as_well.INT.AFF,MODAL/AUX: might as well,,,,N/A,,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
133-3,MD.might_as_well.INT.NEG,MODAL/AUX: might as well,,,,N/A,,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
134,MD.might_well.AFF,MODAL/AUX: might well,,,,N/A,,,
|
||||||
|
134-1,MD.might_well.NEG,MODAL/AUX: might well,,,,N/A,,,
|
||||||
|
134-2,MD.might_well.INT.AFF,MODAL/AUX: might well,,,,N/A,,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
134-3,MD.might_well.INT.NEG,MODAL/AUX: might well,,,,N/A,,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
135,MD.must.AFF,MODAL/AUX: must,B1.1,B1,A2-B1,A2-C2,A2,,
|
||||||
|
135-1,MD.must.NEG,MODAL/AUX: must,,,A2-B1,A2-C2,,,
|
||||||
|
135-2,MD.must.INT.AFF,MODAL/AUX: must,,,A2-B1,B2,A2,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
135-3,MD.must.INT.NEG,MODAL/AUX: must,,,A2-B1,N/A,,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
136,MD.need.AFF,MODAL/AUX: need (to),A2.2,A2,B1,A2,B1,,needの時制・相は問わない
|
||||||
|
136-1,MD.need.NEG,MODAL/AUX: need (to),,B1,B1,B2-C1,B1,,needの時制・相は問わない
|
||||||
|
136-2,MD.need.INT.AFF,MODAL/AUX: need (to),,,B1,C2,,,needの時制・相は問わない;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
136-3,MD.need.INT.NEG,MODAL/AUX: need (to),,,B1,N/A,,,needの時制・相は問わない;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
137,MD.ought_to.AFF,MODAL/AUX: ought to,AFF. DEC.,,B2,B1,B1-C1,B1,
|
||||||
|
137-1,MD.ought_to.NEG,MODAL/AUX: ought to,NEG. DEC.,,,B1,C2,B1,
|
||||||
|
137-2,MD.ought_to.INT.AFF,MODAL/AUX: ought to,AFF. INT.,,,B1,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
137-3,MD.ought_to.INT.NEG,MODAL/AUX: ought to,NEG. INT.,,,B1,C2,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
138,MD.shall.AFF,MODAL/AUX: shall,AFF. DEC.,,,,A2-C2,B2,
|
||||||
|
138-1,MD.shall.NEG,MODAL/AUX: shall,NEG. DEC.,,,,C1,,
|
||||||
|
138-2,MD.shall.INT,MODAL/AUX: shall,AFF. INT.,,,,A2,A2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
138-3,MD.shall.NEG.INT,MODAL/AUX: shall,NEG. INT.,,,,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
139,MD.should.AFF,MODAL/AUX: should,AFF. DEC.,A2.1,A2,A2,A2-C1,A2,
|
||||||
|
139-1,MD.should.NEG,MODAL/AUX: should,NEG. DEC.,B1.2,B1,A2,B1-B2,"A2,B2",
|
||||||
|
139-2,MD.should.INT.AFF,MODAL/AUX: should,AFF. INT.,,,A2,A2,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
139-3,MD.should.INT.NEG,MODAL/AUX: should,NEG. INT.,,,A2,B1,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
140,MD.used_to.AFF,MODAL/AUX: used to,AFF. DEC.,B1.1,B1,A2-C1,"B1, C2",B1,usedがVVNと誤認識されていることも多い
|
||||||
|
140-1,MD.used_to.NEG,MODAL/AUX: used to,NEG. DEC.,,,A2-C1,"B1, C2",,
|
||||||
|
140-2,MD.used_to.INT.AFF,MODAL/AUX: used to,AFF. INT.,,,A2-C1,C1,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
140-3,MD.used_to.INT.NEG,MODAL/AUX: used to,NEG. INT.,,,A2-C1,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
141,MD.will.AFF,MODAL/AUX: will,AFF. DEC.,A2.2,A2,A2-B2,A1-C2,A1-B1,
|
||||||
|
141-1,MD.will.NEG,MODAL/AUX: will,NEG. DEC.,B1.1,B1,A2-B2,A2,B1,
|
||||||
|
141-2,MD.will.INT.AFF,MODAL/AUX: will,AFF. INT.,,,A2-B2,A2,A2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
141-3,MD.will.INT.NEG,MODAL/AUX: will,NEG. INT.,,,A2-B2,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定;動詞がV.Pと誤認識されていることもある
|
||||||
|
142,MD.would.AFF,MODAL/AUX: would,AFF. DEC.,A2.1,A1,B1-B2,A1-C2,"A1,B1,B2",
|
||||||
|
142-1,MD.would.NEG,MODAL/AUX: would,NEG. DEC.,B2.1,B1,B1-B2,"A2, B1","A1,A2,B1",
|
||||||
|
142-2,MD.would.INT.AFF,MODAL/AUX: would,AFF. INT.,,B1,B1-B2,"A2, B1",A2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
142-3,MD.would.INT.NEG,MODAL/AUX: would,NEG. INT.,,,B1-B2,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
143,MD.would_rather.AFF,MODAL/AUX: would rather,AFF. DEC.,,,,N/A,A2,
|
||||||
|
143-1,MD.would_rather.NEG,MODAL/AUX: would rather,NEG. DEC.,,,,N/A,,
|
||||||
|
143-2,MD.would_rather.INT.AFF,MODAL/AUX: would rather,AFF. INT.,,,,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
143-3,MD.would_rather.INT.NEG,MODAL/AUX: would rather,NEG. INT.,,,,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
144,MD.MD_PRG.AFF,AUX+PROGRESSIVE,AFF. DEC.,B2.1,B2,,B2,,助動詞はMDに限定
|
||||||
|
144-1,MD.MD_PRG.NEG,AUX+PROGRESSIVE,NEG. DEC.,,,,N/A,,助動詞はMDに限定
|
||||||
|
144-2,MD.MD_PRG.INT.AFF,AUX+PROGRESSIVE,AFF. INT.,,,,N/A,,助動詞はMDに限定;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
144-3,MD.MD_PRG.INT.NEG,AUX+PROGRESSIVE,NEG. INT.,,,,N/A,,助動詞はMDに限定;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
145,MD.MD_PF.AFF,AUX+PERFECT,AFF. DEC.,B2.1,B2,B1,"B1-B2, C2",C1,助動詞はMDに限定;完了進行も含まれる
|
||||||
|
145-1,MD.MD_PF.NEG,AUX+PERFECT,NEG. DEC.,B2.2,B2,B1,"B1, C2",,助動詞はMDに限定;完了進行も含まれる
|
||||||
|
145-2,MD.MD_PF.INT.AFF,AUX+PERFECT,AFF. INT.,,,B1,N/A,,助動詞はMDに限定;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
145-3,MD.MD_PF.INT.NEG,AUX+PERFECT,NEG. INT.,,,B1,N/A,,助動詞はMDに限定;文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
146,EX.there.AFF,there+be,AFF. DEC.,A1.2,A1,A1,A1-B2,A1,文頭(相当)または接続詞直後の位置に限定
|
||||||
|
146-1,EX.there.NEG,there+be,NEG. DEC.,,A1,A1,B1,A1,文頭(相当)または接続詞直後の位置に限定
|
||||||
|
146-2,EX.there.INT.AFF,there+be,AFF. INT.,,A1,A1,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定;thereがRBと誤認識されていることも多い
|
||||||
|
146-3,EX.there.INT.NEG,there+be,NEG. INT.,,,A1,C1,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
147,EX.there.PF.AFF,there+have/has+been,AFF. DEC.,,B2,,N/A,,文頭(相当)または接続詞直後の位置に限定
|
||||||
|
147-1,EX.there.PF.NEG,there+have/has+been,NEG. DEC.,,,,N/A,,文頭(相当)または接続詞直後の位置に限定
|
||||||
|
147-2,EX.there.PF.INT.AFF,there+have/has+been,AFF. INT.,,,,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
147-3,EX.there.PF.INT.NEG,there+have/has+been,NEG. INT.,,,,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
148,EX.there.MD.AFF,there+AUX+be,AFF. DEC.,,B2,,"B1-B2, C1",,文頭(相当)または接続詞直後の位置に限定;助動詞はMDに限定
|
||||||
|
148-1,EX.there.MD.NEG,there+AUX+be,NEG. DEC.,,,,N/A,,文頭(相当)または接続詞直後の位置に限定;助動詞はMDに限定
|
||||||
|
148-2,EX.there.MD.INT.AFF,there+AUX+be,AFF. INT.,,,,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定;助動詞はMDに限定
|
||||||
|
148-3,EX.there.MD.INT.NEG,there+AUX+be,NEG. INT.,,,,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定;助動詞はMDに限定
|
||||||
|
149,EX.here.AFF,here is/are,AFF. DEC.,B1.1,A1,,N/A,,文頭(相当)または接続詞直後の位置に限定;toが後続しないものに限定
|
||||||
|
150,CC,COORDINATING CONJUNCTIONS,,A1.1,A1,A1,A1-B1,,
|
||||||
|
151,CL.that.APP,the fact(s) that+CLAUSE,,,B2,,B2,,名詞はfactに限定;名詞句・代名詞が後続するものに限定
|
||||||
|
152,CL.that.OBJ,V+that+CLAUSE,,A2.1,A1,,A2-B1,A2,直接目的語に限定
|
||||||
|
153,CL.WH.OBJ,know/wonder+WH-(CLAUSE) (except for 'whether'),,B1.1,B1,,"A2, C1-C2",,動詞はknow/wonderに限定;接続詞のwh-に限定するために名詞句・代名詞が後続するものに限定;what/which+名詞も含まれる
|
||||||
|
154,CL.WH.whether,whether,,B2.1,B2,,B1,B2,副詞節・目的語・主語・補語などの分類は困難
|
||||||
|
155,CL.when,ADVERBIAL CLAUSE: when,,A1.2,A1,,A2,B1,接続詞と疑問詞が区別されないため途中に句読点なし・終 止符または感嘆符で終わる文に限定
|
||||||
|
156,CL.if,ADVERBIAL CLAUSE: if,,A2.1,A2,A2,"A2, C1",,仮定法の場合も含まれる
|
||||||
|
157,CL.as,ADVERBIAL CLAUSE: as,,A2.1,A2,,B2,,前置詞のasも完全に排除はできない
|
||||||
|
158,CL.as_soon_as,ADVERBIAL CLAUSE: as soon as,,,B1,,B2-B1,B1,
|
||||||
|
159,CL.by_the_time,ADVERBIAL CLAUSE: by the time,,,,,C1,,
|
||||||
|
160,CL.so_that,ADVERBIAL CLAUSE: so that,,B2.1,B1,,B1,,
|
||||||
|
161,CL_after.etc,SUBORDINATE CLAUSE: after/albeit/although/because/before/despite/except/for/lest/like/once/since/so/than/though/till/unless/until/where/whereas/wheresoever/whether/while/whilst tagged as IN,,A1.1,A1,,"B2, C2",,INのタグのついたafter/albeit/although/because/before/despite/except/for/lest/like/once/since/so/than/though/till/unless/until/where/whereas/wheresoever/whether/while/whilstに限定;前置詞も完全に排除はできない
|
||||||
|
162,CL.that.OMIT,hope/know/think+CLAUSE (without 'that'),,A1.2,A1,,A2,A2,動詞はhope/know/thinkに限定;節部分は名詞句・代名詞+(助)動詞・副詞に限定
|
||||||
|
163,PP.it_to_do.AFF,it+BE(+ADV)+ADJ(+for+NP)+to+INFINITIVE,AFF. DEC.,,A2,,B1,B1,文頭(相当)または接続詞直後の位置に限定;it(+助動詞)+{be}(+副詞)+形容詞(+for+名詞句・代名詞)+to+動詞に限定
|
||||||
|
163-1,PP.it_to_do.NEG,it+BE(+ADV)+ADJ(+for+NP)+to+INFINITIVE,NEG. DEC.,,,,N/A,B1,文頭(相当)または接続詞直後の位置に限定;it+(助動詞+{not}+{be}|{be}+{not})(+副詞)+形容詞(+for+名詞句・代名詞)+to+動詞に限定
|
||||||
|
163-2,PP.it_to_do.INT.AFF,it+BE(+ADV)+ADJ(+for+NP)+to+INFINITIVE,AFF. INT.,,,,N/A,B1,(助動詞+it+be|{be}+it)(+副詞)+形容詞(+for+名詞句・代名詞)+to+動詞に限定;疑問符で終わる文に限定
|
||||||
|
163-3,PP.it_to_do.INT.NEG,it+BE(+ADV)+ADJ(+for+NP)+to+INFINITIVE,NEG. INT.,,,,N/A,,(助動詞+n't+it+be|助動詞+it+not+be|{be}+n't+it|{be}+it+not)(+副詞)+形容詞(+for+名詞句・代名詞)+to+動詞に限定;疑問符で終わる文に限定
|
||||||
|
164,PP.it_to_do.OBJ,V+it+ADJ(+for+NP)+to+INFINITIVE,,,B2,,N/A,,動詞+it(+副詞)+形容詞(+for+名詞句・代名詞)+to+動詞に限定
|
||||||
|
165,PP.it_that.AFF,it+BE(+ADV)+ADJ+that+CLAUSE,AFF. DEC.,,,,B2-C1,,文頭(相当)または接続詞直後の位置に限定;it(+助動詞)+{be}(+副詞)+形容詞+thatに限定
|
||||||
|
165-1,PP.it_that.NEG,it+BE(+ADV)+ADJ+that+CLAUSE,NEG. DEC.,,,,N/A,,文頭(相当)または接続詞直後の位置に限定;it+(助動詞+{not}+{be}|{be}+{not})(+副詞)+形容詞+thatに限定
|
||||||
|
165-2,PP.it_that.INT.AFF,it+BE(+ADV)+ADJ+that+CLAUSE,AFF. INT.,,,,N/A,,(助動詞+it+be|{be}+it)(+副詞)+形容詞+thatに限定;疑問符で終わる文に限定
|
||||||
|
165-3,PP.it_that.INT.NEG,it+BE(+ADV)+ADJ+that+CLAUSE,NEG. INT.,,,,N/A,,(助動詞+n't+it+be|助動詞+it+not+be|{be}+n't+it|{be}+it+not)(+副詞)+形容詞+thatに限定;疑問符で終わる文に限定
|
||||||
|
166,PP.V_it_that,V+it+ADJ(+for+NP)+that+CLAUSE,,,,,N/A,,動詞+it(+副詞)+形容詞+thatに限定
|
||||||
|
167,TO.WH_to_do,WH-+to+INFINITIVE,,B1.1,A1,,N/A,B2,
|
||||||
|
168,VG.VG_N,PREMODIFYING PRESENT PARTICIPLE,,A2.1,A1,,C1,,他動詞の進行相を除外するためbe動詞・notが先行しないものに限定;動名詞+目的語の誤認識も多い
|
||||||
|
169,VG.N_VG,POSTMODIFYING PRESENT,,A1.2,A1,,"B2, C1",,進行相の疑問文や分詞構文などの誤認識も多い
|
||||||
|
170,VN.VN_N,PREMODIFYING PAST PARTICIPLE,,A1.3,A1,,N/A,,他動詞の受動態を除外するためbe動詞・notが先行しないものに限定;完了相の他動詞を除外するためにhaveが先行しないものに限定(それでもこの誤認識は多い)
|
||||||
|
171,VN.N_VN,POSTMODIFYING PAST PARTICIPLE,,A1.3,A1,,"B2, C1",,受動態や完了相の疑問文などの誤認識も多い
|
||||||
|
172,PREL.who,NOMINATIVE RELATIVE PRONOUN: who,,A1.3,A1,B2,A2-B2,B1,名詞に後続し(助)動詞・副詞が後続するものに限定
|
||||||
|
173,PREL.which,NOMINATIVE RELATIVE PRONOUN: which,,B2.2,B2,B2,A2-B2,B1,名詞に後続し(助)動詞・副詞が後続するものに限定
|
||||||
|
174,PREL.that,NOMINATIVE RELATIVE PRONOUN:,,A1.1,A1,B2,A2,,名詞に後続し(助)動詞・副詞が後続するものに限定
|
||||||
|
175,PRELO.who,ACCUSATIVE RELATIVE PRONOUN: who,,B2.2*,B2*,B2*,A2-B2*,B1*,名詞に後続し(助)動詞・副詞が後続するものに限定
|
||||||
|
176,PRELO.whom,ACCUSATIVE RELATIVE PRONOUN: whom,,B2.2*,B2*,B2*,A2-B2*,B1*,名詞に後続し(助)動詞・副詞が後続するものに限定
|
||||||
|
177,PRELO.which,ACCUSATIVE RELATIVE PRONOUN: which,,B2.2*,B2*,B2*,A2-B2*,B1*,名詞に後続し(助)動詞・副詞が後続するものに限定
|
||||||
|
178,PRELO.that,ACCUSATIVE RELATIVE PRONOUN: that,,B2.2*,B2*,B2*,A2-B2*,B1*,名詞に後続し(助)動詞・副詞が後続するものに限定
|
||||||
|
179,PRELO.OMIT,ELLIPTICAL ACCUSATIVE RELATIVE PRONOUN,,A1.1,A1,B2,A2,,名詞の後に名詞句・代名詞+(助)動詞・副詞が後続するものに限定
|
||||||
|
180,PRELGEN,GENITIVE RELATIVE PRONOUN,,,B2,B2,B1-B2,B2,名詞に後続するものに限定
|
||||||
|
181,PREL.NR,RELATIVE PRONOUN: NONRESTRICTIVE,,B1.1,B1,B2,A2-B2,B2,"Excuse me, which ...?などを除外するため名詞に続くものに限定;格は問わない"
|
||||||
|
182,PREL.as,PSEUDO RELATIVE PRONOUN: as,,,B2,,N/A,,(助)動詞が後続するものに限定
|
||||||
|
183,PREL.what,COMPOUND RELATIVE PRONOUN:,,A2.1,A1,,N/A,,代名詞が後続するものに限定;疑問詞のwhatも含まれる
|
||||||
|
184,PREL.PREP_PREL,PREP+RELATIVE PRONOUN,,B2.1,B1,,B2,,
|
||||||
|
185,RBREL,RELATIVE ADVERB: WITH,,A2.1,A1,,B1,,直前に先行詞があるものに限定;接続詞のwhenも含まれる
|
||||||
|
186,RBREL.NOANT,RELATIVE ADVERB: WITHOUT ANTECEDENT,,B1.1,A2,,B1,,be動詞か前置詞に後続し名詞句・代名詞が後続するものに限定
|
||||||
|
187,RBREL.NR,RELATIVE ADVERB: NONRESTRICTIVE,,,B2,,B1,,疑問文・when necessaryなどを除外するため名詞句・代名詞と任意の語が後続し終止符または感嘆符で文が終わるものに限定;接続詞のwhenも含まれる
|
||||||
|
188,WH.-ever,WH-EVER,,B2.1,B2,,C1-C2,,品詞は限定しない;副詞のhoweverを除外するためにhoweverは対象外とする
|
||||||
|
189,PREP.STRAND,PREPOSITION STRANDING,,A1.1,A1,,"A2, B2",,文末に前置詞があるものに限定
|
||||||
|
190,EXCL.how_JJ.RB,EXCLAMATION: How ADJ/ADV ...!,EXCLAMATION,,,,"B1, C2",,文頭(相当)位置・途中に句読点なし・感嘆符で終わる文に限定
|
||||||
|
191,EXCL.how,EXCLAMATION: How ...!,EXCLAMATION,,,,N/A,,文頭(相当)位置・途中に句読点なし・感嘆符で終わる文に限定;ほとんどがhow+形容詞/副詞
|
||||||
|
192,EXCL.what,EXCLAMATION: What ...!,EXCLAMATION,,,,A2,,文頭(相当)位置・途中に句読点なし・感嘆符で終わる文に限定
|
||||||
|
193,TAG.AFF,TAG QUESTION: FOLLOWING AFFIRMATIVE SENTENCE,(MAIN CLAUSE) AFF. DEC.,,B1,B1,"A2-B1, C2",A2,
|
||||||
|
193-1,TAG.NEG,TAG QUESTION: FOLLOWING NEGATIVE SENTENCE,(MAIN CLAUSE) NEG. DEC.,,B2,B1,"A2-B1, C2",A2,否定語(+句読点を除く任意の語句)に後続するものに限定
|
||||||
|
194,VP.SV.AFF,SENTENCE PATTERN: SUBJECT+V,AFF. DEC.,B1.2,A1,,N/A,,名詞句・代名詞(+助動詞)+動詞のみから成る文に限定;単純相に限定
|
||||||
|
194-1,VP.SV.NEG,SENTENCE PATTERN: SUBJECT+V,NEG. DEC.,,A1,,N/A,,名詞句・代名詞(+助動詞)+動詞のみから成る文に限定;単純相に限定
|
||||||
|
194-2,VP.SV.INT.AFF,SENTENCE PATTERN: SUBJECT+V,AFF. INT.,,A1,,N/A,,名詞句・代名詞(+助動詞)+動詞のみから成る文に限定;単純相に限定
|
||||||
|
194-3,VP.SV.INT.NEG,SENTENCE PATTERN: SUBJECT+V,NEG. INT.,,,,N/A,,名詞句・代名詞(+助動詞)+動詞のみから成る文に限定;単純相に限定
|
||||||
|
195,VP.SVC.AFF,SENTENCE PATTERN: SUBJECT+BECOME/FEEL/GO/LOOK/SEEM/SOUND+COMPLEMENT (ADJ),AFF. DEC.,,A2,,"A2, B2",,名詞句・代名詞(+助動詞)+動詞(+副詞)+形容詞のみから成る文に限定;動詞はbecome・feel・go・look・seem・soundに限定;補語は形容詞に限定;単純相に限定
|
||||||
|
195-1,VP.SVC.NEG,SENTENCE PATTERN: SUBJECT+BECOME/FEEL/GO/LOOK/SEEM/SOUND+COMPLEMENT (ADJ),NEG. DEC.,,,,N/A,,名詞句・代名詞(+助動詞)+動詞(+副詞)+形容詞のみから成る文に限定;動詞はbecome・feel・go・look・seem・soundに限定;補語は形容詞に限定;単純相に限定
|
||||||
|
195-2,VP.SVC.INT.AFF,SENTENCE PATTERN: SUBJECT+BECOME/FEEL/GO/LOOK/SEEM/SOUND+COMPLEMENT (ADJ),AFF. INT.,,,,N/A,,名詞句・代名詞(+助動詞)+動詞(+副詞)+形容詞のみから成る文に限定;動詞はbecome・feel・go・look・seem・soundに限定;補語は形容詞に限定;単純相に限定
|
||||||
|
195-3,VP.SVC.INT.NEG,SENTENCE PATTERN: SUBJECT+BECOME/FEEL/GO/LOOK/SEEM/SOUND+COMPLEMENT (ADJ),NEG. INT.,,,,N/A,,名詞句・代名詞(+助動詞)+動詞(+副詞)+形容詞のみから成る文に限定;動詞はbecome・feel・go・look・seem・soundに限定;補語は形容詞に限定;単純相に限定
|
||||||
|
196,VP.SVO.AFF,SENTENCE PATTERN: SUBJECT+V+OBJECT,AFF. DEC.,A1.1,A1,,"A1, B2",A1,名詞句・代名詞(+助動詞)+動詞+名詞句・代名詞のみから成る文に限定;単純相に限定
|
||||||
|
196-1,VP.SVO.NEG,SENTENCE PATTERN: SUBJECT+V+OBJECT,NEG. DEC.,A2.1,A1,,N/A,A1,名詞句・代名詞(+助動詞)+動詞+名詞句・代名詞のみから成る文に限定;単純相に限定
|
||||||
|
196-2,VP.SVO.INT.AFF,SENTENCE PATTERN: SUBJECT+V+OBJECT,AFF. INT.,A1.2,A1,,N/A,A1,名詞句・代名詞(+助動詞)+動詞+名詞句・代名詞のみから成る文に限定;単純相に限定
|
||||||
|
196-3,VP.SVO.INT.NEG,SENTENCE PATTERN: SUBJECT+V+OBJECT,NEG. INT.,,,,N/A,A1,名詞句・代名詞(+助動詞)+動詞+名詞句・代名詞のみから成る文に限定;単純相に限定
|
||||||
|
197,VP.SVOO.AFF,SENTENCE PATTERN: SUBJECT+GIVE/PASS/SEND/SHOW/TEACH/TELL+INDIRECT OBJECT+DIRECT OBJECT,AFF. DEC.,,,,A2,A1,名詞句・代名詞(+助動詞)+動詞+名詞句・代名詞+名詞句の みから成る文に限定;動詞はgive・pass・send・show・teach・ tellに限定;単純相に限定
|
||||||
|
197-1,VP.SVOO.NEG,SENTENCE PATTERN: SUBJECT+GIVE/PASS/SEND/SHOW/TEACH/TELL+INDIRECT OBJECT+DIRECT OBJECT,NEG. DEC.,,,,"A2, C2",,名詞句・代名詞(+助動詞)+動詞+名詞句・代名詞+名詞句のみから成る文に限定;動詞はgive・pass・send・show・teach・tellに限定;単純相に限定
|
||||||
|
197-2,VP.SVOO.INT.AFF,SENTENCE PATTERN: SUBJECT+GIVE/PASS/SEND/SHOW/TEACH/TELL+INDIRECT OBJECT+DIRECT OBJECT,AFF. INT.,,,,N/A,,名詞句・代名詞(+助動詞)+動詞+名詞句・代名詞+名詞句のみから成る文に限定;動詞はgive・pass・send・show・teach・tellに限定;単純相に限定
|
||||||
|
197-3,VP.SVOO.INT.NEG,SENTENCE PATTERN: SUBJECT+GIVE/PASS/SEND/SHOW/TEACH/TELL+INDIRECT OBJECT+DIRECT OBJECT,NEG. INT.,,,,N/A,,名詞句・代名詞(+助動詞)+動詞+名詞句・代名詞+名詞句のみから成る文に限定;動詞はgive・pass・send・show・teach・tellに限定;単純相に限定
|
||||||
|
198,VP.SVOtoO.AFF,SENTENCE PATTERN: SUBJECT+GIVE/PASS/SEND/SHOW/TEACH/TELL+DIRECT OBJECT+to+INDIRECT OBJECT,AFF. DEC.,,,,B1,A2,名詞句・代名詞(+助動詞)+動詞+名詞句・代名詞+to+名詞句・代名詞のみから成る文に限定;動詞はgive・pass・send・show・teach・tellに限定;単純相に限定
|
||||||
|
198-1,VP.SVOtoO.NEG,SENTENCE PATTERN: SUBJECT+GIVE/PASS/SEND/SHOW/TEACH/TELL+DIRECT OBJECT+to+INDIRECT OBJECT,NEG. DEC.,,,,N/A,,名詞句・代名詞(+助動詞)+動詞+名詞句・代名詞+to+名詞句・代名詞のみから成る文に限定;動詞はgive・pass・send・show・teach・tellに限定;単純相に限定
|
||||||
|
198-2,VP.SVOtoO.INT.AFF,SENTENCE PATTERN: SUBJECT+GIVE/PASS/SEND/SHOW/TEACH/TELL+DIRECT OBJECT+to+INDIRECT OBJECT,AFF. INT.,,,,N/A,,名詞句・代名詞(+助動詞)+動詞+名詞句・代名詞+to+名詞句・代名詞のみから成る文に限定;動詞はgive・pass・send・show・teach・tellに限定;単純相に限定
|
||||||
|
198-3,VP.SVOtoO.INT.NEG,SENTENCE PATTERN: SUBJECT+GIVE/PASS/SEND/SHOW/TEACH/TELL+DIRECT OBJECT+to+INDIRECT OBJECT,NEG. INT.,,,,N/A,,名詞句・代名詞(+助動詞)+動詞+名詞句・代名詞+to+名詞句・代名詞のみから成る文に限定;動詞はgive・pass・send・show・teach・tellに限定;単純相に限定
|
||||||
|
199,VP.SVOC.AFF,SENTENCE PATTERN: SUBJECT+MAKE+OBJECT+COMPLEME NT (ADJ),AFF. DEC.,,,A2,B1-B2,,名詞句・代名詞(+助動詞)+動詞+名詞句・代名詞(+副詞)+形容詞のみから成る文に限定;動詞はmakeに限定;make+複 合名詞を除外するため補語は形容詞に限定;単純相に限定
|
||||||
|
199-1,VP.SVOC.NEG,SENTENCE PATTERN: SUBJECT+MAKE+OBJECT+COMPLEME NT (ADJ),NEG. DEC.,,,A2,N/A,,名詞句・代名詞(+助動詞)+動詞+名詞句・代名詞(+副詞)+形容詞のみから成る文に限定;動詞はmakeに限定;make+複合名詞を除外するため補語は形容詞に限定;単純相に限定
|
||||||
|
199-2,VP.SVOC.INT.AFF,SENTENCE PATTERN: SUBJECT+MAKE+OBJECT+COMPLEME NT (ADJ),AFF. INT.,,,A2,N/A,,名詞句・代名詞(+助動詞)+動詞+名詞句・代名詞(+副詞)+形容詞のみから成る文に限定;動詞はmakeに限定;make+複合名詞を除外するため補語は形容詞に限定;単純相に限定
|
||||||
|
199-3,VP.SVOC.INT.NEG,SENTENCE PATTERN: SUBJECT+MAKE+OBJECT+COMPLEME NT (ADJ),NEG. INT.,,,A2,N/A,,名詞句・代名詞(+助動詞)+動詞+名詞句・代名詞(+副詞)+形容詞のみから成る文に限定;動詞はmakeに限定;make+複合名詞を除外するため補語は形容詞に限定;単純相に限定
|
||||||
|
200,INDSP.explain.report.say,INDIRECT SPEECH: SAY/EXPLAIN/REPORT,,A2.2,A2,B1-B2,"A1, B2",A2,動詞はexplain/report/sayに限定
|
||||||
|
201,INDSP.tell,INDIRECT SPEECH: TELL,,B1.2,B1,B1-B2,A2-B2,,動詞はtellに限定
|
||||||
|
202,INDQ.know.etc,INDIRECT QUESTION: DECIDE/EXPLAIN/KNOW/LEARN/SEE/UNDERSTAND/WONDER,,A2.1,A1,,B1-B2,,SVOの目的語が間接疑問のもの;動詞はdecide/explain/know/learn/see/understand/wonderに限定;間接疑問を導く接続詞はif/whether/疑問詞に限定;to不定詞が後続するものも含まれる
|
||||||
|
203,INDQ.ask.etc,INDIRECT QUESTION: ASK/REMIND/SHOW/TEACH/TELL,,B1.1,A2,,B1-B2,B1,SVOOの直接目的語が間接疑問のもの;動詞はask/remind/show/teach/tellに限定;間接疑問を導く接続詞はif/whether/疑問詞に限定;to不定詞が後続するものも含まれる
|
||||||
|
204,EMP.PP.RB.AFF,CLEFT SENTENCE FOCUSING ON PREPOSITIONAL PHRASE/ADVERB,AFF. DEC.,,B2,,,,
|
||||||
|
204-1,EMP.PP.RB.NEG,CLEFT SENTENCE FOCUSING ON PREPOSITIONAL PHRASE/ADVERB,NEG. DEC.,,,,,,
|
||||||
|
204-2,EMP.PP.RB.INT.AFF,CLEFT SENTENCE FOCUSING ON PREPOSITIONAL PHRASE/ADVERB,AFF. INT.,,,,,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
204-3,EMP.PP.RB.INT.NEG,CLEFT SENTENCE FOCUSING ON PREPOSITIONAL PHRASE/ADVERB,NEG. INT.,,,,,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
205,EMP.what.CLEFT.AFF,PSEUDO-CLEFT SENTENCE: WHAT,(MAIN CLAUSE) AFF. DEC.,,,,,,what(+名詞句・代名詞)(+助動詞)+動詞(+名詞句・代名詞)+{be}+名詞句・代名詞のみから成る文に限定
|
||||||
|
205-1,EMP.what.CLEFT.NEG,PSEUDO-CLEFT SENTENCE: WHAT,(MAIN CLAUSE) NEG. DEC.,,,,,,what(+名詞句・代名詞)(+助動詞)+動詞(+名詞句・代名詞)+{be}+名詞句・代名詞のみから成る文に限定
|
||||||
|
206,CAUS.have.let.make,HAVE/LET/MAKE+NP+INFINITIVE,,A2.1,A2,,"B1, C2",,使役動詞はhave/let/makeに限定
|
||||||
|
207,CAUS.have.get_NP_VN,HAVE/GET+NP+PAST PARTICIPLE,AFF. DEC./NEG. DEC.,B2.2,B2,,B2,B1,Have you been ...?などを除外するため主語(+助動詞)またはtoに続くものに限定
|
||||||
|
208,CAUS.get_NP_VVG,GET+NP+PRESENT PARTICIPLE,,,,,C1,,
|
||||||
|
209,CAUS.ask.tell_NP_to_do,ASK/TELL+NP+to+INFINITIVE,,B1.1,B1,,B1-B2,,getはget+目的語と目的のto不定詞の結合が多いため除外
|
||||||
|
210,PERC.VI,FEEL/HEAR/SEE+NP+INFINITIVE,,,B2,,,,知覚動詞はfeel/hear/seeに限定;feelの場合原形不定詞がV.Pと誤認識されているものも多い
|
||||||
|
211,PERC.VG,FEEL/HEAR/SEE+NP+PRESENT PARTICIPLE,,,B2,,,,知覚動詞はfeel/hear/seeに限定
|
||||||
|
212,PERC.VN,FEEL/HEAR/SEE+NP+PAST PARTICIPLE,,,,,,,知覚動詞はfeel/hear/seeに限定
|
||||||
|
213,VG.P.AFF,PARTICIPIAL CONSTRUCTION: PRESENT PARTICIPLE,(SUBORDINATE CLAUSE) AFF. DEC.,B1.1,B1,,B2-C1,C1,カンマ後を除く文頭(相当)位置・途中に句読点なし・1~10語が後続した後にカンマがあるものに限定;動名詞主語の場
|
||||||
|
213-1,VG.P.NEG,PARTICIPIAL CONSTRUCTION: PRESENT PARTICIPLE,(SUBORDINATE CLAUSE) NEG. DEC.,,,,N/A,,カンマ後を除く文頭(相当)位置・途中に句読点なし・1~10語が後続した後にカンマがあるものに限定;動名詞主語の場
|
||||||
|
214,VN.P.AFF,PARTICIPIAL CONSTRUCTION: PAST PARTICIPLE,(SUBORDINATE CLAUSE) AFF. DEC.,,B2,,B1-B2,,カンマ後を除く文頭(相当)位置・途中に句読点なし・1~10語 が後続した後にカンマがあるものに限定;形容詞的過去分 詞が修飾する名詞が主語の場合あり;comeで始まる命令文 の誤認識が多い
|
||||||
|
214-1,VN.P.NEG,PARTICIPIAL CONSTRUCTION: PAST PARTICIPLE,(SUBORDINATE CLAUSE) NEG. DEC.,,,,N/A,,カンマ後を除く文頭(相当)位置・途中に句読点なし・1~10語が後続した後にカンマがあるものに限定;形容詞的過去分詞が修飾する名詞が主語の場合あり
|
||||||
|
215,SUBJ.PAST.AFF,CONDITIONAL: SECOND,(SUBORDINATE CLAUSE) AFF. DEC.,B1.2,B1,B1-C1,"A2-B1, B2",B2,名詞節を除外するため動詞が先行しないか文頭の位置に限定;過去完了を除外するため過去分詞・notが後続しないものに限定;単なる条件文も含まれる
|
||||||
|
215-1,SUBJ.PAST.NEG,CONDITIONAL: SECOND,(SUBORDINATE CLAUSE) NEG. DEC.,,,B1-C1,N/A,,名詞節を除外するため動詞が先行しないか文頭の位置に限定;過去完了を除外するため過去分詞・notが後続しないものに限定;単なる条件文も含まれる
|
||||||
|
216,SUBJ.PASTPF.AFF,CONDITIONAL: THIRD,(SUBORDINATE CLAUSE) AFF. DEC.,,B2,B1-C1,C1,B2,名詞節を除外するため動詞が先行しないか文頭の位置に限定
|
||||||
|
216-1,SUBJ.PASTPF.NEG,CONDITIONAL: THIRD,(SUBORDINATE CLAUSE) NEG. DEC.,,,B1-C1,B1,,名詞節を除外するため動詞が先行しないか文頭の位置に限定
|
||||||
|
217,SUBJ.PRS.AFF,DEMAND/INSIST/ORDER/PROPOSE/RECOMMEND/REQUIRE/SUGGEST+NP+INFINITIVE,(SUBORDINATE CLAUSE) AFF. DEC.,,B2,,,,動詞はdemand/insist/order/propose/recommend/require/suggestに限定
|
||||||
|
217-1,SUBJ.PRS.NEG,DEMAND/INSIST/ORDER/PROPOSE/RECOMMEND/REQUIRE/SUGGEST+NP+INFINITIVE,(SUBORDINATE CLAUSE) NEG. DEC.,,,,,,動詞はdemand/insist/order/propose/recommend/require/suggestに限定
|
||||||
|
218,SUBJ.wish_PAST,WISH+SECOND CONDITIONAL,(SUBORDINATE CLAUSE) AFF.DEC./NEG. DEC.,,,B2-C1,B1,B2,過去完了を除外するため過去分詞が後続しないものに限定
|
||||||
|
219,SUBJ.wish_PASTPF,WISH+THIRD CONDITIONAL,(SUBORDINATE CLAUSE) AFF.DEC./NEG. DEC.,,,B2-C1,B2,,
|
||||||
|
220,SUBJ.as_if.though_PAST,AS IF/THOUGH+SECOND CONDITIONAL,(SUBORDINATE CLAUSE) AFF.DEC./NEG. DEC.,,,,B1,B2,過去完了を除外するため過去分詞が後続しないものに限定
|
||||||
|
221,SUBJ.as_if.though_PASTPF,AS IF/THOUGH+THIRD CONDITIONAL,(SUBORDINATE CLAUSE) AFF.DEC./NEG. DEC.,,,,N/A,C1,
|
||||||
|
222,SUBJ.if_only_PAST,IF ONLY+SECOND CONDITIONAL,(SUBORDINATE CLAUSE) AFF.DEC./NEG. DEC.,,,C1,N/A,B2,過去完了を除外するため過去分詞が後続しないものに限定
|
||||||
|
223,SUBJ.if_only_PASTPF,IF ONLY+THIRD CONDITIONAL,(SUBORDINATE CLAUSE) AFF.DEC./NEG. DEC.,,,C1,B2、C2,,
|
||||||
|
224,SUBJ.if_should,IF+SHOULD (e.g. if it should rain tomorrow),(SUBORDINATE CLAUSE) AFF. DEC.,,,,C1,,名詞節を除外するため動詞が先行しないか文頭の位置に限定;従属節が否定の用法はない
|
||||||
|
225,SUBJ.INV.PAST,"INVERSION: SECOND CONDITIONAL (e.g. Were I in your place, ....)",(SUBORDINATE CLAUSE) AFF.DEC./NEG. DEC.,,,,,,カンマ後を除く文頭(相当)または接続詞直後の位置・途中に句読点なし・終止符で終わる文に限定
|
||||||
|
226,SUBJ.INV.PASTPF,"INVERSION: THIRD CONDITIONAL (e.g. Had I known it, ....)",(SUBORDINATE CLAUSE) AFF.DEC./NEG. DEC.,,,,,,カンマ後を除く文頭(相当)または接続詞直後の位置・途中に句読点なし・終止符で終わる文に限定
|
||||||
|
227,SUBJ.INV.should,INVERSION: CONDITIONAL WITH SHOULD (e.g. Should it rain tomorrow.....),(SUBORDINATE CLAUSE) AFF.DEC./NEG. DEC.,,,,C1,,カンマ後を除く文頭(相当)または接続詞直後の位置・途中に句読点なし・終止符で終わる文に限定
|
||||||
|
228,SUBJ.if_it_were_not_for,if it were not for ...,(SUBORDINATE CLAUSE) NEG. DEC.,,,,C2,,
|
||||||
|
229,SUBJ.were_it_not_for,were it not for ...,(SUBORDINATE CLAUSE) NEG. DEC.,,,,C2,,
|
||||||
|
230,SUBJ.if_it_hadn't_been_for,if it hadn't been for ...,(SUBORDINATE CLAUSE) NEG. DEC.,,,,C2,,
|
||||||
|
231,SUBJ.had_it_not_been_for,had it not been for ...,(SUBORDINATE CLAUSE) NEG. DEC.,,,,C2,,
|
||||||
|
232,INV.so_V_NP,INVERSION: so+BE/HAVE/DO/AUX+PERSONAL PRON,(PRECEDING SENTENCE) AFF. DEC.,,,,"B2, C2",B2,文頭(相当)または接続詞直後かつ文末の位置に限定
|
||||||
|
233,INV.neither._V_NP,INVERSION: neither/nor+BE/HAVE/DO/AUX+PERSONAL PRON,(PRECEDING SENTENCE) NEG. DEC.,,,,B2,B2,文頭・句読点直後・接続詞直後かつ文末の位置に限定;norはCCタグが付与されるがneitherは様々なタグが付与される
|
||||||
|
234,INV.never.etc,INVERSION: Hardly/Little/Never/No sooner/Scarcely/Seldom ....,NEG. DEC.,,,C1,"B2, C2",,文頭(相当)または接続詞直後の位置・終止符で終わる文に限定
|
||||||
|
235,INT.why,WH- QUESTION: Why ...?,AFF. INT./NEG. INT.,A1.2,A1,A1-(A2)-B1,A2-C1,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
236,INT.when,WH- QUESTION: When ...?,AFF. INT./NEG. INT.,,A1,A1,A2-C1,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
237,INT.who,WH- QUESTION: Who ...?,AFF. INT./NEG. INT.,B2.2,A1,B1,A2-C1,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
238,INT.whom,WH- QUESTION: Whom ...?,AFF. INT./NEG. INT.,,,,A2-C1,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
239,INT.what,WH- QUESTION: What ...?,AFF. INT./NEG. INT.,A1.1,A1,A1-B1,A2-C1,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
240,INT.what_N,WH- QUESTION: What N ...?,AFF. INT./NEG. INT.,,A1,A1,A2-C1,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
241,INT.which,WH- QUESTION: Which ...?,AFF. INT./NEG. INT.,,A2,,A2-C1,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
242,INT.which_N,WH- QUESTION: Which N ...?,AFF. INT./NEG. INT.,,,,A2-C1,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
243,INT.whose,WH- QUESTION: Whose ...?,AFF. INT./NEG. INT.,,,,A2-C1,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
244,INT.whose_N,WH- QUESTION: Whose N ...?,AFF. INT./NEG. INT.,,,,A2-C1,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
245,INT.where,WH- QUESTION: Where ...?,AFF. INT./NEG. INT.,A1.3,A1,,A2-C1,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
246,INT.how,WH- QUESTION: How ...?,AFF. INT./NEG. INT.,A1.1,A1,,A2-C1,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
247,INT.how_JJ.RB,WH- QUESTION: How ADJ/ADV ...?,AFF. INT./NEG. INT.,A1.1,A1,A1-(A2)-B1,N/A,A1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
248,INT.PREP_WH,WH- QUESTION: PREP what/which/whom/whose ...?,AFF. INT./NEG. INT.,,,,N/A,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
249,INTF.can_you,FUNCTIONAL QUESTION: Can you ...?,AFF. INT.,A2.1,A1,,A1-A2,A2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
249-1,INTF.can't_you,FUNCTIONAL QUESTION: Can't you ...?,NEG. INT.,,,,B1,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
250,INTF.could_you,FUNCTIONAL QUESTION: Could you ...?,AFF. INT.,,B1,,B1,A2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
250-1,INTF.couldn't_you,FUNCTIONAL QUESTION: Couldn't you ...?,NEG. INT.,,,,B1,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
251,INTF.will_you,FUNCTIONAL QUESTION: Will you ...?,AFF. INT.,,,,"A2-B2 ,C2",A2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
251-1,INTF.won't_you,FUNCTIONAL QUESTION: Won't you ...?,NEG. INT.,,,,B1,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
252,INTF.would_you,FUNCTIONAL QUESTION: Would you ...?,AFF. INT.,,A2,,A2,A2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
252-1,INTF.wouldn't_you,FUNCTIONAL QUESTION: Wouldn't you ...?,NEG. INT.,,,,B1,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
253,INTF.can_I,FUNCTIONAL QUESTION: Can I ...?,AFF. INT.,,A1,A1,A1,A2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
254,INTF.could_I,FUNCTIONAL QUESTION: Could I ...?,AFF. INT.,,,A1,B1,A2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
255,INTF.may_I,FUNCTIONAL QUESTION: May I ...?,AFF. INT.,,,,B1-B2,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
256,INTF.shall_I,FUNCTIONAL QUESTION: Shall I ...?,AFF. INT.,,,,A2,A2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
257,INTF.shall_we,FUNCTIONAL QUESTION: Shall we ...?,AFF. INT.,,,,A2,A2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
258,INTF.should_I,FUNCTIONAL QUESTION: Should I ...?,AFF. INT.,,,,A2,,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
259,INTF.why_don't_you,FUNCTIONAL QUESTION: Why don't you ...?,NEG. INT.,,,,"A2, B2",A2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
260,INTF.why_don't__we,FUNCTIONAL QUESTION: Why don't we ...?,NEG. INT.,,,,"A2, B2",A2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
261,INTF.why_not,FUNCTIONAL QUESTION: Why not ...?,NEG. INT.,,,,N/A,A2,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
262,INTF.how_about,FUNCTIONAL QUESTION: How about ...?,AFF. INT.,,,,N/A,B1,文頭(相当)または接続詞直後の位置・疑問符で終わる文に限定
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,62 @@
|
|||||||
|
// 校验 assets/courses 下的单元内容包并报告词池覆盖。
|
||||||
|
//
|
||||||
|
// dart run tool/courses/validate.dart # 报告错误和覆盖率
|
||||||
|
// dart run tool/courses/validate.dart --uncovered A1 # 列出未覆盖的词
|
||||||
|
// dart run tool/courses/validate.dart --levels A1-U01 # 打印条目的计算等级
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:kouyu_english/core/a0_core.dart';
|
||||||
|
|
||||||
|
import 'course_validator.dart';
|
||||||
|
|
||||||
|
void main(List<String> args) {
|
||||||
|
final validator = CourseValidator(
|
||||||
|
projectRoot: Directory.current,
|
||||||
|
a0Texts: [
|
||||||
|
// 去掉 [name] 这类槽位占位符,它们不是教过的词。
|
||||||
|
for (final item in a0CoreItems.values)
|
||||||
|
item.replaceAll(RegExp(r'\[[^\]]*\]'), ''),
|
||||||
|
for (final sentence in a0DictationSentences.values) sentence.sentence,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
final report = validator.validate();
|
||||||
|
|
||||||
|
for (final issue in report.errors) {
|
||||||
|
stdout.writeln('错误 $issue');
|
||||||
|
}
|
||||||
|
if (report.missingUnits.isNotEmpty) {
|
||||||
|
stdout.writeln('待编写 ${report.missingUnits.length} 个单元:'
|
||||||
|
'${report.missingUnits.first} … ${report.missingUnits.last}');
|
||||||
|
}
|
||||||
|
for (final coverage in report.coverage.values) {
|
||||||
|
stdout.writeln('${coverage.level} 词池覆盖 ${coverage.covered}/${coverage.poolSize} '
|
||||||
|
'(${(coverage.ratio * 100).toStringAsFixed(1)}%)'
|
||||||
|
'${coverage.unitsReady ? '' : ',单元未写完'}');
|
||||||
|
}
|
||||||
|
|
||||||
|
final uncoveredIndex = args.indexOf('--uncovered');
|
||||||
|
if (uncoveredIndex >= 0 && uncoveredIndex + 1 < args.length) {
|
||||||
|
final coverage = report.coverage[args[uncoveredIndex + 1]];
|
||||||
|
final byTopic = <String, List<String>>{};
|
||||||
|
for (final word in coverage?.uncovered ?? const <PoolWord>[]) {
|
||||||
|
byTopic.putIfAbsent(word.topic.isEmpty ? '(无主题)' : word.topic, () => [])
|
||||||
|
.add(word.headword);
|
||||||
|
}
|
||||||
|
final topics = byTopic.keys.toList()
|
||||||
|
..sort((a, b) => byTopic[b]!.length - byTopic[a]!.length);
|
||||||
|
for (final topic in topics) {
|
||||||
|
stdout.writeln('\n[$topic] ${byTopic[topic]!.length}');
|
||||||
|
stdout.writeln(byTopic[topic]!.join(', '));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final levelsIndex = args.indexOf('--levels');
|
||||||
|
if (levelsIndex >= 0 && levelsIndex + 1 < args.length) {
|
||||||
|
final levels = report.itemLevels[args[levelsIndex + 1]] ?? const {};
|
||||||
|
for (final MapEntry(:key, :value) in levels.entries) {
|
||||||
|
stdout.writeln('$key\t$value');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exitCode = report.errors.isEmpty ? 0 : 1;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user