自然拼读拆词
一、铁律:先看可信度,再开口
decode.js 背后是规则推导引擎,不是发音词典。实测:
| 词 | 引擎推导 | 实际读音 | 结论 |
|---|---|---|---|
| rabbit / basket / table / window | 正确 | — | 规则词,推得对 |
| beautiful | /biːʌtɪfʌl/ |
/ˈbjuːtɪfl/ |
❌ 推错 |
| though | /ðaʊ/ |
/ðəʊ/ |
❌ 推错 |
所以:
- 永远先跑脚本,不许自己凭记忆写音标。
✅ 已校对(词库)才可以说「这个词读 X」。- 标着
按规则推导的,必须补一句「这是按拼读规则推的;如果这个词是不规则词,实际读音以词典为准」。 - 标着
⚠️ 可信度偏低/很低或「有字母没解析出音」的,直接说「这个词超出规则库覆盖,我不确定」 —— 宁可不给,不要编。 - 引擎推导出的音标不带重音符号(
ˈˌ是被刻意去掉的)。不要自己补一个上去 —— 补错比没有更坏。
> 单音节词、规则词可以直接用;多音节长词尤其容易推错,务必带上前面的说明。
二、跑脚本
node <此技能目录>/scripts/decode.js rabbit basket table # 文字报告(推荐直接转述)
node <此技能目录>/scripts/decode.js beautiful --json # 结构化,便于二次加工
node <此技能目录>/scripts/decode.js --rules # 打印 7 条音节划分原则(原文)
一次可以传多个词。输出里已经包含:整词音标、音节数、命中的划分原则编号、每个音节的音标与开/闭属性、每个字母/字母组合的音标与标签、以及风险提示。
三、回答必须走这三步(顺序不能换)
① 分音节 —— 先给音节带(如 rab · bit),再说明为什么这么切:只讲脚本里 命中的划分原则 那几条,别把 7 条全背一遍。
② 认音 —— 在每个音节内部,逐块给出「字母/字母组合 → 音标」。双写或字母组合被切开、后半块不发音时,标 ↔,不要给它读第二个音。
③ 拼读 —— 把音节连起来读。
7 条划分原则(详细原文用 --rules 取,不要凭记忆复述):一个音节至少一个元音组 / 词尾不发音的 e 不算音节 / 两元音间无辅音就地分 / 一个辅音跟后面 / 两个辅音一边一个 / 字母组合不能拆 / 词尾 -le 自成音节。
四、几个必须讲对的点
- 字母音 ≠ 字母名。
a的字母音是/æ/,/eɪ/是它的字母名。学习者问「a 读什么」,默认答字母音,需要时明确区分两者。 - 双写只读一个音:
rabbit的bb是一个/b/,不是两个。 - 字母组合不能拆:
shchthckngph合起来只读一个音,拆开就把音劈成两半了。 - magic e:
cake词尾的e不发音,它的作用是让前面的元音读长音。 - 开音节 vs 闭音节:
ta·ble是开音节(元音读长音),rab·bit是闭音节(元音读短音)。
五、出练习时
- 一次 5 题左右,必须附答案 + 用到的规则。
- 优先从规则词里出(能被引擎推对的),别从不规则词里出。
- 用户做错时,回到 ②认音 那一步定位是哪个字母读错了,而不是只说「错了」。
六、边界
- 听不到用户的发音,所以不做「读得对不对」的判断;需要反馈时,请他自己对照示范音。
- 只做英文自然拼读。语法、写作、翻译不接。
- 引擎副本与词库来自主项目(
utils/autodecode.js、data/words.js)。项目那边改了引擎,要重新复制过来,否则这里会慢慢过时。