commit 48a7ea66d8cb317b56c732eca19278f71912ec79 Author: OpenClaw Bot Date: Tue Apr 7 12:36:35 2026 +0800 auto-sync: contextual-word-allocation 2026-04-07_12:36 diff --git a/SKILL.md b/SKILL.md new file mode 100644 index 0000000..3062fd4 --- /dev/null +++ b/SKILL.md @@ -0,0 +1,111 @@ +--- +name: contextual-word-allocation +description: > + 儿童教育游戏动画剧本的情境化选词工具。将词库(Excel/列表)中的单词知识点, + 按照故事情境(而非词义类别)分组,分配至每个Unit的Lesson中, + 使每个Lesson的4个单词能自然地支撑一个贴近日常的小故事情境。 + + **触发场景:** + (1) 用户提供单词表(含单词/词性/词义)和Unit故事背景设定 + (2) 需要将词库拆分为每4词一组的情境化分配方案 + (3) 需要给出情境名称(≤6字)和聚合理由 + (4) 用户提到「情境化选词」「单词分配」「词库分组」「Lesson选词」 +--- + +# 情境化选词工作流 + +## 核心概念 + +**情境化选词 ≠ 词义分类** +- ❌ 传统:blue/red/yellow/pink → 【颜色】 +- ✅ 情境化:autumn/leaf/yellow/orange → 【秋季拾叶】(配秋天捡落叶做艺术品的故事) + +词汇从属于情境,情境服务于故事,故事符合儿童日常体验。 + +## 输入规格 + +1. **词库文件**(Excel/列表):包含 `单词 | 词性 | 词义 | 原始主题分类` +2. **Unit背景设定**:每个Unit的故事一句话概要、关键剧情、出场角色 +3. **分配规格**:Units数量 × 5 Lessons/Unit × 4词/Lesson = 总词数 + +## 工作流程(5步) + +### Step 1:词库预处理 +- 读取词库文件,提取全部词条(含词性,同词多词性视为独立词条) +- 统计虚词(adv/pron/det/prep)数量 +- 验证:总词数 = Units × 5 × 4 + +### Step 2:虚词规划 +每Unit需含 **2-3个虚词**。先均衡分配虚词到各Unit,再填充实词。 +- 规划公式:虚词总数 / Units数 ≈ 每Unit虚词配额 +- 调整原则:与Unit故事情境自然契合的虚词优先分配(如ago=「以前」适合「收到旧包裹」的情节) +- 记录虚词分配表,后续Step 4严格遵守 + +### Step 3:主题-Unit映射 +对照Unit故事背景,将词库中天然契合该Unit主题的词群预标注: +- 扫描词义/原始主题,找出与Unit场景强相关的词 +- 避免强行「凑主题」——无强关联的词可放入暂空池(若有) + +### Step 4:逐Lesson分配(核心步骤) +每组4词需同时满足: +1. **≥3词与本Lesson角色行为/话题强相关**(第4词可为虚词或弱关联词) +2. **4词共同指向同一个生活化情境**(可用一句话描述这个场景) +3. **虚词自然嵌入**,不显突兀 + +分配顺序建议: +1. 先锁定Lesson核心情境(来自Unit故事) +2. 找3个与情境强相关的实词 +3. 从该Unit的虚词配额中选1个最契合的虚词补位 +4. 若虚词已配完,可用弱关联实词补位 + +### Step 5:全局验证 +分配完成后必须执行: +- [ ] 总词条数 = 预期数(无遗漏) +- [ ] 无重复(每个词条仅出现一次) +- [ ] 每Unit虚词数量在2-3范围内 +- [ ] 所有Unit虚词合计 = 词库虚词总数 + +## 输出格式 + +每个Lesson输出: +``` +| Lesson编号 | 情境名称(≤6字) | 单词1(词性,词义) 单词2 单词3 单词4 | 聚合理由(说明4词如何共同构建一个情境)| +``` + +按Unit分组,表格形式呈现。 + +## 质量标准 + +**好的情境聚合(符合以下特征):** +- 4词放在一起,能在脑海中浮现一个具体场景画面 +- 虚词的用法在情境里是自然的(孩子能感受到它的意思) +- 情境贴近5-9岁儿童日常,符合「低风险高情绪」原则 +- 4词组合能支撑完整的有故事感的Lesson剧本,而非仅组成单一静态画面 +- 名词和动词形成天然的动作链环(如pencil/write/paper/eraser),符合真实场景逻辑 + +## 强制选词规范(出现以下任一情况必须重新分组) +### 1. 词性/词义唯一性规则 +- ❌ 同一Lesson中出现同一拼写但不同词性/词义的单词(如answer(n,答复)和answer(v,回答)、phone(v,打电话)和phone(n,电话)) +- ❌ 同一Lesson中出现同义词/近义词(如apartment和flat、shop和store、go to bed和go to sleep、say/speak/talk同类动词并列),不做同义词辨析 +- ❌ 同一Lesson中同一单词多义多词性交替出现(如try(n,尝试)和try(v,尝试)同时出现) +- ❌ 多义词未使用指定单一词义(如lime使用"lime色"而非指定的"酸橙"词义) + +### 2. 词义搭配规则 +- ❌ Lesson内出现4个意义完全并列的同词性词(如4个形容词、4个名词、3个动词并列),禁止单纯词义分类聚合 +- ❌ 词义可成对对应的词未成对出现(如these和those、good和bad、smart和silly需成对出现方便区分教学) +- ❌ 同组词汇不属于同一实际场景,存在场景冲突(如table tennis和tennis racket同组、armchair/bookcase/lamp搭配dining room而非living room) +- ❌ 关联词汇无强逻辑联系(如crocodile和evening同组但无"鳄鱼为夜行动物"的逻辑支撑) +- ❌ 中英词汇词性不对应(如Chinese和English同组时,一个是名词一个是形容词) + +### 3. 故事适配规则 +- ❌ 4词仅能组成单一静态画面,无法支撑有故事感的Lesson剧本 +- ❌ 动词使用不符合语法规则(如wear(v,穿着)一般现在时表日常穿着,未构建对应日常情境) +- ❌ 词汇选择不符合角色人设和剧情设计(如速猴登场场景未使用motorbike相关词汇) +- ❌ 出现干扰故事聚焦的无关词汇(如不需要mother角色的故事中出现mother词汇) + +## 注意事项 + +- 同拼写不同词性/词义的词,视为独立词条,禁止放入同一Lesson +- 暂空池Unit(若有)用于放置其余Unit塞不下的词,词汇选择灵活度最高 +- 分配草稿完成后,等待用户逐Unit微调,不要急于输出剧本正文 +- 所有分组需满足上述强制规范,如有违反必须重新调整 diff --git a/references/workflow-example.md b/references/workflow-example.md new file mode 100644 index 0000000..2906911 --- /dev/null +++ b/references/workflow-example.md @@ -0,0 +1,65 @@ +# 情境化选词工作示例 + +## 实际案例:L1-S2 U17~U24(2026-04-03) + +### 基本参数 +- 词库:160词条(含虚词18个) +- 分配目标:8 Units × 5 Lessons × 4词 = 160词 +- 虚词分布:U17×2, U18×2, U19×2, U20×3, U21×2, U22×2, U23×3, U24×2 = 18 ✓ + +### 虚词统计与分配示例 + +词库中共18个虚词(adv/pron/det/prep): + +| 虚词 | 词性 | 词义 | 分配Unit | 分配理由 | +|------|------|------|---------|---------| +| ago | adv | 以前 | U17-L1 | 包裹数年前寄出,ago天然嵌入「时间跨越」情境 | +| home | adv | 回家/在家 | U17-L4 | 速猴行为神秘,主角回home,自然收尾 | +| early | adv | 早地 | U18-L1 | 上学场景,early早起天然匹配 | +| now | adv | 现在 | U18-L3 | 课堂进行中,now强调当下 | +| again | adv | 再一次 | U19-L2 | 再试一次完成任务,again语义完全贴合 | +| like | prep | 像 | U19-L3 | 打比方情境,like作比喻连接词 | +| a lot | adv | 非常 | U20-L3 | 乒乓球a lot地弹跳,副词修饰动作 | +| many | det | 许多 | U20-L1 | 运动会many项目,限定词描述规模 | +| very | adv | 非常 | U20-L1 | 运动会very exciting,强调程度 | +| some | det | 一些 | U21-L1 | 迷路学者ask有没有some水 | +| these | det | 这些 | U21-L2 | 搭基地时「把these材料add进去」 | +| a lot of | det | 大量的 | U22-L1 | 速猴备好a lot of糖果诱惑孩子 | +| a lot | pron | 大量 | U22-L4 | 蜡烛仪式,a lot of children聚集 | +| lots | adv | 非常 | U23-L1 | 假镇长发布lots of奇怪命令 | +| lots | pron | 大量 | U23-L3 | 还有lots of证据要查 | +| really | adv | 真正地 | U23-L2 | 「这person really是镇长吗?」 | +| one | det | 一个 | U24-L4 | one by one分配任务 | +| those | det | 那些 | U24-L3 | those圆球机器人所需的零件 | + +### 词库预处理脚本参考 + +读取Excel词库时的Python核心逻辑: +```python +import openpyxl +wb = openpyxl.load_workbook('wordlist.xlsx') +ws = wb['单词表'] +words = [] +for row in ws.iter_rows(min_row=2, values_only=True): + word, pos, meaning, theme = row[1], row[2], row[3], row[4] + if word: + words.append((word, pos, meaning, theme)) +virtual = [(w,p,m,t) for w,p,m,t in words if p in ('adv','pron','det','prep')] +``` + +### 验证脚本参考 + +```python +used = {} +def assign(word, pos, unit, lesson): + key = (word, pos) + if key in used: + print(f"DUPLICATE [{unit}-{lesson}]: {word}({pos}) -- already in {used[key]}") + return False + used[key] = f"{unit}-{lesson}" + return True + +# 分配完成后验证 +remaining = ALL_WORDS_SET - set(used.keys()) +assert len(remaining) == 0, f"Missing words: {remaining}" +```