词典实用指南
把自己的词典导入 Lectern
Lectern 内置完整的英文 WordNet 数据库,长按即可查词。如果你想换一本词典——历史词典、专业术语表,或者 Lectern 没有内置的语言——把它转换成一个 JSON 文件导入即可。所有数据都留在你的设备上。
简短的答案
按照下面的示例做一个 JSON 文件,存到手机上任意位置,然后打开设置 → 词典与目录 → 导入词典文件并选中它。你的文件收录的词会替代内置释义;没收录的词仍然回退到 WordNet。
开箱即有的功能
阅读时长按一个词,Lectern 就会给出释义,不用离开页面,也不用联网。英文使用随应用打包的 Open English WordNet:约 152 000 个词,带义项、例句和同义词。日常阅读足够用了,所以当你需要 WordNet 给不了的东西时再导入词典:
- 历史词典,释义贴合你所读书籍的年代。
- 专业术语表——法律、医学、航海,或某个同人 wiki。
- 其他语言的词典,或译入你母语的双语词典。
文件格式
一个 JSON 文件,格式名为 lectern-dict-v1。完整格式如下:
{
"format": "lectern-dict-v1",
"language": "en",
"name": "Webster's 1913",
"entries": {
"abate": { "pos": "verb", "def": "Become less intense or widespread." },
"aberration": { "pos": "noun", "def": "A departure from the norm." }
}
}
| 字段 | 必填 | 作用 |
|---|---|---|
format | 否 | 如果存在,必须以 lectern-dict 开头,其他值一律拒绝。 |
language | 建议填写 | 该词典对应的基础语言代码(en、nl、zh…),决定哪些书使用它。缺失或无效时回退为 en。 |
name | 否 | 显示在设置里词数下方,方便你分辨当前加载的是哪个文件。 |
entries | 是 | 词 → { pos, def }。entries 为空对象会被拒绝。 |
键名请用小写。你长按的词在查询前会转成小写,但文件里的键会原样使用。所以 "Aberration" 这样的键永远匹配不上。顶层的未知字段会被忽略,来源数据里的 licence 或 version 字段可以放心保留。
去哪里找一本真正的词典
| 来源 | 规模 | 许可 |
|---|---|---|
| Webster's 1913 | 约 102 000 条,每条一段长释义 | 公有领域 |
| 维基词典提取(kaikki.org) | 数十万条,覆盖多数语言 | CC BY-SA |
| 你自己的词表 | 你写多少就有多少 | 归你 |
最省事的起点是公有领域的 Webster's 1913,它在 matthewreagan/WebstersEnglishDictionary 仓库里以“词 → 释义”的单个 JSON 文件发布。
一条命令完成转换
把下面的代码保存为 convert.py。它能把任何扁平的 { "word": "definition" } JSON 转成 Lectern 格式,顺带把键名转小写、把空白折叠。
import json, sys, re
src = json.load(open(sys.argv[1]))
out = {
"format": "lectern-dict-v1",
"language": "en",
"name": "Webster's 1913",
"entries": {
w.strip().lower(): {"pos": "", "def": re.sub(r"\s+", " ", d).strip()}
for w, d in src.items() if d.strip()
},
}
json.dump(out, open(sys.argv[2], "w"), ensure_ascii=False, separators=(",", ":"))
然后运行它,把结果拷到手机上:
python3 convert.py webster.json lectern-en-webster.json
这样会得到一个 24 MB、含 102 217 条词条的文件。Lectern 几秒钟就能读完并常驻内存,这个体量很轻松。更大的文件同样能用,只是在旧手机上更占内存——如果来源有几十万条,建议先筛一遍。
导入到 Lectern
- 把文件放到手机上。下载文件夹、云端硬盘、USB 线都行——只要安卓文件选择器能访问到。
- 打开设置。点击底部的设置,再展开词典与目录。
- 点“导入词典文件”。在文件选择器里选中你的 JSON。解析期间那一行会显示“正在读取词典…”。
- 看状态行。应该显示类似“102217 个词已加载 · 已导入文件”,下面是你写的
name。 - 打开一本书,长按一个词。弹窗现在显示的是你的释义,并标注用户导入的词典。
想恢复原状,点使用内置。这会删除你导入的所有词典,并恢复随应用内置的那几本。
其他语言的词典
导入按钮只有一个,对所有语言通用。真正决定文件归属的是 JSON 里的 language 字段——中文词典要写 "language": "zh"。之后 Lectern 会在识别为中文的书里使用它,不影响你的英文查词。每种语言可以保留一本导入的词典。
语言按基础代码匹配,所以标记为 en-GB 或 en-US 的书——Project Gutenberg 和 Standard Ebooks 里很常见——用的就是你的 en 词典。
常见问题的排查
“无法解析该文件”
文件不是合法 JSON,format 不是 lectern-dict 开头的值,或者 entries 为空。先校验 JSON:转换脚本遇到编码错误时常常会写出被截断的文件。
导入成功了,但查不到词
几乎总是大小写问题:键名必须是小写。用文本编辑器确认文件里是 "abate" 而不是 "Abate"。
某本书里我的词典没生效
Lectern 按书籍语言挑选词典。打开这本书的详情页看它识别成了哪种语言,再把词典的 language 字段改成一致。
释义太长了
历史词典常把所有义项塞进一段。弹窗可以滚动;如果你更想要短词条,就在转换脚本里先截断 def 再写文件。
关于词典导入的常见问题
导入词典会联网吗?
不会。文件会被复制到 Lectern 在你设备上的私有存储里,之后从那里读取。Lectern 的阅读功能完全离线运行。
我的词典会完全取代 WordNet 吗?
不会。你的文件对它收录的每个词优先生效;没收录的词仍然回退到内置的 WordNet,所以导入只会扩大覆盖面。
可以同时导入多本词典吗?
每种语言一本。再导入一本英文词典会替换掉前一本;导入中文词典则与英文的并存。
文件最大能多大?
24 MB、约 100 000 条的文件几秒即可导入,运行良好。再往上,限制来自旧设备的内存占用,而不是某个硬性上限。
能用 StarDict 或 DSL 词典吗?
不能直接用——Lectern 只读 lectern-dict-v1 JSON。多数格式都能用一段简短脚本转换,上面的转换脚本就是一个能跑通的起点。
继续阅读