| name | daggerheart-json-formatter |
| description | Identify the type of a translated Daggerheart text and format it into JSON according to template.md. |
Daggerheart JSON Formatter
将翻译后的中文 Daggerheart 文本识别类型并转换为结构化 JSON。严格按照 examples/template.md 中的模板格式输出。
工作流
- 识别内容类型 — 分析译文,确定是领域卡、武器、护甲、社群、种族、主职、子职、敌人还是环境
- 参考模板 — 打开
examples/template.md,使用该类型的精确 JSON schema
- 提取并映射 — 从译文提取数据,映射到模板字段
- 输出有效 JSON — Markdown 代码块包裹,单个实体输出对象,多个实体输出数组,保持源顺序
提取策略
优先手动提取。 文档中总会有 OCR 错误、标题层级混乱等格式异常,强行使用自动化工具反而容易出错。逐块读取相关原文, 然后根据模板手动构造JSON. 一次只读一段/一个种类的原文进行构造, 不要强行一次读全文.
批量提取用脚本。 当译文格式一致、实体数量大(如数百张敌人卡),应编写 Python 提取脚本,通过正则解析 Markdown 结构批量生成 JSON。脚本提取的关键经验:
- 遇到格式错误导致脚本失败时, 与其修改复杂的正则与特殊情况, 不如直接修改原文的格式使其统一
- 按实体边界标题(
## )分割,排除 ## **特性**、## **特殊** 等子章节标题
- 用
utf-8-sig 读文件避免 BOM 干扰
- 英文名正则
(.+?)\s*([A-ZÀ-ÿ].+)$ 处理 : () 重音字符和无空格边界
- 提取后验证:实体数量、英文残留、特性/武器字段是否缺失
字段映射规则
- 键名:严格使用模板中的字段名(
"名称" "原文" "类型" "特性" 等)
- 必填与选填: 必填的键名只有"名称","类型","描述"三者, 其余皆为选填
- 缺失数据:使用
"无" / "-" 或空数组 [],不要编造
- 数据类型:模板中是字符串就用字符串(如
"12" 而非 12)
- 特性数组:每个特性包含
"名称" "原名" "类型" "特性描述"
- 类别一致性:
"类型" "种类" 等分类字段只保留核心类别,不混入修饰符。如源文中 (2) - 被动 → "类型": "被动",修饰符 (2) 放到 "名称" 字段中
格式保留
- 机制语法保留原样:
**花费 1 恐惧点**、*脆弱*
- 特性类型标签(被动/动作/反应)映射正确
格式转换
SKILL 输出的 JSON 为 zzz 格式(扁平列表,每张卡一个独立条目)。如需其他格式,使用 scripts/ 下的脚本转换:
| 脚本 | 用途 |
|---|
scripts/zzz2rrr.py | zzz 格式 ↔ rrr 格式(各实体类型分组打包)。用法:python zzz2rrr.py <输入.json> --zzz(zzz→rrr)或 --rrr(rrr→zzz),也支持 .dhcb |
scripts/zzz2keyword.py | zzz/rrr 格式 → SealChat 术语表关键词列表。用法:python zzz2keyword.py <输入.json>,输出 _keyword.json |
需要时才转换,一般不需要。不需要依赖。
边界
有模板就按模板提取。规则书、背景、叙事文本等非卡牌内容保留 Markdown,不强行结构化。不臆造字段。