辞書の実践ガイド
自分の辞書を 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 | 推奨 | この辞書が対象とする基本言語コード(en、nl、ja…)。どの本で使われるかを決めます。無い場合や無効な場合は en になります。 |
name | いいえ | 設定の語数の下に表示され、どのファイルが読み込まれているか分かります。 |
entries | はい | 語 → { pos, def }。entries が空のときは拒否されます。 |
キーは小文字で。長押しした語は検索前に小文字化されますが、ファイル側のキーは書かれたとおりに使われます。"Aberration" というキーは決して一致しません。トップレベルの未知のフィールドは無視されるので、元データの licence や version はそのまま残して構いません。
本物の辞書をどこで手に入れるか
| 入手先 | 規模 | ライセンス |
|---|---|---|
| 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 に取り込む
- ファイルをスマホに置く。ダウンロード、Drive、USB ケーブル——Android のファイル選択画面から届く場所ならどこでも。
- 設定を開く。下部の設定をタップし、辞書とカタログを開きます。
- 「辞書ファイルをインポート」をタップ。JSON を選びます。読み込み中は行に「辞書を読み込み中…」と表示されます。
- 状態の行を確認。「102217 語を読み込み · インポートしたファイル」のような表示と、その下に
nameが出ます。 - 本を開いて語を長押し。ポップアップに自分の語義が出て、ユーザーが取り込んだ辞書と表示されます。
元に戻すには内蔵を使うをタップします。取り込んだ辞書がすべて削除され、同梱の辞書に戻ります。
ほかの言語の辞書
インポートボタンは1つだけで、どの言語でも同じものを使います。ファイルの行き先を決めるのは JSON の中の language フィールドです。日本語の辞書なら "language": "ja" が必要です。すると Lectern は日本語と判定した本でそれを使い、英語の検索には手を触れません。言語ごとに1つずつ取り込んだ辞書を持てます。
言語は基本コードで照合されるので、en-GB や en-US とタグ付けされた本——Project Gutenberg や Standard Ebooks でよくあります——にも en の辞書が使われます。
よくある問題の直し方
「ファイルを読み込めませんでした」
JSON として不正、format が lectern-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 だけです。ただしたいていの形式は短いスクリプトで変換でき、上の変換スクリプトがそのまま出発点になります。
続けて読む