複数の辞書によるスペルチェック


14

Emacsスペルチェッカーで複数の辞書を使用するにはどうすればよいですか?具体的には、イギリス英語辞書と医学英語辞書を同時に使用したいです。


使用していflyspellますか?
PythonNut

はい、使用していflyspellます。
-Divinenephron

ソリューションは使用できますflyspellが、そうする必要はありません。そうすれば、答えはより多くの人々に関連することができます。
Divinenephron

回答:


16

Hunspellは複数の辞書を使用してスペルチェックを行うことができ、Emacsで動作するように設定できます。これは、OS X 10.11でEmacs 25.0を使用して行う方法です。古いEmacsenでは動作しません。

Hunspellをインストールする

brew install hunspell

LibreOfficeおよびOpenMedSpelからHunspell辞書をダウンロードします。

cd ~/Downloads/

curl http://extensions.libreoffice.org/extension-center/english-dictionaries/releases/2016.04.01/dict-en.oxt > dict-en.oxt
unzip dict-en.oxt en_GB.aff en_GB.dic

curl -L https://addons.mozilla.org/en-US/firefox/downloads/latest/6526/addon-6526-latest.xpi > openmedspel.xpi
unzip openmedspel.xpi dictionaries/OpenMedSpel.{aff,dic}
mv dictionaries/OpenMedSpel.dic en_US-med.dic
mv dictionaries/OpenMedSpel.aff en_US-med.aff

辞書をに入れ~/Library/Spelling/ます。

mv *.aff *.dic ~/Library/Spelling/

これを追加~/.emacs/init.el

(with-eval-after-load "ispell"
  (setq ispell-program-name "hunspell")
  (setq ispell-dictionary "en_GB,en_US-med")
  ;; ispell-set-spellchecker-params has to be called
  ;; before ispell-hunspell-add-multi-dic will work
  (ispell-set-spellchecker-params)
  (ispell-hunspell-add-multi-dic "en_GB,en_US-med"))

関数ispell-hunspell-add-multi-dicispell.el、Emacs 24.5の古いバージョンでも、の古いバージョンには存在しないようです。github.com/emacs-mirror/emacs/blob/master/lisp/textmodes/…から最新のファイルをダウンロードし、再度動作させるためにバイトコンパイルする必要がありました。
xji

Emacs 25.0を使用しています。Emacs> = 25.0でのみ機能するというメモを追加しました。
ディビネネフロン

:私は妙に私は次のようなエラーに会った、しかし、Emacsの25をインストールしSymbol’s function definition is void: ispell-hunspell-add-multi-dic、私は確かにあるんだけれども/usr/share/emacs/25.1.50/lisp/textmodes/ispell.elc、関数が存在しています。どのようにそれが起こったのでしょうか?ありがとう。
xji

私はそれが私だった実現ispell.el/usr/share/emacs/site-lisp/新しいシャドウイングispell.elEmacs25でを参照してください... unix.stackexchange.com/questions/28483/...同じ問題に遭遇するかもしれない誰のために。
xji

2

すでにen_US-med.dicとen_US-med.affをダウンロードし、hunspellをインストールしたとします

ステップ1、hunspell -Dシェルで実行します。これは、hunspellが辞書を検索する場所をディレクトリに通知し、en_US-med.dicとen_US-med.affをそのディレクトリにコピーします。

ステップ2、以下のコードを〜/ .emacsに挿入し、

(setq ispell-program-name "hunspell")
;; you could set `ispell-dictionary` instead but `ispell-local-dictionary' has higher priority
(setq ispell-local-dictionary "en_US")
(setq ispell-local-dictionary-alist '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-d" "en_US,en_US-med") nil utf-8)))

実際には、オプション「-d en_US、en_US-med」をhunspell CLIに渡し、2つの辞書「en_US」と「en_US-med」を同時に使用できるようにします

「-d」オプションは、hunspellマニュアル(man hunspellシェル内)に記載されています。

hunspellマニュアルから引用したテキストを次に示します。

-d en_US,en_geo,en_med,de_DE,de_med

       en_US  and  de_DE  are  base dictionaries, they consist of aff and dic
       file pairs: en_US.aff, en_US.dic and  de_DE.aff,  de_DE.dic.   En_geo,
       en_med,  de_med  are  special dictionaries: dictionaries without affix
       file. Special dictionaries are optional extension of the base  dictio‐
       naries  usually  with  special (medical, law etc.)  terms. There is no
       naming convention for special dictionaries, only the ".dic" extension:
       dictionaries  without affix file will be an extension of the preceding
       base dictionary (right order of the parameter list needs for good sug‐
       gestions). First item of -d parameter list must be a base dictionary.

Emacs 24.3、Debian 7で「fibrochondritis」という単語を使用してテスト済み。

どのOSでもEmacs 23+で動作するはずです。

Windowsでは、hunspell実行可能ファイルに辞書検索パスを伝える最も簡単な方法は、環境変数を設定することですDICTPATH(hunspellマニュアルに記載されています)。Cygwin / MSYS2からのhunspell実行可能ファイルは、UNIX形式のパスのみを認識する可能性非常に高いです


この方法では、複数の辞書を使用できません。
ディビネネフロン

私が与えたコードは多辞書です。
チェンビン

そのことを指摘してくれてありがとう-d。選択肢に気づかなかった。
ディビネネフロン

まあ、これは何らかの理由で機能していないようです。コマンドラインで-dオプションを使用すると動作しますが、Emacsではhelm-flyspell、システム言語でのみ辞書を使用するようです。
xji

helm-flyspellはaspellを使用する場合があります。
チェンビン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.