Emacsで英辞郎を引く(sdic/sary/英辞郎第8版)

2018年11月現在この手の記事で検索ヒットするのはかなり情報が古く、だいぶハマったため備忘録を記す。(今Emacsから英辞郎引く人は皆どうやってるんだろう。)

環境

GNU Emacs 25.3.1/Lubuntu16.04/英辞郎第8版
英辞郎は第9版以降はデータが暗号化されているらしく使えない。
データ抽出のためwindowsマシンは必要。

概要

英辞郎、略辞郎を結合したものを英和辞書として、和英辞郎を和英辞書としてSDIC形式へ変換させEmacsからsdicを用いて利用する。データが巨大なのでsaryというツールを用いてsuffix arrayを付与したデータを作成し高速化を図る。尚、英和辞書側に例辞郎を含めても良いがデータサイズが倍近くなるため除外した。必要なら入れても構わないと思う。ついでに英辞郎のデータに関して云えば、最初にデータ抽出を行う際そのままPDIC一行形式に変換すると発音記号部の情報が落ちる。よって一旦発音記号部のみが記載された辞書を作成し、元々の辞書とマージさせてから出力している。

英辞郎から辞書データを抽出しsdic形式へ変換

英辞郎を発音記号を含んだ状態でPDIC一行形式へ変換

  1. 発音辞書の作成
  2. windowsマシンでPDICアプリを起動する。File->辞書設定<詳細>->辞書グループ一覧にEijiroVIIIが選択されていることを確認し、使用辞書一覧からEIJI-141.dicを右クリック->辞書の変換をクリック 変換先ファイル形式をCSVにし、登録項目は発音記号部のみにチェック。他のチェックは外す。出力先ファイル名をEiji_pron.csv等とし、OKをクリック。これで見出し語と発音記号のみが記載された辞書がCSV形式で出力される。
  3. ヘッダの変換
  4. 出力されたEiji_pron.csvテキストエディタで開き、一行目の"pron"を"trans"に置換する。transは訳語部を表すため、これでこの辞書は見出し語と訳語部に発音記号のみが記載された辞書となった。
  5. 発音記号辞書の取り込み
  6. File->辞書設定<詳細>から使用辞書一覧の何もない部分を右クリックし、既存辞書の追加をクリック。先ほど編集したEiji_pron.csvを選択する。"PDIC用の辞書に変換しますか?"と聞いてくるので"1 PDIC用の辞書に変換する"を選択した状態でOKをクリック。 登録項目をクリックし、訳語部のみにチェックを入れOKをクリック。他の部分は全てデフォルトのままとし、OKをクリック。"ここで作成された辞書は〜〜"のダイアログが出てきたらOKをクリック。これで見出し語&発音記号の辞書が取り込まれる。
  7. オリジナル英辞郎とマージ
  8. File->辞書設定<詳細>から使用辞書一覧を見ると先ほど追加したEiji_pron.dicが表示されていることが分かる。これを右クリックし辞書のマージをクリック。 次の通り設定し、OKをクリック。するとマージが始まる。マージにはそれなりに時間がかかる。

    • 変換元辞書->EIJI141-dicのパス
    • 変換元ファイル形式->PDIC
    • 同一単語の処理->改行付きで付け加える
    • 登録項目->検索キー以外の全てにチェック(本当はチェックしても無意味なものもあるが面倒なのでこうする)

  9. PDIC1行テキスト形式出力

  10. File->辞書設定<詳細>->Eiji_pron.dicを右クリック->辞書の変換をクリック。変換先ファイル形式をPDIC1行テキスト形式とし変換先をEijiro.txt等としOKをクリック。これで目的のファイルが出力された。

略辞郎、和英辞郎の出力

  1. PDIC1行テキスト形式出力
  2. File->辞書設定<詳細>からRYAKU141.dicを右クリックし辞書の変換をクリック。変換先ファイル形式をPDIC1行テキスト形式とし変換先をRyaku.txt等としOKをクリック。同様にWAEI141.dicもWaei.txt等としPDIC1行テキスト形式で出力する。(発音記号の対応は不要)

SDIC形式へ変換

  1. ファイルの移送
  2. windowsマシンからEijiro.txtをGNU/Linuxマシンの任意のフォルダへ移送する。
  3. 変換スクリプトの実行
  4. 事前にnkfrubyのインストールが必要。なければaptなどからインストールしておく。2009-01-11に記載の通り、rubyスクリプトを保存しコマンドを実行。

    $ cat Eijiro.txt Ryaku.txt | nkf -w8 | ruby pdic1line2sdic.rb >Eijiro_Ryaku.sdic
    $ cat Waei.txt | nkf -w8 | ruby pdic1line2sdic.rb >Waei.sdic
    

    これでSDIC形式に変換された。

saryの導入とSuffix Arrayデータの作成

saryのインストール

sary: Suffix Array¤Î¥é¥¤¥Ö¥é¥ê¤È¥Ä¡¼¥ëからsary-1.2.0.tar.gzをダウンロード。次のコマンドでインストール

$ tar -xvf sary-1.2.0.tar.gz
$ cd sary-1.2.0
$ ./configure
$ sudo make
$ sudo make install

非常に古いパッケージのため、依存関係が上手く解決出来ずにsaryのインストールが上手く行かない事があるかもしれない。その場合はwindowsマシンにてgnupackの導入を検討されたし。gnupack_basic-13.06を展開するといきなりcygwinが使えるがここにはsaryがデフォルトでインストール済みとなっている。

Suffix Arayの構築
$ cd Eijiro_Ryaku.sdicとWaei.sdicのあるディレクトリへ
$ mksary -c utf-8 Eijiro_Ryaku.sdic
$ mksary -c utf-8 Waei.sdic

これで同ディレクトリにEijiro_Ryaku.sdic.aryとWaei.sdic.aryという2つの巨大なファイルが作成されているはず。

辞書ファイルの配置

Emacsから参照可能ならばどこでも良い。任意のフォルダに4つのファイルを配置する。

$ mkdir ~/dict/
$ mv Eijiro_Ryaku.sdic Eijiro_Ryaku.sdic.ary Waei.sdic Waei.sdic.ary ~/dict/

sdicの導入

sdicのインストール

English Japanese Dictionary for mule/emacsからsdic-2.1.3.tar.gzをダウンロード。次のコマンドでインストール。詳細はINSTALLファイルを参照のこと。尚、一応aptパッケージからもインストール可能。その際インストール先ディレクトリとロードパスの確認を忘れずに。

$ tar -xvf sdic-2.1.3.tar.gz
$ cd sdic-2.1.3
$ mkdir ~/.emacs.d/site-lisp/sdic
$ ./configure --with-emacs=emacs --with-lispdir=~/.emacs.d/site-lisp/sdic/ --with-dictdir=~/dict/ --with-dicttype=sdic
$ sudo make
$ sudo make install

emacsの設定

(setq sdic-default-coding-system 'utf-8)
(setq sdicf-default-coding-system 'utf-8)
(autoload 'sdic-describe-word "sdic" "英単語の意味を調べる" t nil)
(global-set-key "\C-cw" 'sdic-describe-word)
(autoload 'sdic-describe-word-at-point "sdic" "カーソルの位置の英単語の意味を調べる" t nil)
(global-set-key "\C-cW" 'sdic-describe-word-at-point)
(defvar sdic-face-color "pink" "*Color of entry.
見出し語を表示するために使う色")

(eval-after-load "sdic"
  '(progn
     (setq sdicf-array-command "/usr/local/bin/sary") ; コマンドパス
     (setq sdic-eiwa-dictionary-list
           '((sdicf-client "~/dict/Eijiro_Ryaku.sdic" (strategy array)))
           sdic-waei-dictionary-list
           '((sdicf-client "~/dict/Waei.sdic" (strategy array)))
           )

     ;; saryを直接使用できるように sdicf.el 内に定義されているarrayコマンド用関数を強制的に置換
     (fset 'sdicf-array-init 'sdicf-common-init)
     (fset 'sdicf-array-quit 'sdicf-common-quit)
     (fset 'sdicf-array-search
           (lambda (sdic pattern &optional case regexp)
             (sdicf-array-init sdic)
             (if regexp
                 (signal 'sdicf-invalid-method '(regexp))
               (save-excursion
                 (set-buffer (sdicf-get-buffer sdic))
                 (delete-region (point-min) (point-max))
                 (apply 'sdicf-call-process
                        sdicf-array-command
                        (sdicf-get-coding-system sdic)
                        nil t nil
                        (if case
                            (list "-i" pattern (sdicf-get-filename sdic))
                          (list pattern (sdicf-get-filename sdic))))
                 (goto-char (point-min))
                 (let (entries)
                   (while (not (eobp)) (sdicf-search-internal))
                   (nreverse entries))))))

     (defadvice sdic-forward-item (after sdic-forward-item-always-top activate)
       (recenter 0))
     (defadvice sdic-backward-item (after sdic-backward-item-always-top activate)
       (recenter 0))))

使い方

任意のバッファ上でC-wとするとミニバッファにInput word : が現れる。ここに調べたい単語を入力しEnterを押すと次のように単語の意味が表示される。尚、Input word : の直後にカーソル位置の単語が必ず表示されるのが鬱陶しいためsdic-read-from-minibufferを修正しsdic-describe-word呼び出し時には何も候補を出さないようにしている。


その他

lookupやlookup2、stardictなども試みたがどれも情報が古く行き詰まる状況が多発したため断念した。lookupであればpdictバイナリ形式をそのまま読み込めるため高速に検索出来るが自分の環境では上手く行かなかった。英語の学習に専念しなければならないためこれ以上の深追いはやめておくことにする。

LubuntuにplayonlinuxでKindleをインストール

今更だけどKindleがすげぇ便利だと気づいた。
RMS電子書籍反対派なので自分も真似して反対派ぶってたけどやっぱり便利なものは便利。
つーわけで技術書とかPCで読めたら捗るのになーと思って愛用のLubuntuにインストールすることにした。

wineで解説してる記事が多いけど一部playonlinuxでの解説記事があって、Kindleもパッケージから自動インストールに対応してるっぽかったのでこいつでやろう。
wineのバージョンに気を配る必要もなく、(アプリごとに各種設定が必要というデメリットはあるが)特定のディレクトリ以外は汚さない。

  1. playonlinuxをインストール
  2. $ sudo apt-get install playonlinux
    

  3. Kindleをインストール

  4. playonlinuxを起動し、サイドメニューのInstall a programをクリック。
    (My環境はLANG=en_US.UTF-8。ja_JPの人は日本語で表示され、かつこの後のフォント関連の問題も無関係かもしれない。)

    パッケージがロードされる。終わったらAccessoriesの中にKindleがあるので選択してInstall。
    wine1.7.39(執筆時点)と各種必要なソフトウェアがインストールされる。

  5. Microsoft Fontsをインストール

  6. Microsoft fonts aren't installed; I'll install them for you.と言われたらNext、I Agreeにチェックを入れNextで必要なフォントがインストールされる。
    環境が日本語の人は恐らくここまでで無事に日本語フォントがインストールされるのではなかろうか。
    そのままKidleが起動されるので書籍リストや目次、辞書等で日本語が表示されることを確認してほしい。

  7. Initializingをキャンセル

  8. 必要ないかもしれないが、自分の環境だと(Lubuntu16.04でもLinux Mint Mayaでも)いつまで待ってもKindleのInitializingとPlayonlinuxのインストール完了待ちメッセージがなくなることが無かったため、一旦キャンセル。

  9. ショートカット作成

  10. Playonlinuxのメインメニューに戻り、Configureをクリック。
    amazonkindleを選択し、GeneralタブのMake a new shortcut from this virtual driveを選択。
    Kindleのアイコンを選択し、Nextをクリック。これでPlayOnLinuxのアプリ一覧にもデスクトップにもショートカットが作成される。

  11. 日本語フォントをインストール

  12. ~/PlayOnLinux's virtual drives/amazonkindle/drive_c/windows/Fontsフォルダに好きな日本語フォント.ttcをコピー
    PlayOnLinuxのメニューからConfigure->Kindle->wineタブ->Registry Editorを開く
    メニューのRegistry->Import Registry Fileから次の内容のファイルをインポート。

    REGEDIT4
    
    [HKEY_CURRENT_USER\Software\Wine\Fonts\Replacements]
    "Andale Mono"="フォント名"
    "Arial Unicode MS"="フォント名"
    "Batang"="フォント名"
    "Dotum"="フォント名"
    "MS Gothic"="フォント名"
    "MS Mincho"="フォント名"
    "MS PGothic"="フォント名"
    "MS PMincho"="フォント名"
    "MS UI Gothic"="フォント名"
    "Tahoma"="フォント名"
    "MS ゴシック"="フォント名"
    "MS 明朝"="フォント名"
    "MS Pゴシック"="フォント名"
    "MS P明朝"="フォント名"
    

以上で書籍名も日本語書籍の目次も辞書も日本語化されているはず。

参考にさせていただいたページ
PuppyLinux 無料で楽しく: PlayOnLinuxの基本的な使い方(インストール編)
Kindle for PC を Debian/sid (amd64) で動かす - Engineer in garage
Ubuntu 16.04 に Kindle for PC をインストールする - nkenbou のはまり日記
keiのPC技術ノート: Wineの日本語文字化け解決

vistaでノートンの更新が出来ない→コンパネから規定のプログラムを設定して解決

vistaの事全然分かってないんだけどとりあえずメモ。

ノートン2009の更新サービスで延長の申し込みをしようとしたら”更新サービスの申し込みを続行できません”のエラー。
とりあえず試しに回線を切断してからやってみるとさっきと異なるメッセージが。
”ネットに繋がってません。もし繋がってるのにこのメッセージが出たのならファイアウォールの設定か保護者機能が邪魔をしている可能性を疑ってください”

回線に問題はないしどうせ向こうのサーバもノートン自体も問題はないだろうと思って原因を探ることに。とりあえずコントロールパネルを色々調べた結果、規定のプログラムの設定が出来ていなかった事が判明。つまり.htmlなどの拡張子やHTTPプロトコルなどに対応する(関連付けられている)プログラムは何?というOSの疑問を無視していたことになる。よってノートンのプログラムからHTTPS通信したのち、目的のwebページが見つかってもそれを開くためのプログラムが何か分からないためエラーが出ていたようだ。

て事で設定。コントロールパネル→規定のプログラム→規定のプログラムを設定する、で対象のプログラム(ここではブラウザ、firefox)を選択して「このプログラムの規定を選択する」から各拡張子、プロトコルを選択して保存。

ちなみにコレが上手く行ってないとノートン先生は製品のフィードバックにて”このコンピュータにインストールされているwebブラウザがないので云々”とか言い出す。


さて、解決はしたけど思えばデフォルトでこんなのが設定されてないなんておかしな話はないと思うのでたぶん俺がfirefoxやらchromeやらをインストールした際にきっとどっかいじって関連付けを解除してしまったんじゃないかと思う。