Docker上にCUI版の英語辞書を作成する。


はじめに

  • CUI版の英語辞書で何かいいのはないかと探していたら sdcv というstardictのコマンドバージョンを見つけました。Docker上に環境を作ってみましたがなかなかいい感じです。

1. ホスト環境ディレクトリ構成

root
├── Dockerfile
├── dict_file(辞書ファイル格納ディレクトリ)
│   ├── 辞書ファイル1
│   ├── 辞書ファイル2
│   ├── XXXX


stardict形式の辞書ファイルをdict_fileに配置します。持っていない場合は下記サイトにいくつか使用できるものがあります。
http://download.huzheng.org/
手持ちの辞書ファイルをstardict形式に変換するツールもネット上にいくつかあります。

2. Dockerfile

FROM ubuntu:18.04
RUN apt update &&\
  # 日本語環境、sdcv、lynxをインストールする
    apt install -y language-pack-ja-base language-pack-ja sdcv lynx --no-install-recommends &&\
    apt clean &&\
    rm -rf /var/lib/apt/lists/* &&\
    locale-gen ja_JP.UTF-8 &&\
    echo "export LANG=ja_JP.UTF-8" >> ~/.bashrc &&\
    echo 'export LANGUAGE="ja_JP:ja"' >> ~/.bashrc &&\
  # 結果表示に使用するプログラムを指定する。
    echo "export SDCV_PAGER='/usr/bin/lynx -stdin'" >> ~/.bashrc

今回、ubuntuを使用しましたが他のイメージでも日本語表示をできるようにすれば構築可能と思います。
sdcv用環境変数、SDCV_PAGERはデフォルト指定なしですが結果をhtmlで出力する辞書が多いのでlynxを指定してみました。表示がrichになります。

3. コンテナbuildして起動する

docker build ./ -t sdcv
docker run --rm -v ${PWD}/dict_file:/root/.stardict/dic -it sdcv bash

辞書ファイルを格納するディレクトリをホストマシンと共有します。

4. 辞書ファイルの展開(必要に応じて)

tar -xjvf /root/.stardict/dic/辞書ファイル1.tar.bz2 -C /root/.stardict/dic
tar -xjvf /root/.stardict/dic/辞書ファイル2.tar.bz2 -C /root/.stardict/dic

アーカイブ形式の辞書ファイルはデフォルトの辞書サーチディレクトリに展開します。
sdcv用環境変数、STARDICT_DATA_DIRでもサーチディレクトリを指定することができます。

5. 単語検索(インタラクティブモード)

# sdcv
Enter word or phrase: <意味を知りたい単語>




Ctrl+Cで終了するまで Enter word or phrase: のプロンプトが表示され連続して単語を検索できます。

6. 単語検索(ノンインタラクティブモード)

# sdcv <意味を知りたい単語>

1回のみの検索です。

7. help表示

# sdcv -h

デフォルトfuzzy-search(あいまい検索)ですが、オプションを指定すると完全一致で検索することができます。

8. man ページ

・sdcv用の設定ファイルや環境変数の説明が記載されています。
・複数の辞書を登録したときに$(HOME)/.sdcv_orderingに辞書名を設定して表示順を変更することができます。
・$(HOME)/.sdcv_historyに検索した単語が保存されます。ノンインタラクティブモードのみ?(ファイルの永続性は考慮が必要)

9. その他

コマンドベースなので検索結果を他プログラムのインプットにする等、いろんな活用が可能となります。