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.


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"))

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 .


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.