词典实用指南

把自己的词典导入 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建议填写该词典对应的基础语言代码(ennlzh…),决定哪些书使用它。缺失或无效时回退为 en
name显示在设置里词数下方,方便你分辨当前加载的是哪个文件。
entries词 → { pos, def }entries 为空对象会被拒绝。

键名请用小写。你长按的词在查询前会转成小写,但文件里的键会原样使用。所以 "Aberration" 这样的键永远匹配不上。顶层的未知字段会被忽略,来源数据里的 licenceversion 字段可以放心保留。

去哪里找一本真正的词典

来源规模许可
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

  1. 把文件放到手机上。下载文件夹、云端硬盘、USB 线都行——只要安卓文件选择器能访问到。
  2. 打开设置。点击底部的设置,再展开词典与目录
  3. 点“导入词典文件”。在文件选择器里选中你的 JSON。解析期间那一行会显示“正在读取词典…”。
  4. 看状态行。应该显示类似“102217 个词已加载 · 已导入文件”,下面是你写的 name
  5. 打开一本书,长按一个词。弹窗现在显示的是你的释义,并标注用户导入的词典
Lectern 设置界面显示从名为 Webster's 1913 的导入文件加载了 102217 个词
状态行明确告诉你当前生效的是哪本词典、收录了多少词。
Lectern 阅读界面的长按弹窗,显示 Webster's 1913 对 dusk 一词的释义
长按任意词:释义来自你的文件,Lectern 也会如实标注。

想恢复原状,点使用内置。这会删除你导入的所有词典,并恢复随应用内置的那几本。

其他语言的词典

导入按钮只有一个,对所有语言通用。真正决定文件归属的是 JSON 里的 language 字段——中文词典要写 "language": "zh"。之后 Lectern 会在识别为中文的书里使用它,不影响你的英文查词。每种语言可以保留一本导入的词典。

语言按基础代码匹配,所以标记为 en-GBen-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。多数格式都能用一段简短脚本转换,上面的转换脚本就是一个能跑通的起点。

你的词,你的词典

导入一次,之后查任何词都不必离开页面,也不必联网。

下载自Google Play