Other

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

从「背单词」到「数据资产」:拆解 word-atlas 的开放词汇工程

项目背景与痛点

雅思词汇的门槛摆在那里:7,000 词以上才算进入安全区。围绕这块刚需,市面上已经形成两条路径,而这两条路径都有明显缺陷。

一条是 Anki 式的通用记忆工具——算法成熟,但要用户自己找卡组、做卡片、配音频,对非技术用户几乎是劝退门槛;另一条是百词斩、墨墨这类商业 App——图文和算法都做了,可词库闭源、数据锁在云端、核心能力藏在付费墙后。

真正缺的,是**「内容 + 算法 + 开放数据」三者同时具备**的产品。词光 · Word Atlas 切的就是这个缝隙:7,298 个雅思词条、英美双音、配图、FSRS 复习调度,代码开源,词库以 CC BY 4.0 释出。这个组合在国内词汇类项目里并不常见——多数团队愿意开源代码,但很少愿意把清洗好的数据集一并交出。

核心技术揭秘

这个项目最值得分析的地方,是它把系统拆成了静态数据层与客户端调度层两部分,中间几乎没有服务端。这种架构选择直接决定了它的成本结构和可分发性。

graph TD A[词库数据集<br/>7298 词 · CC BY 4.0] --> C[词条解析与索引] A --> B[静态资源层<br/>插图 · 英美双音频] C --> D[词条模型<br/>释义 · 例句 · 音标] B --> E[媒体懒加载器] D --> F[记忆状态存储<br/>卡片 DSR 状态] F --> G{"FSRS 调度器"} G -->|"已到期"| H[生成今日复习队列] G -->|"未到期"| I[顺延至下个评估点] H --> J[学习界面渲染] E --> J J --> K[用户四档评分] K --> L[重算难度与稳定性] L --> F

数据流的骨架很清楚:词库是只读的,记忆状态是唯一可变的本地数据。前者可以打包进构建产物交给 CDN,后者落在浏览器侧的 IndexedDB 或本地存储里。这意味着应用天然可离线,服务端成本接近于零,也意味着——多设备同步这件事,项目本身大概率没有解决,得靠用户自己补。

真正的技术核心在 G 那个菱形节点。FSRS(Free Spaced Repetition Scheduler)基于 DSR 三元模型:难度 D、稳定性 S、可提取性 R。它用一条带衰减的幂函数刻画遗忘曲线,也就是 R = (1 + FACTOR·t/S)^DECAY,每次用户给出「重来 / 困难 / 良好 / 简单」四档反馈后,反向更新 D 与 S;其中 S 的增长不是线性叠加,而是随复习间隔呈现饱和趋势。

相比 Anki 沿用的 SM-2(靠一个 E-Factor 简单调整间隔),FSRS 的优势在于把「这次记得牢不牢」和「这个单词本身有多难」拆成了两个独立变量,并通过大规模复习日志拟合出全局参数。对 7,000 量级的词表来说,这种区分很关键:抽象词和具体词的遗忘速率本就不同,用同一套倍率粗暴放大间隔,复习队列会迅速失真。

功能亮点与差异

第一,数据集本身就是产品。 CC BY 4.0 意味着它不只能被这个 App 消费——可以导进 Anki、可以做教研词表分析、可以喂给别的记忆类应用。这是绝大多数竞品做不到的开放度,也是这个项目真正的护城河。

第二,图文音三位一体。 配图触发双编码记忆,英美双音覆盖听力口音差异,这两项通常被拆散在不同工具里:词典有音无调度,Anki 有调度无图。

第三,调度与内容解耦。 只要换一份词表,同一套复习引擎就能迁移到四六级、考研、日语 JLPT——架构上的可复用性比功能列表更有价值。

应用场景与落地建议

适合三类人:一是备考者本人,当作轻量离线工具直接上手;二是教育机构或独立开发者,把它当作词汇类产品的底座二次开发;三是教研与数据团队,拿词库做难度分级、例句质量分析。

真正投入生产前,有三点必须提前想清楚:

  • FSRS 参数需要校准。 通用默认参数只是起点,若面向真实用户,应当采集评分日志做参数优化,否则调度精度会打折扣。
  • 媒体资源的体积与流量。 7,000 词条配图加双音频,包体与带宽都不是小数目,务必做懒加载与分级缓存,别一次性全量预载。
  • CC BY 4.0 的署名义务。 商用或衍生分发时必须标注来源与许可,这是法律义务,不是礼貌。

综合评价

优点:数据开放度罕见,算法选型踩在当前最优解上,架构轻到几乎没有运维负担,图文音的组合解决了单纯背单词的记忆效率问题。

缺点:缺少跨设备同步与后端能力,重度用户会感到局限;词条质量依赖人工校对,长期维护成本藏在暗处;FSRS 的参数调优对普通用户是黑盒,学习曲线不如商业产品平滑。

一句话总结:这不是又一个「背单词 App」,而是一套可以被别人拿去继续盖楼的开放词汇基础设施。它的上限不取决于自己做了多少功能,而取决于社区愿意在这份数据上叠加多少东西。

关于

GitHub 原始描述(英文)

词光 · Word Atlas — Illustrated IELTS vocabulary with 7,298 words, UK/US audio and FSRS review. Open-source app + CC BY 4.0 dataset.

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

简要分析

热度分
6197
价值分
2877
活跃状态
活跃

语言占比

CSS
HTML
JavaScript
Python
Shell
TypeScript

贡献者

README

词光 Word Atlas — 一词一画,点亮雅思

词光 · Word Atlas

把单词变成画面,让复习有迹可循。

7,298 个雅思词条 · 原创插画 · 英美发音 · FSRS 间隔复习

立即体验 ↗  /  48 秒介绍  /  下载词库  /  English

Code: MIT Dataset: CC BY 4.0


词光 iOS App 测试版已开放,免费下载:api.billswise.cn/app

关注 @yangleiocx3

请我喝杯咖啡

这个项目开源,又免费,我自己投了很多钱和时间。觉得有用的话,请我喝杯咖啡吧。

微信赞助二维码
微信
支付宝赞助二维码
支付宝

词光是一款以插画和语境为核心的雅思背词应用。看画面理解词义,听发音建立联系,再用主动回忆和间隔复习巩固记忆。无需账号,学习进度保存在自己的设备上。

版本说明:这个仓库提供词光的开源基础版及配套数据集。在线网站独立迭代,功能与仓库可能不同;仓库里的代码和内容分别遵循下方的 MIT / CC BY 4.0 授权。

产品预览 · 学习方式 · 本地运行 · 开放数据 · 参与贡献

产品预览

一本可以听、可以练的单词图鉴

开源版桌面图鉴:插画词卡和词汇浏览
手机端今日学习页 手机端词卡,展示插画、英美发音与例句
每日计划,把注意力放在今天插画、词义、发音,在一张词卡里

以上为仓库开源版的实际界面。页首为品牌概念插画。

学过的词,汇成自己的星图

词汇星图界面:按话题组织单词,展示学习进度

19 个话题组成词汇星图。拖动旋转、滚动缩放,点击星星打开词卡;学习状态用不同亮度呈现。采用 WebGL2 渲染,不支持的设备提供降级显示。

看 48 秒宣传片

点击观看词光宣传片

播放完整视频(含声音)

学习方式

环节 你会做什么
看见 每个词配一幅插画、中英释义、两条原创例句,以及搭配、词族和用法提示。
听见 切换英音、美音,听日常例句朗读;部分词条另含第二条例句录音。
想起 看义选词、看图补句、听音辨词、拼写,逐步练习主动回忆。
复习 FSRS 根据学习记录安排复习,目标记忆率可调。只有首次作答计入正确率。
积累 星图展示学习进度;打字练习独立统计;支持导出和恢复本地进度。

本地优先。 无需注册;看过的词条与媒体可缓存供离线使用。换设备前,请先导出进度备份。

听发音、例句与环境声样本

拿 abandon 举例,点开就能听(在线播放):

🇬🇧 英音 abandon /əˈbændən/
🇺🇸 美音 abandon /əˈbændən/
📖 例句朗读 We had to abandon our car in the snow.

全部 7,298 个词都有英音、美音和例句朗读,还有 1,011 个重点词的第二条例句也配了朗读。

环境声与交互声音

🎙 开屏配音 「欢迎打开雅思大门」:星尘汇聚成“词光”,大门打开
🌌 星图配音 「这是你的词汇星图。每学会一个词,就点亮一颗星。」
🎵 星空音乐 一段可无缝循环的原创配乐,默认陪你背词
🌧 6 段环境声 雨天图书馆 · 清晨海岸 · 林间早晨 · 夜晚壁炉 · 远航船舱 · 安静咖啡馆
✨ 界面音效 答对、答错、翻卡、打字、连胜、点亮星星……每个操作都有自己的声音;读单词时背景音会自动压低

全部素材都在仓库里:插画在 public/atlas/img/,录音在 public/atlas/audio/,这两类按 CC BY 4.0 开放;界面声音和配乐在 public/sfx/,随应用一起提供。

本地运行

需要 Node.js 20+ 和 npm。仓库含完整图片与录音,首次下载可能较久。

git clone --depth 1 https://github.com/designfuchen/word-atlas.git
cd word-atlas
npm ci
npm run dev

打开 http://localhost:5188。

npm test             # 单元测试
npm run check:atlas  # 词库结构与媒体校验
npm run build        # 构建到 dist/

子路径部署:ATLAS_BASE=/words/ npm run build。完整说明见 部署文档。

技术栈:React 19 · TypeScript · Vite · ts-fsrs · WebGL2

开放数据

不仅可以直接使用应用,也可以把词库用于自己的学习工具、Anki 牌组或研究项目。

资源 开源版内容 入口
词条 7,298 条,CEFR A1–C2、19 个话题 JSON · CSV
例句 14,596 条,日常与雅思语境,附中文翻译 字段说明
插画 7,298 幅,512 px WebP,另有缩略图 图片目录
录音 22,905 段,英音、美音与例句朗读 音频目录
import json
from pathlib import Path

words = json.loads(Path("data/word-atlas.json").read_text(encoding="utf-8"))
b2_environment = [w for w in words if w["cefr"] == "B2" and w["topic"] == "environment"]
查看一条词条的数据结构
{
  "id": "principle",
  "w": "principle",
  "uk": "/ˈprɪnsəpəl/",
  "us": "/ˈprɪnsəpəl/",
  "senses": [{ "pos": "n.", "zh": "原则;行为准则", "en": "A belief or rule that guides decisions and behaviour." }],
  "ex": [
    { "en": "I refused the extra money as a matter of principle.", "zh": "出于原则,我拒绝了那笔额外的钱。" },
    { "en": "The principle of equal opportunity should guide policies designed to improve access to higher education.", "zh": "…" }
  ],
  "col": ["in principle|原则上", "basic principle|基本原则"],
  "fam": ["principled (adj.)"],
  "tip": "principle 是原则;principal 是校长、主要的。",
  "cefr": "B2",
  "topic": "thinking"
}

内容来源与局限

释义、例句、插画和录音为本项目生成:文字与插画使用生成式 AI,语音使用 ElevenLabs。内容经过自动结构与一致性校验,尚未逐条人工审校,可能出现释义、例句、插画或发音错误。它不是官方雅思词表,也不承诺提分。

内容生成流程 · 记忆模型 · 生成脚本

参与贡献

发现问题时,请附上词条 ID、复现步骤和预期结果。内容纠错如有词典或其他可靠依据,也请一并提供。

授权

范围 许可
应用代码 MIT
词库文本、插画与词条录音 CC BY 4.0,署名 Word Atlas contributors(词光)
第三方依赖与字体 遵循各自许可,详见相应文件

由 @designfuchen 制作。产品进展与制作过程见 X · @yangleiocx3。

如果词光对你有用,欢迎 Star,或把它分享给正在学英语的朋友。

评论

暂无评论