辞書の実践ガイド

自分の辞書を Lectern に取り込む

Lectern には長押しで引ける英語の WordNet データベースがまるごと入っています。別の辞書を使いたいとき——古い時代の辞書、専門用語集、あるいは同梱されていない言語の辞書——は、JSON ファイル1つに変換して取り込めます。データはすべて端末の中だけで完結します。

短い答え

下の例のような JSON ファイルを作り、スマホの好きな場所に置いて、設定 → 辞書とカタログ → 辞書ファイルをインポートから選ぶだけです。ファイルに載っている語は内蔵の語義の代わりに表示され、載っていない語はこれまでどおり WordNet が使われます。

最初から入っているもの

読書中に語を長押しすると、ページを離れることもオンラインにつなぐこともなく語義が出ます。英語にはアプリ同梱の Open English WordNet を使い、約 152 000 語を語義・用例・類義語つきで収録しています。ふだんの読書にはこれで十分なので、WordNet では足りないときに辞書を取り込んでください:

  • 読む本の時代に語義が合う古い辞書
  • 専門用語集——法律、医学、航海、ファンダムの wiki など。
  • 別の言語の辞書、または自分の言語に訳す二か国語辞書。

ファイル形式

lectern-dict-v1 という名前の JSON ファイル1つです。形式はこれで全部です:

{
  "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推奨この辞書が対象とする基本言語コード(ennlja…)。どの本で使われるかを決めます。無い場合や無効な場合は en になります。
nameいいえ設定の語数の下に表示され、どのファイルが読み込まれているか分かります。
entriesはい語 → { pos, def }entries が空のときは拒否されます。

キーは小文字で。長押しした語は検索前に小文字化されますが、ファイル側のキーは書かれたとおりに使われます。"Aberration" というキーは決して一致しません。トップレベルの未知のフィールドは無視されるので、元データの licenceversion はそのまま残して構いません。

本物の辞書をどこで手に入れるか

入手先規模ライセンス
Webster's 1913約 102 000 項目、それぞれ長い語義1つパブリックドメイン
Wiktionary の抽出(kaikki.org数十万項目、ほとんどの言語CC BY-SA
自作の用語集書いた分だけあなたのもの

いちばん手軽な出発点はパブリックドメインの Webster's 1913 です。matthewreagan/WebstersEnglishDictionary リポジトリで、語 → 語義の JSON ファイル1つとして公開されています。

コマンド1つで変換する

これを 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

できあがるのは 102 217 項目・24 MB のファイルです。Lectern は数秒で読み込んでメモリに保持するので、このくらいの大きさなら余裕があります。もっと大きくても動きますが、古い端末ではメモリを食います——元データが数十万項目あるなら、先に絞り込んでください。

Lectern に取り込む

  1. ファイルをスマホに置く。ダウンロード、Drive、USB ケーブル——Android のファイル選択画面から届く場所ならどこでも。
  2. 設定を開く。下部の設定をタップし、辞書とカタログを開きます。
  3. 「辞書ファイルをインポート」をタップ。JSON を選びます。読み込み中は行に「辞書を読み込み中…」と表示されます。
  4. 状態の行を確認。「102217 語を読み込み · インポートしたファイル」のような表示と、その下に name が出ます。
  5. 本を開いて語を長押し。ポップアップに自分の語義が出て、ユーザーが取り込んだ辞書と表示されます。
Webster's 1913 という名前のインポート済みファイルから 102217 語を読み込んだ Lectern の設定画面
状態の行が、いま効いている辞書と収録語数をはっきり示します。
dusk という語の Webster's 1913 の語義を表示している Lectern のポップアップ
どの語でも長押しすれば、語義は自分のファイルから。Lectern はその出典も明記します。

元に戻すには内蔵を使うをタップします。取り込んだ辞書がすべて削除され、同梱の辞書に戻ります。

ほかの言語の辞書

インポートボタンは1つだけで、どの言語でも同じものを使います。ファイルの行き先を決めるのは JSON の中の language フィールドです。日本語の辞書なら "language": "ja" が必要です。すると Lectern は日本語と判定した本でそれを使い、英語の検索には手を触れません。言語ごとに1つずつ取り込んだ辞書を持てます。

言語は基本コードで照合されるので、en-GBen-US とタグ付けされた本——Project Gutenberg や Standard Ebooks でよくあります——にも en の辞書が使われます。

よくある問題の直し方

「ファイルを読み込めませんでした」

JSON として不正、formatlectern-dict 系の値でない、または entries が空です。まず JSON を検証してください。文字コードのエラーで止まった変換スクリプトは、途中までのファイルを書き出しがちです。

取り込めたのに語が見つからない

ほぼ確実に大文字小文字です。キーは小文字でなければなりません。テキストエディタで "Abate" ではなく "abate" が入っているか確かめてください。

ある本だけ自分の辞書が使われない

Lectern は本の言語から辞書を選びます。その本の詳細シートを開いてどの言語と判定されたかを確認し、辞書の language フィールドを合わせてください。

語義がやたら長い

古い辞書は語義を全部1段落に詰め込みがちです。ポップアップはスクロールしますが、短い項目がよければ変換スクリプトで def を切り詰めてから書き出してください。

辞書の取り込みについて

辞書を取り込むと何かがオンラインに送られますか?

いいえ。ファイルは端末内の Lectern 専用領域にコピーされ、そこから読まれます。Lectern の読書機能は完全にオフラインで動きます。

自分の辞書は WordNet を完全に置き換えますか?

いいえ。収録されている語では自分のファイルが優先され、収録されていない語は内蔵の WordNet に戻ります。つまり取り込みは網羅範囲を広げるだけです。

複数の辞書を同時に取り込めますか?

1言語につき1つです。英語の辞書をもう1つ取り込むと前のものが置き換わりますが、日本語の辞書は英語の辞書と並んで残ります。

ファイルはどのくらい大きくできますか?

約 100 000 項目・24 MB のファイルなら数秒で取り込めて問題なく動きます。それ以上は、固定の上限というより古い端末のメモリが限界になります。

StarDict や DSL の辞書は使えますか?

そのままでは使えません。Lectern が読むのは lectern-dict-v1 の JSON だけです。ただしたいていの形式は短いスクリプトで変換でき、上の変換スクリプトがそのまま出発点になります。

あなたのことばに、あなたの辞書

一度取り込めば、あとはページを離れずオンラインにもつながずに、どの語でも引けます。

入手先Google Play