Sprawdzanie pisowni z wieloma słownikami

14

Jak korzystać z wielu słowników za pomocą modułu sprawdzania pisowni Emacs? W szczególności chcę jednocześnie używać brytyjskiego słownika angielskiego i medycznego słownika angielskiego.

Divinenephron
źródło
Używasz flyspell?
PythonNut
Tak, używam flyspell.
Divinenephron
Rozwiązanie może korzystać, flyspellale nie musi. W ten sposób odpowiedzi mogą być przydatne dla większej liczby osób.
Divinenephron,

Odpowiedzi:

16

Hunspell może sprawdzać pisownię za pomocą wielu słowników i można to skonfigurować do pracy z Emacsem. Tak to robię w systemie OS X 10.11 z Emacsem 25.0. Nie będzie działać ze starszymi Emacsen.

Zainstaluj Hunspell

brew install hunspell

Pobierz słowniki Hunspell z LibreOffice i 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

Włóż słowniki ~/Library/Spelling/.

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

Dodaj to do ~/.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
źródło
Zauważ, że funkcja ispell-hunspell-add-multi-dicwydaje się nie być obecna w starszych wersjach ispell.el, nawet tej w Emacsie 24.5. Musiałem pobrać najnowszy plik ze strony github.com/emacs-mirror/emacs/blob/master/lisp/textmodes/… i ponownie skompilować bajty, aby działał.
Xji
Używam Emacsa 25.0. Dodałem notatkę o tym, że działa tylko na Emacsie> = 25,0.
Divinenephron,
Zainstalowałem Emacsa 25. Dziwnie spotkałem następujący błąd: Symbol’s function definition is void: ispell-hunspell-add-multi-dicchociaż jestem pewien /usr/share/emacs/25.1.50/lisp/textmodes/ispell.elc, funkcja jest obecna. Wiesz, jak to się mogło stać? Dzięki.
Xji
Zdałem sobie sprawę, że to moja ispell.elw /usr/share/emacs/site-lisp/shadowing nowsze ispell.elw Emacs25 ... Zobacz unix.stackexchange.com/questions/28483/... dla każdego, kto może być napotykając ten sam problem.
Xji
2

Załóżmy, że pobrałeś już en_US-med.dic i en_US-med.aff i zainstalowałeś hunspell

Krok 1, uruchom hunspell -Dw powłoce, która powie katalogowi, w którym hunspell szuka słowników, skopiuj en_US-med.dic i en_US-med.aff do tego katalogu.

Krok 2, wstaw poniższy kod do ~ / .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)))

W rzeczywistości przekazujemy opcję „-d en_US, en_US-med” do interfejsu CLI hunspell, aby mógł używać jednocześnie dwóch słowników „en_US” i „en_US-med” .

Opcje „-d” są udokumentowane w podręczniku hunspell ( man hunspellw powłoce)

Oto cytowany tekst z podręcznika 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.

Testowane na Emacs 24.3, Debian 7 ze słowem „zapalenie włókien włóknistych”.

Powinien działać w Emacs 23+ na dowolnym systemie operacyjnym .

Należy pamiętać, że w systemie Windows najłatwiejszym sposobem na wskazanie pliku wykonywalnego hunspell ścieżki wyszukiwania słownika jest ustawienie zmiennej środowiskowej DICTPATH(jest to udokumentowane w podręczniku hunspell). Jest bardzo możliwe, że plik wykonywalny hunspell z Cygwin / MSYS2 rozpoznaje ścieżkę tylko w formacie UNIX .

Chen Bin
źródło
Ta metoda nie pozwala mi korzystać z wielu słowników.
Divinenephron
Kod, który podałem, jest wielo-słownikowy.
chen bin
Rozumiem, dziękuję za zwrócenie na to uwagi - nie zauważyłem -dopcji.
Divinenephron
Z jakiegoś powodu to nie działa. Kiedy używam opcji -d w wierszu poleceń, działa, ale w Emacsie helm-flyspellwydaje się , że w jakiś sposób używa słownika tylko z językiem systemowym.
Xji
Helm-Flyspell może używać Aspell.
chen bin