Skip to content

Nucleon 文件格式协议规范

概述

Nucleon 是 HeurAMS 软件项目使用的基于 TOML 的专有源文件格式, 用于存储结构化学习内容, 如内容, 翻译, 注释, 以及推荐的内置学习方案 (orbital) 等.

本文档定义了 Nucleon v2 版本 (被 HeurAMS 0.4.x 支持) 的文件结构和字段含义.

附上版本参照:

Nucleon 版本HeurAMS 版本说明
v00.1.x - 0.2.9早期原型验证, 直接基于 json, 无文档
v10.3.0 - 0.3.9被 0.3.x 使用, 分词内容直接作为键名, 字段键名硬编码, 有限的元数据支持, 无文档
v2 (最新)0.4.0 - latest被最新版本使用, 定义式字段键名, 参与记忆策略与界面控制, 元数据完整, 有文档
v2dprototype动态式内容生成版本格式, 测试中

MIME 标识

使用的 MIME 标识符:

application/vnd.xyz.imwangzhiyu.heurams-nucleon.<版本(含 "v" 字母)>+toml

例如

application/vnd.xyz.imwangzhiyu.heurams-nucleon.v2+toml

文件头与元数据

["__metadata__"]

根级元数据表, 包含文件的全局信息.

["__metadata__.attribution"]

版权与归属信息:

字段说明示例
author作者标识"__heurams__"
group内容分类"高考古诗文"
name内容名称"过秦论"
license版权协议"CC-BY-SA 4.0"
desc内容描述"高考古诗文 - 过秦论"

["__metadata__.annotation"]

内容字段的键名注册与标注, 将在辨认 (recognition) 界面作为键名的显示字段呈现.

作为例子, 以下是 "建议的古诗文内容单元结构" 的示例说明:

字段说明
note笔记
keyword_note关键词翻译
translation语句翻译

["__metadata__.config"]

文件配置:

字段说明示例
delimiter内容分隔符"/"

["__metadata__.presentation"]

内容展示配置:

字段说明
primary主要展示字段, 如 ["content"], 此数组应只含有唯一元素
secondery次要展示字段, 如 ["keyword_note", "note"]
top_dim顶部展示字段, 如 ["translation"]

["__metadata__.orbital"]

内置学习方案配置, 完整规范请参阅 orbital, 以下是简明文档:

字段说明
quick_review快速复习方案, 如 [["cloze", 1], ["mcq", 0.5], ["recognition", 1]]
recognition识别训练方案
final_review最终复习方案

[["cloze", 1], ["mcq", 0.5], ["recognition", 1]] 中, 子数组的第一项是谜题名称, 第二项是出现概率 (小于 1 时), 和出现次数 (大于等于 1 时), 出现顺序依从主数组元素顺序.

["__metadata__.orbital.puzzle_config"]

谜题生成配置:

字段说明
cloze填空题来源字段, 如 { from = "content" }
mcq选择题来源字段, 如 { from = "keyword_note" }

内容单元结构

每个内容单元以任何唯一标识符 (可以使用原文句子) 作为表名, 例如:

toml
["秦孝公据崤函之固, 拥雍州之地,"]

注意: 内容单元的排序与表名无关, 而是按照文件自上到下顺序排序, 因此 nucleon 并不是标准的 TOML, 还请其他客户端的开发者注意.

对于所含字段, 完全可以自定义, 因为字段的使用范围已在上文元数据 (metadata) 处定义, 类型会被自动推导, 但建议使用 content 作为 "主值".

建议的古诗文内容单元结构

对于每个单元包含以下字段:

字段类型说明
notearray[string]笔记列表, 可空
contentstring分词后的原文, 使用分隔符
translationstring整句翻译
keyword_notetable[string -> string]关键词与翻译的映射

注意: 句末应拥有分隔符, 否则将不会将最后一个分隔符后的内容计入分词

示例内容单元

toml
["秦孝公据崤函之固, 拥雍州之地,"]
note = ["点明秦国崛起之初所拥有的地理优势", "给出秦国能够后来统一六国的重要基础"]
content = "秦孝公/据/崤函/之固/, 拥/雍州/之地,/"
translation = "秦孝公占据着崤山和函谷关的险固地势, 拥有雍州的土地,"
keyword_note = {"据" = "占据", "崤函" = "崤山和函谷关", "雍州" = "古代九州之一"}

完整的文件示例

toml
# 过秦论.toml

["__metadata__"]
["__metadata__.attribution"] # 版权元信息
author = "__heurams__"
group = "高考古诗文"
name = "过秦论"
license = "CC-BY-SA 4.0"
desc = "高考古诗文 - 过秦论"

["__metadata__.annotation"] # 键批注
note = "笔记"
keyword_note = "关键词翻译"
translation = "语句翻译"

["__metadata__.config"] # 文件配置
delimiter = "/"

["__metadata__.presentation"] # 内容单元展示配置
primary = ["content"]
secondery = ["keyword_note", "note"]
top_dim = ["translation"]

["__metadata__.orbital"] # 内置的推荐学习方案
quick_review = [["cloze", 1], ["mcq", 0.5], ["recognition", 1]]
recognition = [["recognition", 1]]
final_review = [["cloze", 0.7], ["mcq", 0.7], ["recognition", 1]]

["__metadata__.orbital.puzzle_config"]
cloze = { from = "content"}
mcq = { from = "keyword_note" }

["秦孝公据崤函之固, 拥雍州之地,"]
note = []
content = "秦孝公/据/崤函/之固/, 拥/雍州/之地,/"
translation = "秦孝公占据着崤山和函谷关的险固地势,拥有雍州的土地,"
keyword_note = {"据"="占据", "崤函"="崤山和函谷关", "雍州"="古代九州之一"}

["君臣固守以窥周室,"]
note = []
content = "君臣/固守/以窥/周室,/"
translation = "君臣牢固地守卫着,借以窥视周王室的权力,"
keyword_note = {"窥"="窥视"}

["有席卷天下, 包举宇内, 囊括四海之意, 并吞八荒之心."]
note = []
content = "有/席卷/天下/, 包举/宇内/, 囊括/四海/之意/, 并吞/八荒/之心./"
translation = "有席卷天下,包办天宇之间,囊括四海的意图,并统天下的雄心。"
keyword_note = {"席卷"="像卷席子一样全部卷进去", "包举"="像打包一样全部拿走", "囊括"="像装口袋一样全部装进去", "八荒"="八方荒远之地"}

["当是时也, 商君佐之,"]
note = []
content = "当是时也/, 商君/佐之,/"
translation = "正当这时,商鞅辅佐他,"
keyword_note = {"商君"="商鞅"}

["内立法度, 务耕织, 修守战之具,"]
note = []
content = "内/立法度/, 务/耕织/, 修/守战/之具,/"
translation = "对内建立法规制度,从事耕作纺织,修造防守和进攻的器械;"
keyword_note = {"法度"="法规制度", "务"="从事", "耕织"="耕作纺织", "守战之具"="防守和进攻的器械"}

["外连衡而斗诸侯."]
note = []
content = "外/连衡/而斗/诸侯./"
translation = "对外实行连衡策略,使诸侯自相争斗。"
keyword_note = {"连衡"="连横策略", "斗"="使...相斗"}

["于是秦人拱手而取西河之外."]
note = []
content = "于是/秦人/拱手/而取/西河/之外./"
translation = "因此,秦人轻而易举地夺取了黄河以西的土地。"
keyword_note = {"拱手"="两手相合,形容毫不费力", "西河"="黄河以西地区"}