Kiểm tra chính tả với nhiều từ điển


14

Làm cách nào tôi có thể sử dụng nhiều từ điển với trình kiểm tra chính tả Emacs? Cụ thể tôi muốn sử dụng từ điển tiếng Anh Anh và từ điển tiếng Anh y tế cùng một lúc.


Bạn đang sử dụng flyspell?
PythonNut

Có, tôi đang sử dụng flyspell.
Divinenephron

Các giải pháp có thể sử dụng flyspellnhưng không phải. Bằng cách đó, câu trả lời có thể phù hợp với nhiều người hơn.
Divinenephron

Câu trả lời:


16

Hunspell có thể kiểm tra chính tả với nhiều từ điển và bạn có thể định cấu hình này để hoạt động với Emacs. Đây là cách tôi thực hiện trên OS X 10.11, với Emacs 25.0. Nó sẽ không hoạt động với Emacsen cũ.

Cài đặt Hunspell

brew install hunspell

Tải xuống từ điển Hunspell từ LibreOfficeOpenMedSpel .

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

Đặt từ điển vào ~/Library/Spelling/.

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

Thêm cái này vào ~/.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"))

Lưu ý rằng chức năng ispell-hunspell-add-multi-dicdường như không có trong các phiên bản cũ hơn ispell.el, thậm chí là chức năng trong Emacs 24.5. Tôi đã phải tải xuống tệp mới nhất tại github.com/emacs-mirror/emacs/blob/master/lisp/textmodes/ và biên dịch lại byte để làm cho nó hoạt động.
xji

Tôi đang sử dụng Emacs 25.0. Tôi đã thêm một lưu ý về nó chỉ hoạt động trên Emacs> = 25.0.
Divinenephron

Tôi đã cài đặt Emacs 25. Tuy nhiên, thật lạ là tôi đã gặp phải lỗi sau: Symbol’s function definition is void: ispell-hunspell-add-multi-dicmặc dù tôi chắc chắn rằng /usr/share/emacs/25.1.50/lisp/textmodes/ispell.elc, chức năng này đã có mặt. Bất cứ ý tưởng làm thế nào nó có thể đã xảy ra? Cảm ơn.
xji

Tôi nhận ra rằng đó là cái tôi ispell.eltrong cái /usr/share/emacs/site-lisp/bóng mới hơn ispell.eltrong Emacs25 ... Xem unix.stackexchange.com/questions/28483/ trên cho bất kỳ ai có thể gặp phải vấn đề tương tự.
xji

2

Giả sử bạn đã tải xuống en_US-med.dic và en_US-med.aff và cài đặt hunspell

Bước 1, chạy hunspell -Dtrong shell, nó sẽ báo cho thư mục nơi hunspell tìm kiếm từ điển, sao chép en_US-med.dic và en_US-med.aff vào thư mục đó.

Bước 2, chèn mã bên dưới vào ~ / .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)))

Chúng tôi thực sự chuyển tùy chọn "-d en_US, en_US-med" cho hunspell CLI để nó có thể sử dụng từ điển TWO "en_US" và "en_US-med" cùng một lúc.

Các tùy chọn "-d" được ghi lại trong hướng dẫn sử dụng hunspell ( man hunspellin shell)

Dưới đây là văn bản trích dẫn từ hướng dẫn 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.

Đã thử nghiệm trên Emacs 24.3, Debian 7 với từ "viêm xơ hóa".

Nên làm việc tại Emacs 23+ trên bất kỳ HĐH nào .

Xin lưu ý trên Windows cách dễ nhất để nói cho hunspell thực thi đường dẫn tìm kiếm từ điển là thiết lập biến môi trường DICTPATH(nó được ghi lại trong hướng dẫn sử dụng hunspell). Rất có thể hunspell có thể thực thi được từ Cygwin / MSYS2 chỉ nhận ra đường dẫn ở định dạng UNIX .


Phương pháp đó không cho phép tôi sử dụng nhiều từ điển.
Divinenephron

Mã tôi đã cho IS đa từ điển.
chen bin

Tôi hiểu rồi, cảm ơn vì đã chỉ ra điều đó - tôi đã không nhận thấy -dtùy chọn này.
Divinenephron

Vâng, điều này dường như không hoạt động vì một số lý do. Khi tôi sử dụng tùy chọn -d trong dòng lệnh, nó hoạt động, nhưng trong Emacs, helm-flyspelldường như bằng cách nào đó chỉ sử dụng từ điển với ngôn ngữ hệ thống.
xji

helm-flyspell có thể sử dụng aspell.
chen bin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.