Periksa ejaan dengan beberapa kamus

14

Bagaimana saya bisa menggunakan beberapa kamus dengan pemeriksa ejaan Emacs? Khususnya saya ingin menggunakan kamus bahasa Inggris Inggris dan kamus bahasa Inggris medis pada saat yang sama.

Divinenephron
sumber
Apakah Anda menggunakan flyspell?
PythonNut
Ya, saya menggunakan flyspell.
Divinenephron
Solusinya dapat digunakan flyspelltetapi tidak harus. Dengan begitu jawabannya bisa relevan bagi lebih banyak orang.
Divinenephron

Jawaban:

16

Hunspell dapat memeriksa ejaan dengan beberapa kamus, dan Anda dapat mengonfigurasikannya agar berfungsi dengan Emacs. Ini adalah bagaimana saya melakukannya pada OS X 10.11, dengan Emacs 25.0. Itu tidak akan bekerja dengan Emacsen yang lebih tua.

Instal Hunspell

brew install hunspell

Unduh kamus Hunspell dari LibreOffice dan OpenMedSpel .

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

Masukkan kamus ~/Library/Spelling/.

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

Tambahkan ini ke ~/.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"))
Divinenephron
sumber
Perhatikan bahwa fungsi ini ispell-hunspell-add-multi-dictampaknya tidak ada dalam versi yang lebih lama ispell.el, bahkan yang ada di Emacs 24.5. Saya harus mengunduh file terbaru di github.com/emacs-mirror/emacs/blob/master/lisp/textmodes/… dan byte-compile lagi untuk membuatnya berfungsi.
xji
Saya menggunakan Emacs 25.0. Saya menambahkan catatan tentang itu hanya berfungsi pada Emacs> = 25.0.
Divinenephron
Saya menginstal Emacs 25. Namun, anehnya saya menemukan kesalahan berikut:, Symbol’s function definition is void: ispell-hunspell-add-multi-dicmeskipun saya yakin /usr/share/emacs/25.1.50/lisp/textmodes/ispell.elc, fungsinya ada. Adakah yang tahu bagaimana hal itu terjadi? Terima kasih.
xji
Saya menyadari itu adalah saya ispell.eldalam /usr/share/emacs/site-lisp/membayangi yang lebih baru ispell.eldi Emacs25 ... Lihat unix.stackexchange.com/questions/28483/ ... bagi siapa saja yang mungkin menghadapi masalah yang sama.
xji
2

Misalkan Anda sudah mengunduh en_US-med.dic dan en_US-med.aff dan menginstal hunspell

Langkah 1, jalankan hunspell -Ddi shell, yang akan memberi tahu direktori tempat hunspell mencari kamus, menyalin en_US-med.dic dan en_US-med.aff ke direktori itu.

Langkah 2, masukkan kode di bawah ini ke ~ / .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)))

Kami benar-benar meneruskan opsi "-d en_US, en_US-med" ke CLI hunspell sehingga dapat menggunakan dua kamus "en_US" dan "en_US-med" pada saat yang sama.

Opsi "-d" didokumentasikan dalam manual hunspell ( man hunspellin shell)

Berikut ini kutipan teks dari hunspell manual:

-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.

Diuji pada Emacs 24.3, Debian 7 dengan kata "fibrochondritis".

Harus bekerja di Emacs 23+ pada OS apa pun .

Harap catat di Windows cara termudah untuk memberi tahu hunspell yang dapat dieksekusi jalur pencarian kamus adalah dengan menyetel variabel lingkungan DICTPATH(ini didokumentasikan dalam manual hunspell). Sangat mungkin hunspell yang dapat dieksekusi dari Cygwin / MSYS2 hanya mengenali path dalam format UNIX .

chen bin
sumber
Metode itu tidak memungkinkan saya untuk menggunakan beberapa kamus.
Divinenephron
Kode yang saya berikan IS multi-kamus.
chen bin
Begitu ya, terima kasih sudah menunjukkannya - saya tidak melihat -dopsi.
Divinenephron
Sepertinya ini tidak berhasil karena suatu alasan. Ketika saya menggunakan opsi -d di baris perintah itu berfungsi, tetapi di Emacs, helm-flyspelltampaknya entah bagaimana hanya menggunakan kamus dengan bahasa sistem.
xji
helm-flyspell mungkin menggunakan aspell.
chen bin