Перевірка орфографії за допомогою декількох словників


14

Як я можу використовувати кілька словників за допомогою перевірки орфографії Emacs? Зокрема, я хочу одночасно використовувати словник англійської англійської мови та медичний словник англійської мови.


Ви використовуєте flyspell?
PythonNut

Так, я використовую flyspell.
Divinenephron

Рішення можна використовувати, flyspellале не обов’язково. Таким чином відповіді можуть бути актуальними для більшості людей.
Divinenephron

Відповіді:


16

Hunspell може перевірити орфографію за допомогою декількох словників, і ви можете налаштувати це для роботи з Emacs. Так я це роблю в OS X 10.11, з Emacs 25.0. Це не буде працювати зі старшим Emacsen.

Встановіть Hunspell

brew install hunspell

Завантажте словники Hunspell з LibreOffice та 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

Покладіть словники ~/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-dicздається, відсутня у старих версіях ispell.el, навіть у тій, що в Emacs 24.5. Мені довелося завантажити найновіший файл на github.com/emacs-mirror/emacs/blob/master/lisp/textmodes/… і байт-скомпілювати його знову, щоб змусити його працювати.
xji

Я використовую Emacs 25.0. Я додав примітку про це, працюючи лише на Emacs> = 25.0.
Divinenephron

Я встановив 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.elв Emacs25 ... Дивіться 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" до CLI hunspell, щоб він міг одночасно використовувати два словники "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 зі словом "фіброхондрит".

Має працювати в Emacs 23+ на будь-якій ОС .

Зверніть увагу, що в Windows найпростіший спосіб сказати, що виконується hunspell виконуваним шляхом пошуку словника, - це налаштування змінної середовища DICTPATH(це задокументовано в посібнику по hunspell). Це дуже можливо, що виконується hunspell з Cygwin / MSYS2 розпізнає шлях лише у форматі UNIX .


Цей метод не дозволяє мені використовувати декілька словників.
Divinenephron

Код, який я дав, багатомовний словник.
Чень бен

Я бачу, дякую, що вказав на це - я не помітив -dваріанту.
Divinenephron

Ну, здається, це чомусь не працює. Коли я використовую параметр -d у командному рядку, він працює, але в Emacs, helm-flyspellсхоже, якимось чином використовує словник із системною мовою.
xji

helm-flyspell може використовувати aspell.
Чень Бін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.